Спасибо @Till за указание на соответствующую часть документов .Для других с этой проблемой решение состоит в том, чтобы явно установить категорию сеанса, в моем случае, на окружающий звук.Этот код взят из документов Apple :
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; // 1
AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory, // 2
sizeof (sessionCategory), // 3
&sessionCategory // 4
);
Итак, мой метод воспроизведения звука теперь выглядит следующим образом:
-(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);
}
}
Это решает мою проблему легко!Единственное, что меня беспокоит, это то, что установка его явно каждый раз, когда я играю звук, может быть чрезмерной.Кто-нибудь знает лучший и безопасный способ установить его и забыть?В противном случае это работает восхитительно.