2

AppleのCoreAudioAudioUnit APIを使用して、新しくレンダリングされたオーディオサンプルがいっぱいありますが、サンプルを正しい形式で取得するのに問題がありAudioBufferます。void *mData前記バッファのASBDは以下の通りである:

Float64 mSampleRate        44100
UInt32  mFormatID          1819304813
UInt32  mFormatFlags       41
UInt32  mBytesPerPacket    4
UInt32  mFramesPerPacket   1
UInt32  mBytesPerFrame     4
UInt32  mChannelsPerFrame  2
UInt32  mBitsPerChannel    32
UInt32  mReserved          0

これは、アプリケーションをデバッグしてAudioUnitGetProperty(rioUnit, kAudioUnitProperty_StreamFormat, ...)呼び出しを実行することで得られました。このmFormatFlagsフィールドは、次のフラグを意味します(正式なデコード方法はわかりません。取得するkAudioUnitFlagsまで、さまざまな組み合わせを試して取得しました41)。

kAudioFormatFlagIsNonInterleaved | kAudioFormatFlagIsPacked | kAudioFormatFlagIsFloat

どのタイプのデータでバッファーをキャストする必要がありますか?Float32、、で試しましSInt32たが、そうではありません。

後で変換するつもりですSInt16が、最初にサンプルの正しい形式を取得しないと変換できません。

前もって感謝します。

4

3 に答える 3

3

私の経験では、iOSは浮動小数点データを直接提供しません。代わりに、要求してSInt16(したがって、mBitsPerChannel16に設定して)、各数値を32767で除算して、整数データを手動で浮動小数点数に変換する必要があります。

于 2012-10-02T08:26:31.843 に答える
1

その ASBD に基づいて、データはステレオのインターリーブされていない 32 ビット float であり、Mac OS X の Audio Units の正規の形式です。

mDataフィールドをにキャストしてfloat *、オーディオ データの 1 つのチャネルを取得できるはずです。フル ステレオ オーディオは、AudioBufferListそれぞれが 1 つのチャネルを含む 2 つのバッファを持つ に含まれている必要があります。

キャストがFloat32機能しないのはなぜですか?

于 2012-09-07T23:33:46.100 に答える
0

このコードを確認してください:

   - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
   fromConnection:(AVCaptureConnection *)connection

       //calback function

        const AudioStreamBasicDescription *audioDescription = CMAudioFormatDescriptionGetStreamBasicDescription(CMSampleBufferGetFormatDescription(sampleBuffer));

        int sampleRate        = (int)audioDescription ->mSampleRate;
        int channelsPerFrame  = (int)audioDescription ->mChannelsPerFrame;
        UInt32 formatFlag     =  audioDescription ->mFormatFlags;

        if (formatFlag & kAudioFormatFlagIsFloat) {
          NSLog(@"IS FLOAT");

        } else if ( formatFlag & kAudioFormatFlagIsSignedInteger) {
          NSLog(@"IS Signed Integer");
        }

}

于 2015-06-09T10:24:26.893 に答える