2012-07-27 61 views
0

我真的需要帮助解决此问题。我正在开发一个带有音频单元的iOS应用程序,录制的音频需要使用alaw格式的8位/ 8000赫兹采样率。我怎么会听到演讲者发出扭曲的声音。我的iOS应用程序使用8000赫兹采样率的音频单元返回扭曲的声音

我碰到这个样品在线:

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

试图调试我的应用程序,我用我的AudioFormat在他的申请,我收到了同样的声音失真。我猜我要么有不正确的设置,要么我需要做其他的事情来使这个工作。鉴于链接中的应用程序和下面的audioFormat任何人都可以告诉我,如果我做错了什么或错过了什么?我对这个东西不太了解,谢谢。

音频格式:

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; 
+0

你会得到什么样的失真? – hotpaw2 2012-07-27 17:01:07

+1

从您使用此AudioStreamBasicDescription的问题中不清楚。在一个典型的AUGraph设置中,你可以有几个不同的AudioStreamBasicDescriptions(例如)过滤,绘制和记录到磁盘。另外,你从哪里得到这些值?这是你的规格吗?另外,你应该制作一个机器人语音应用程序。 – hooleyhoop 2012-07-27 19:20:26

+0

-hotpaw2失真是我可以听到我的声音,但背景中有静电。其他人将其描述为听起来像输入和输出使用不同的采样率。 @hooleyhoop我只使用一个描述,我把它放在链接中。我的规格是8000赫兹使用法律,其余的设置是从链接或通过玩不同的价值观来看到最好的结果。我刚刚阅读了一个在线资源,声称我必须使用44k线性PCM并转换为我想要的。这是必要的吗? – 2012-07-28 14:57:01

回答

0

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

我面临的主要问题是模拟器和实际设备之间存在巨大差异。在设备上运行应用程序的声音质量更好,但它每秒钟或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); 

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

看到帖子我链接到我的问题一个很好的教程/示例程序开始使用这个东西。

+0

我也面临同样的问题,但看起来不像你的问题。你可以看一下http://stackoverflow.com/questions/21964477/ios7-robotic-garbled-in-speaker-mode-on-iphone5s – Titus 2014-04-03 01:37:37