AudioUnit播放PCM问题

AudioUnit播放音频数据:

是通过一个回调来取音频数据,然后拿送入的数据进行播放。
放入的数据过多,会导致播放速率变快,反之亦然。
那么如何才能以标准速度播放呢。

经过测试iOS与Mac每秒的取播放数据频率是固定的。
iOS为每秒取43次。
Mac为每秒取86次。
且不因放入参数的格式与大小而发生变化。

只要保证每次送入回调中的音频数据大小为合适的数据量那么就能够清晰播放且播放速度不发生变化。

播放的时候需要设置参数:
    format->mSampleRate         = 8000;
    format->mBitsPerChannel     = 16;
    format->mChannelsPerFrame   = 1;
    
    format->mFormatID           = kAudioFormatLinearPCM;
    format->mFormatFlags        = kAudioFormatFlagIsSignedInteger ;
    format->mFramesPerPacket    = 1;
    format->mBytesPerPacket  = 2;
    format->mBytesPerFrame    = 2;
计算
这里采样频率为8000,位数为1 且为单通道。
那么每秒钟需要播放的数据就是8000*16bit = 16000Byte;
在iOS平台下,每次送入的数据量就应该是:
16000Byte/43 = 372;
在Mac平台下,每次送入的数据量就应该是:
16000Byte/86 = 186;

只要每次都送入大小为上表中的数据量,就能够流畅播放。

你可能感兴趣的:(AudioUnit播放PCM问题)