我有一个基于AVAudioPlayer
创建的鼓应用,而不是常见的系统声音,以便进行一些控制。
问题在于,无论何时一次播放两个或多个声音,它都会滞后并停止所有声音,因此您的鼓声会随波动并随机停止。
例如:动臂热潮chhhhh动臂热潮ch ---热潮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]。
所有帮助表示赞赏!
答案 0 :(得分:1)
对于某些游戏,我使用OpenAL
API获得了更好的体验。它是非常不同和更低级别(你必须处理源和缓冲区)但它对我来说比AVAudioPlayer
好得多。
答案 1 :(得分:1)
您可以尝试使用iOS游戏引擎来满足您的音频需求。
您实际上不必使用此引擎的图形部分。只需导入并使用框架的音频部分(在OpenAL之上提供简单的API)。