1

私のコールバックは次のようになります。

static OSStatus renderInput(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags,                          const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData)
{
    AudioSampleType *outBuffer = (AudioSampleType *)ioData->mBuffers[0].mData;
    memset(outBuffer, 0, sizeof(AudioSampleType)*inNumberFrames*kNumChannels);      

    //copy a sine wave into outBuffer
    double max_aust = pow(2.f, (float)(sizeof(AudioSampleType)*8.0 - 1.f)) - 1.0;
    for(int i = 0; i < inNumberFrames; i++) {
        SInt16 val = (SInt16) (gSine2_[(int)phase2_] * max_aust);
        outBuffer[2*i] = outBuffer[2*i+1] = (AudioSampleType)val;
        phase2_ += inc2_;
        if(phase2_ > 1024) phase2_ -= 1024;
    }

    return noErr;
}

これは、正弦波を再生するだけの非常に基本的なレンダー コールバックです。シミュレーターでは実行されますが、デバイスでは実行されません。実際、デバイスからオーディオを取得できません。outBuffer をチェックするために printf を追加しても、outBuffer が正弦波のサンプルで満たされていることがわかります。

セッションタイプを Ambiet に設定していますが、playAndRecord と MediaPlayback も試しました。どちらにも運がありません。私の好みの framesPerBuffer は 1024 です (これは、シミュレーターとデバイスで得られるものです)。私のサンプルレートは 44100hz です。念のため48000も試しました。また、framesPerBuffer を変更してみました。

サンプルがデバイスのハードウェアに到達しない他の理由はありますか?

更新: ヘッドフォンをデバイスに接続すると、正弦波のような音が聞こえ、非常にひどくクリッピングしていることがわかりました。これにより、デバイスが符号付き整数ではなく浮動小数点を期待していた可能性があると思いましたが、値を -1 から 1 に変更すると、オーディオがまったくありません (エンジンは符号付き整数ではなく、符号付き整数を受け入れるように設定されているため、デバイスまたはシミュレーターは予想どおりです)。浮動小数点)。

4

3 に答える 3

1

AudioSampleTypeセットアップをもっと見ないとはっきりとは言えませんが、 (SInt16 サンプル) と(コンテナーAudioUnitSampleType内の 8.24 サンプルを修正)の違いに悩まされているように聞こえます。コールバックで期待される形式SInt32であることがほぼ確実です。Core Audio メーリング リストのこの投稿では、この 2 つの違いと、それらが存在する理由について説明しています。AudioUnitSampleType

于 2013-01-19T01:24:56.213 に答える
0

あなたのセットアップがどのようになっているのかわからないので、これを読むことをお勧めします: http://www.cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html

サンプル コードは、2 番目のチャンネルもステレオで埋めたい場合のモノラル トーン ジェネレーター用です。

2 番目のチャネル バッファへのポインタは

const int secondChannel = 1;
Float32 *bufferSecondChannel = (Float32 *)ioData->mBuffers[secondChannel].mData;

この助けを願っています

于 2013-02-08T11:52:41.750 に答える