gpt4 book ai didi

ios - 我的 iOS 应用程序使用采样率为 8000 赫兹的音频单元返回失真的声音

转载 作者:行者123 更新时间:2023-11-29 04:31:27 26 4
gpt4 key购买 nike

我真的需要帮助解决这个问题。我正在开发一个带有音频单元的 iOS 应用程序,录制的音频需要使用 alaw 格式以 8 位/8000 赫兹采样率。然而我从扬声器中听到的声音却失真了。

我在网上发现了这个示例:

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

在尝试调试我的应用程序时,我在他的应用程序中使用了我的音频格式,并且我得到了相同的失真声音。我猜我要么设置不正确,要么需要做其他事情才能使其正常工作。鉴于链接中的应用程序和下面的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;

最佳答案

终于可以正常播放了。我在这里发帖是为了帮助其他面临类似问题的人。

我面临的主要问题是模拟器和实际设备之间存在巨大差异。在设备上运行该应用程序,音质更好,但它总是每秒或每两秒跳一次,我找到了一个似乎可以解决此问题的设置,以及一个更改缓冲区大小/持续时间的设置。 (持续时间设置在模拟器上不起作用,我的一些问题是需要它以一定的速率运行才能与其他东西同步,这会导致声音失真)

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 Session 属性阻止了跳跃,使其播放更加流畅。第二个调整缓冲区持续时间,以秒为单位触发回调的频率,并将为您提供不同的缓冲区大小。它尽最大努力意味着它将尽可能接近您提供的值,但它似乎有一个可用尺寸列表并选择最接近的。

请参阅我在问题中链接到的帖子,了解一个非常好的教程/示例程序来开始使用这些东西。

关于ios - 我的 iOS 应用程序使用采样率为 8000 赫兹的音频单元返回失真的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com