Я читал этот пост о переполнении стека об использовании AudioServicesPlaySystemSound для воспроизведения одного звука за раз.
остановка звука в iPhone
У меня была описанная проблема со следующим кодом: когда вы нажимаете одну кнопку до того, как другая перестает играть, второй звук воспроизводится поверх первого, так что два звука перекрываются.
-(IBAction)button1:(id)sender{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound1"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
-(IBAction)button2:(id)sender{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound2"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
Согласно документации Apple :
AudioServicesPlaySystemSound
должен воспроизводить только один звук за раз.
Кроме того, при использовании функции AudioServicesPlaySystemSound
:
- Звук воспроизводится при текущей громкости звука системы, при этом отсутствует программный регулятор громкости
- звуки воспроизводятся сразу
- Цикл и стереопозиционирование недоступны
- Одновременное воспроизведение недоступно: Вы можете воспроизводить только один звук за раз
Так что я не понимаю, почему одновременно может воспроизводиться более одного звука.
Я пытался использовать AudioServicesDisposeSystemSoundID
, но звуки все еще перекрываются, я делаю это неправильно?
-(IBAction)sound2:(id)sender{
AudioServicesDisposeSystemSoundID
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound2"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
В настоящее время я использую AVAudioPlayer
вместо этого, но есть задержка запуска звука, и я хотел бы использовать AudioServicesPlaySystemSound
, если это возможно, поскольку он воспроизводит звук немедленно.
У кого-нибудь еще была такая же проблема, пожалуйста?
Большое спасибо за ваше время.