我正在閱讀關於使用AudioServicesPlaySystemSound一次播放一個聲音的堆棧溢出的這篇文章。用AudioServicesPlaySystemSound一次播放1個聲音
我描述了同樣的問題,用下面的代碼,當你的另一停止播放之前按下一個按鈕,第二個聲音放在了第一位,以使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
,如果可能的話,它會立即播放聲音。
請問有其他人有過同樣的問題嗎?
非常感謝您的時間。