AUG-> pcm转换后的音频流在iPhone7plus上听起来波涛汹涌,但不是iPhone6

问题描述:

我用AUMixer构建了AUGraph,当通过iPhone7plus上的回调播放流时,音频播放听起来很糟糕。您可以听到音频和正在说的内容,但它非常粗糙。如果我在iPhone6上构建并运行,那听起来很好。AUG-> pcm转换后的音频流在iPhone7plus上听起来波涛汹涌,但不是iPhone6

我也有一个单独的音频单元,没有调音台,在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中,该声音在audiounit图渲染过程中被填充。

我注意到,如果我去48Khz的(编码然后流) - > 48kHz的(接收流,解码,播放),这听起来不错,我的音频渲染PROC显示1024

inNumberFrames如果我去的44.1kHz - > 48khz它听起来很scrat((我的音频单元图表使声音是正确的音高,但由于采样率转换器我放入),但音频渲染过程显示inNumberFrames为941或940

我觉得这可能是什么hotpaw2正在谈论,但是当我将我的AudioBufferList的大小设置为4 * inNumberFrames的倍数时,它仍然听起来很scrat。。

@ hotpaw2?

检查硬件采样率。在很多较新的iOS设备上,硬件音频采样率可以默认为48000,而不是44100,具体取决于插入的内容或以前播放的音频。如果是这样,并且您希望的格式是44100,那么重新采样器将提供不同的奇数长度的缓冲区。期望固定或者甚至是长度缓冲的音频单元回调可能会因此出现问题。

解决这个问题的方法可能是检查硬件采样率。如果它是48000,那么将您的格式设置为相同,因此不需要重新采样。还要确保所有音频上下文回调块都能处理不同的奇数长度/ frameCount的AudioBufferList缓冲区。

+0

感谢您的意见,我检查了硬件采样率,并确保他们使用支持的硬件(的确是48000)我仍然有问题。我收到一个AAC流,我将音频转换到PCM上,然后通过我的AUGraph播放。使用单一的AudioUnitComponent,它听起来使用相同的回调逻辑找到,我用这两个逻辑填充pendingBufferList,但只有Graph似乎显示了这个问题。我只是使用单数AudioUnitComponent,但我需要使用该图形来进行音量混合。 – theprojectabot

+0

我已更新我的原始问题?有什么想法吗? – theprojectabot