我用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?
答案 0 :(得分:0)
检查硬件采样率。在许多较新的iOS设备上,硬件音频采样率默认为48000,而不是44100,具体取决于插入的内容或以前播放的音频。如果是这样,并且您想要的格式是44100,则重采样器将提供变长和奇数长度的缓冲区。期望固定或偶数长度缓冲区的音频单元回调可能因此而出现故障。
修复它的方法可能是检查硬件采样率。如果它是48000,那么将您的格式设置为相同,因此不需要进行重采样。还要确保所有音频上下文回调块都可以处理AudioBufferList缓冲区的变长和奇数长度/帧数。