Iphone 鼓声应用程序-拉格的声音。。。如何修复?
我有一个drum应用程序,它是基于Iphone 鼓声应用程序-拉格的声音。。。如何修复?,iphone,ios,audio,Iphone,Ios,Audio,我有一个drum应用程序,它是基于AVAudioPlayer而不是普通的系统声音创建的,目的是为了有一点控制力 问题是,每当同时播放两个或多个声音时,它都会延迟并停止所有声音,因此你的鼓拍会变得震荡并随机停止 例如:boom-boom-chhhh-boom-ch----boom-bo----chhhh 如果你能从那个拟声词中分辨出来的话 这是声音代码,我有一个预加载的AVAudioPlayer数组,因此加载速度更快 - (void)triggerSound:(NSInteger)soundNum
AVAudioPlayer
而不是普通的系统声音创建的,目的是为了有一点控制力
问题是,每当同时播放两个或多个声音时,它都会延迟并停止所有声音,因此你的鼓拍会变得震荡并随机停止
例如:boom-boom-chhhh-boom-ch----boom-bo----chhhh
如果你能从那个拟声词中分辨出来的话
这是声音代码,我有一个预加载的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;
}
}
-(空)触发器声音:(NSInteger)声音编号{
NSInteger deltaNum=声音编号*缓冲区编号;
AVAudioPlayer*lowBuffer=[bufferBox objectAtIndex:deltaNum];
布尔值soundFired=FALSE;
//如果可能,找到一个未使用的缓冲区,否则从第一个缓冲区播放声音。
对于(int i=0;itempBuffer.currentTime){
lowBuffer=tempBuffer;
}
}
如果(!soundFired){
lowBuffer.currentTime=0;
[低缓冲播放];
soundFired=TRUE;
}
}
该方法在iAction按钮按下时调用。例:[Drumbject triggerSound:3]
感谢大家的帮助 我对一些游戏使用
OpenAL
API有了更好的体验。这是非常不同的,而且级别更低(你必须处理源和缓冲区),但它对我来说比AVAudioPlayer好得多。你可以尝试使用iOS游戏引擎来满足你的音频需求
例如:
实际上,您不必使用此引擎的图形部分。只需导入并使用框架的音频部分(它在OpenAL的基础上提供了一个简单的API)。谢谢,我将对此进行研究!Cheersnote OpenAL不支持AAC或MP3开箱即用压缩。你必须手动解压并将它们流到你的OpenAL缓冲区中;我用cocosdenshion作为我的引擎,它工作得很好:)