2011-12-10 138 views
2

我正在閱讀關於使用AudioServicesPlaySystemSound一次播放一個聲音的堆棧溢出的這篇文章。用AudioServicesPlaySystemSound一次播放1個聲音

stop sound in iPhone

我描述了同樣的問題,用下面的代碼,當你的另一停止播放之前按下一個按鈕,第二個聲音放在了第一位,以使2個聲音重疊的頂部播放。

-(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]; 
} 

按照蘋果的documentation

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,如果可能的話,它會立即播放聲音。

請問有其他人有過同樣的問題嗎?

非常感謝您的時間。

回答

4

試用AudioServicesDisposeSystemSoundID

這只是解決您的問題的解決方案。 如果需要再次播放,您必須再次創建聲音。