2

私のコードはこの例に基づいており、停止機能はすでに実装されています。オーディオユニットを初期化解除して停止する機能があります。

    AudioOutputUnitStop(toneUnit);
    AudioUnitUninitialize(toneUnit);
    AudioComponentInstanceDispose(toneUnit);
    toneUnit = nil;

この例では、再生される周波数が1つしかないため、一時停止機能にリンクする必要はなく、一時停止と停止に違いはありません。ただし、私の実装では、さまざまな周波数で再生しているため、再生を一時停止できるようにしたいと考えています。

これがどのように行われるかについてのアイデアはありますか?

4

2 に答える 2

2
  • AUの出力をフェードアウト(〜10ms)し、フェード後に出力の無音部分をフィードします
  • 入力信号の読み取りを停止した位置を覚えておいてください
  • 再開する前にAUをリセットしてください
  • 上で記録した位置から再開します(ここでは、AUへの入力信号のフェードインも適切です)
于 2012-08-21T12:53:17.313 に答える
0

再生時にバッファに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;
       }
   }
于 2012-10-31T08:01:11.387 に答える