AudioQueue示例值错误

时间:2012-03-29 14:00:10

标签: iphone ios core-audio audioqueue

我需要读取音频样本值。我正在使用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]); 
    }

返回值,但是当我将它们与来自大胆的图表进行比较时,它们似乎是错误的:

screen

Audacity值从1(65535)到-1(0)。所以逻辑上第一个样本值应该是32767,第二个应该是~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返回的样本值是错误的?

1 个答案:

答案 0 :(得分:2)

该文件的结尾性与您的系统不同。您必须交换每个样本的字节顺序。样本也是16位整数(SInt16),而不是UInt16。因此,最大值为32767(不是65535),最小值为-32767。

查看ExtendedAudioFile.h和AudioConverter.h以获取帮助转换。