我刚创建了一个鼓应用程序。用户点击各个按钮,使用AudioToolbox中的系统声音触发短音。 我现在想添加一个表示“记录”的UIButton,点击后,将记录正在播放的所有系统,然后当使用时按下停止按钮;然后程序应该能够播放声音。
我该如何做到这一点?!程序的整个过程能够通过点击各个命中区域来记录用户触发的短促声音吗?!
请告诉我
由于
帕
答案 0 :(得分:0)
我不熟悉iPhone本身的音频硬件,但由于它没有公开任何内部合成例程,如果无法捕获出站音频进行重新处理,我不会感到惊讶。
我怀疑你会发现它更容易,特别是如果你不熟悉直接编程音频硬件,而是录制鼓动作和时间间隔,并以与原始播放相同的方式重放音频文件。这也有一个优点,你可以编辑,减速,加速和其他技巧,而无需直接改变音频。
当鼓被击中时,你需要附加到NSMutableArray。下面的示例基于drumType(例如,鼓按钮的标签被击中),以及drumNextDelay,它是下一个鼓点击的延迟(NSTimeInterval)。显然有更多的方法可以解决这个问题,但这只是一个例子。
可以通过在下一个时间间隔内重复调用performSelector来实现回放的粗略版本,如下所示:
- (void) startPerformance {
self.drumIndex = -1;
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:0];
}
- (void) playDrumBeat {
self.drumIndex++;
[self playDrum:[[drumBeats objectAtIndex:self.drumIndex] drumType]];
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:[[drumBeats objectAtIndex:self.drumIndex] drumNextDelay]];
}
这可能会导致操作系统出现计时问题,但是我会先尝试这样的第一次切割,看看是否有效。
巴尼