【问题标题】:How to implement pause function for Audio Units如何实现音频单元的暂停功能
【发布时间】:2012-08-21 12:40:41
【问题描述】:
我的代码基于this example,并且已经实现了停止功能,有一些函数可以取消初始化和停止音频单元:
AudioOutputUnitStop(toneUnit);
AudioUnitUninitialize(toneUnit);
AudioComponentInstanceDispose(toneUnit);
toneUnit = nil;
在我链接到暂停功能的示例中,因为只有一个频率正在播放,所以暂停和停止之间没有区别。然而,在我的实现中,我正在播放一系列不同的频率,并且我希望能够暂停播放。
任何想法如何做到这一点?
【问题讨论】:
标签:
core-audio
audiounit
audio-player
【解决方案1】:
- 淡出 (~10ms) AU 的输出,在淡出后提供输出静音
- 记住您停止读取输入信号的位置
- 在恢复之前重置 AU
- 从您上面记录的位置恢复(这里,将输入信号淡入到 AU 也很好)
【解决方案2】:
您可以在播放时尝试将 0 写入缓冲区。这实际上是一个暂停。
下面是一些您可以在播放回调中使用的代码。
NSLog(@"Playing silence!");
for (int i = 0 ; i < ioData->mNumberBuffers; i++){
//get the buffer to be filled
AudioBuffer buffer = ioData->mBuffers[i];
UInt32 *frameBuffer = buffer.mData;
//loop through the buffer and fill the frames
for (int j = 0; j < inNumberFrames; j++){
frameBuffer[j] = 0;
}
}