1

オーディオ サンプル値を読み取る必要があります。その audioQueue コールバックに使用しています (Apple SpeakHere の例から):

     UInt32 samplesCount = inCompleteAQBuffer->mAudioDataBytesCapacity / 2;

    UInt16 *samples = (UInt16 *)inCompleteAQBuffer->mAudioData;   

    for (int i=0; i < samplesCount; i++)
    {
        printf("%i\n", samples[i]); 
    }

値が返されますが、大胆さのグラフと比較すると、間違っているようです:

画面

Audacity の値は 1 (65535) から -1 (0) です。したがって、論理的には、最初のサンプル値は 32767 で、2 番目のサンプル値は ~50 000 である必要があります ...

しかし、私は他の結果を受け取ります:

    value - position

    65535 - 0
    29501 - 1
    26086 - 2
    63656 - 3
    28477 - 4
    65407 - 5
    36802 - 6
    36546 - 7
    18244 - 8
    17220 - 9

    player settings:

    (Float64) mSampleRate = 44100
    (UInt32) mBytesPerPacket = 2
    (UInt32) mFramesPerPacket = 1
    (UInt32) mBytesPerFrame = 2
    (UInt32) mChannelsPerFrame = 1
    (UInt32) mBitsPerChannel = 16
    (UInt32) mReserved = 0

質問 - mAudioData から返されるサンプル値が間違っているのはなぜですか?

4

1 に答える 1

2

ファイルのエンディアンは、システムとは異なります。各サンプルのバイト順を入れ替える必要があります。また、サンプルは UInt16 ではなく、符号付き 16 ビット整数 (SInt16) です。したがって、最大値は 32767 (65535 ではありません) で、最小値は -32767 です。

変換のヘルプについては、ExtendedAudioFile.h と AudioConverter.h を参照してください。

于 2012-03-29T16:22:36.027 に答える