我有一个基于 AVAudioPlayer
而不是常见的系统声音创建的鼓应用程序,以便进行一些控制。
问题是,每当同时播放两个或多个声音时,它会滞后并停止所有声音,因此您的鼓点会变得断断续续并随机停止。
例如:boom boom chhhhh boom boom ch--- boom bo---- chhhhh
如果你能从那个象声词中分辨出来。
这是声音代码,我有一组预加载的 AVAudioPlayer
以便它加载更快。
- (void)triggerSound:(NSInteger)soundNumber {
NSInteger deltaNum = soundNumber*numberOfBuffers;
AVAudioPlayer *lowBuffer = [bufferBox objectAtIndex:deltaNum];
Boolean soundFired = FALSE;
// Find an unused buffer if possible, otherwise play sound from first buffer.
for (int i=0; i<numberOfBuffers; i++) {
NSLog(@"Buffer loop: %d", i);
NSLog(@"Buffer to load: %d", deltaNum);
AVAudioPlayer *tempBuffer = [bufferBox objectAtIndex:deltaNum+i];
if (!tempBuffer.playing) {
tempBuffer.currentTime = 0;
[tempBuffer play];
soundFired = TRUE;
break;
} else if (lowBuffer.currentTime>tempBuffer.currentTime) {
lowBuffer = tempBuffer;
}
}
if (!soundFired) {
lowBuffer.currentTime = 0;
[lowBuffer play];
soundFired = TRUE;
}
}
在按下 IBAction 按钮时调用该方法。例如:[drumObject triggerSound:3].
感谢所有帮助!
最佳答案
对于某些游戏,我对 OpenAL
API 有更好的体验。它非常不同并且级别更低(您必须处理源和缓冲区)但它对我来说比 AVAudioPlayer
好得多。
关于iphone - 打鼓应用程序 - 延迟声音......如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3697442/