Воспроизведение 1 звука за раз с AudioServicesPlaySystemSound - PullRequest
2 голосов
/ 10 декабря 2011

Я читал этот пост о переполнении стека об использовании 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, если это возможно, поскольку он воспроизводит звук немедленно.

У кого-нибудь еще была такая же проблема, пожалуйста?

Большое спасибо за ваше время.

1 Ответ

4 голосов
/ 16 февраля 2012

Попробуйте с AudioServicesDisposeSystemSoundID.

Это просто решение вашей проблемы. Вы должны создать звук снова, если вам нужно воспроизвести его снова.

...