【问题标题】: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;
             }
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多