iPhone audioservicesplaysystemsound: маршрут, хотя наушники?
-
11-10-2019 - |
Вопрос
У меня проблемы с использованием AudioServicesPlaySystemSound. Вещи отлично работают, когда вывод проходит через динамики. Однако, когда пользователь подключается к наушникам, вывода нет. Есть ли простой способ настроить какой -то слушатель, чтобы аудио автоматически направляется через наушники, когда они подключены, и в противном случае через динамик?
Я использую следующий метод для игры в короткие, простые образцы звука AIF:
-(void)playAif:(NSString *)filename {
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
pathForResource:filename ofType:@"aif"];
if (path) { // test for path, to guard against crashes
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);
}
}
Я знаю, что мне не хватает чего -то, какой -то настройки, которая сделала бы это. Любые идеи?
Решение
Спасибо @Till за то, что указали мне на соответствующая часть документов. Анкет Для других с этой проблемой решение состоит в том, чтобы явно установить категорию сеанса, в моем случае для Ambient Sound. Этот код потерпел Документы Apple:
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; // 1
AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory, // 2
sizeof (sessionCategory), // 3
&sessionCategory // 4
);
Итак, мой метод воспроизведения Audio теперь выглядит так:
-(void)playAif:(NSString *)filename {
// NSLog(@"play: %@", filename);
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
pathForResource:filename ofType:@"aif"];
if (path) { // test for path, to guard against crashes
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; // 1
AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory, // 2
sizeof (sessionCategory), // 3
&sessionCategory // 4
);
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);
}
}
Это легко решает мою проблему! Единственное беспокойство, которое у меня есть, это то, что настройка его явно каждый раз, когда я играю звук, может быть чрезмерным. Кто -нибудь знает лучшего и более безопасного способа установить его и забыть об этом? В противном случае это работает восхитительно.