Я нашел 1 вопрос на SO по той же проблеме, и он остается без ответа. AVAudioPlayer влияет на системные звуки
AVAudioSessionCategoryAmbient не является ответом, поскольку позволяет приложению воспроизводить свой звук только одновременно со звуком другого приложения, но это не так.
Я воспроизвожу звуковые эффекты, такие как звуки нажатия кнопок и т. д., с помощью SystemSound, а фоновую музыку — с помощью AVAudioPlayer. Когда AVAudioPlayer запускается во время воспроизведения SystemSound, этот конкретный системный звук внезапно становится примерно в 5 раз громче. Кто-нибудь еще испытал это? Что можно исправить?
Они находятся в SoundControl.m, и я играю в gameBG сразу после перехода.
-(void)gameBG {
self.sharedSoundControl = [SoundControl sharedSoundControl];
if (self.sharedSoundControl.musicOff == NO) {
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"bgm" withExtension:@"mp3"] error:nil];
self.audioPlayer.numberOfLoops = -1;
self.audioPlayer.volume = 0.3f;
[self.audioPlayer play];
}}
-(void)transition {
if (self.sharedSoundControl.effectOff == NO) {
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"transition" ofType:@"caf"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:soundPath], &soundID);
AudioServicesPlaySystemSound(soundID);
}}
ИЗМЕНИТЬ
Только что понял, что если где-то уже проигрывается другой экземпляр AVAudioPlayer, такого поведения не происходит. Это происходит, когда нет активного AVAudioPlayer, и вы воспроизводите системный звук, а затем AVAudioPlayer, и вуаля, этот системный звук, который вы только что воспроизвели, внезапно стал ДЕЙСТВИТЕЛЬНО громким.
Я думаю, что если я не получу ответов, мне просто придется воспроизвести какой-нибудь случайный приглушенный AVAudioPlayer прямо перед воспроизведением системного звука, чтобы этого не произошло, но я надеюсь получить какое-то «настоящее» исправление для этого. Пожалуйста, не предлагайте воспроизводить какой-либо случайный приглушенный AVAudioPlayer прямо перед воспроизведением системного звука, потому что я только что сказал об этом.