AAB-> pcm转换后的音频流的AUGraph播放在iPhone7plus上听起来不稳定但不是iPhone6

时间:2017-09-21 20:45:59

标签: ios objective-c audiounit augraph

我用AUMixer构建了一个AUGraph,当通过iPhone7plus上的回调播放流时,音频播放听起来很糟糕。你可以听到音频和所说的内容,但它非常沙哑。如果我在iPhone6上构建并运行它听起来不错。

我还使用没有调音台的单一AudioUnit实现了设置,在iPhone7和iPhone6上听起来都不错,但我当然失去了调音台所需的功能。我对两个设置使用相同的AudioStreamBasicDescription(带混音器的图形和单一的audiounit)

关于为什么听起来如此糟糕的想法特别是我的iPhone7 plus上的图表?

My current ASBD:
_pcmASBD    AudioStreamBasicDescription 
mSampleRate Float64 44100
mFormatID   AudioFormatID   1819304813
mFormatFlags    AudioFormatFlags    12
mBytesPerPacket UInt32  4
mFramesPerPacket    UInt32  1
mBytesPerFrame  UInt32  4
mChannelsPerFrame   UInt32  2
mBitsPerChannel UInt32  16
mReserved   UInt32  0

我正在进行AAC到PCM的转换,然后将这些数据输入AURenderCallback,最后输入由AudioUnit架构播放的pendingBufferList。

我需要使用混音器,因为我想控制音量,所以一个单一的AudioUnit方法(它没有显示这个错误,但使用相同的回调和一切)对我不起作用,因为我不喜欢通过调制音频影响原始数据流。

编辑:

要为此添加更多代码和想法,以期有望解决问题。

我使用AudioConverter处理传入的AAC流,这将转换为LPCM,然后我将其输入我的AudioBufferList,该AudioBufferList在audiounit graph render proc期间被填充。

我注意到如果我去48Khz(编码然后流) - > 48khz(接收流,解码,播放)听起来不错,我的音频渲染过程显示在1024的数字框架中。

如果我去了44.1khz - > 48khz它听起来很沙哑(我的音频单位图表听起来是正确的音调,因为我输入的采样率转换器)但音频渲染过程显示inNumberFrames为941或940

我觉得这可能就是hotpaw2所说的,但是当我将AudioBufferList的大小设置为4 * inNumberFrames的倍数时,它仍然听起来很沙哑。

@ hotpaw2?

1 个答案:

答案 0 :(得分:0)

检查硬件采样率。在许多较新的iOS设备上,硬件音频采样率默认为48000,而不是44100,具体取决于插入的内容或以前播放的音频。如果是这样,并且您想要的格式是44100,则重采样器将提供变长和奇数长度的缓冲区。期望固定或偶数长度缓冲区的音频单元回调可能因此而出现故障。

修复它的方法可能是检查硬件采样率。如果它是48000,那么将您的格式设置为相同,因此不需要进行重采样。还要确保所有音频上下文回调块都可以处理AudioBufferList缓冲区的变长和奇数长度/帧数。