我正在尝试制作一个简单的 Drumpad 应用程序。该应用程序需要超快并以尽可能少的延迟播放声音。前提是将音频样本存储在一个数组中,并在您敲击打击垫时播放每个样本。
问题是有些打击垫是和弦(而不是鼓),因此它们需要在 Touch Up 时立即停止。
以下是我尝试过的方法:
系统声音- 实现起来非常简单,反应灵敏,没有办法在不破坏声音的情况下停止声音,声音不能超过 30 秒。
AV 框架- 减慢速度。
惊人的音频引擎- 看起来不错,但不确定与 CoreAudio 相比有什么优势,因为设置相当复杂,我无法播放声音。也不确定延迟。
Novocaine - 我现在就决定了,它看起来非常快,而且我可以播放声音,但我发现一旦它们开始就没有办法阻止它们。我不知道如何在不停止整个 audioManager 的情况下停止单个声音?
- (void) playSoundN:(int)padNum
{
__weak ViewController * wself = self;
NSURL *inputFileURL = [[NSBundle mainBundle] URLForResource:@"Drum - Kick" withExtension:@"wav"];
self.fileReader = [[AudioFileReader alloc]
initWithAudioFileURL:inputFileURL
samplingRate:self.audioManager.samplingRate
numChannels:self.audioManager.numOutputChannels];
[self.fileReader play];
self.fileReader.currentTime = 0.0;
[self.audioManager setOutputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels)
{
[wself.fileReader retrieveFreshAudio:data numFrames:numFrames numChannels:numChannels];
NSLog(@"Time: %f", wself.fileReader.currentTime);
}];
[self.audioManager play];
}
似乎是一项简单的任务,以超低延迟启动和停止声音。
我应该使用上述方法之一,还是硬着头皮进入核心音频单元。
有人有想法么?