我的iOS应用程序使用8000赫兹采样率的audio单元返回一个扭曲的声音

我真的需要帮助解决这个问题。 我正在开发一个带有audio单元的iOS应用程序,录制的audio需要采用alaw格式的8bit / 8000赫兹采样率。 我怎么会听到说话者发出失真的声音。

我在网上看到这个样本:

http://www.stefanpopp.de/2011/capture-iphone-microphone/comment-page-1/

而试图debugging我的应用程序时,我在他的应用程序中使用我的audioFormat,我得到相同的扭曲的声音。 我猜我或者有不正确的设置,或者我需要做一些其他的事情来使这个工作。 鉴于链接中的应用程序和下面的audioFormat任何人都可以告诉我,如果我做错了什么或缺less的东西? 我对这个东西了解不多,谢谢。

audio格式:

AudioStreamBasicDescription audioFormat; audioFormat.mSampleRate = 8000; audioFormat.mFormatID = kAudioFormatALaw; audioFormat.mFormatFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger; audioFormat.mFramesPerPacket = 1; audioFormat.mChannelsPerFrame = 1; audioFormat.mBitsPerChannel = 8; audioFormat.mBytesPerPacket = 1; audioFormat.mBytesPerFrame = 1; 

最终得到它正确播放。 我在这里张贴,以帮助其他人面临类似的问题。

我面临的主要问题是模拟器和实际设备之间存在巨大差异。 在设备上运行应用程序的声音质量是更好的,但它不断跳过每秒或2,我发现一个似乎解决这个设置,并改变缓冲区大小/持续时间的设置。 (持续时间设置在模拟器上不起作用,我的一些问题需要以特定的速率运行以与其他事件同步,这会导致声音失真)

 status = AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, NULL, audioUnit); UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); [self hasError:status:__FILE__:__LINE__]; Float32 preferredBufferSize = 0.005805; // in seconds status = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize); [self hasError:status:__FILE__:__LINE__]; status = AudioSessionSetActive(true); 

第一个audio会话属性是停止跳过,使其发挥更顺利。 第二个调整缓冲区的持续时间,这是以秒为单位的callback被触发的时间,并会给你一个不同的缓冲区大小。 它尽最大的努力意味着它会尽可能接近你提供的价值,但它似乎有一个可用的大小列表,并select最接近的。

看到我在我的问题链接到一个非常好的教程/示例程序来开始使用这个东西。

Interesting Posts