gpt4 book ai didi

actionscript-3 - Actionscript:以恒定延迟从扬声器上的麦克风播放声音(通过缓冲区)

转载 作者:行者123 更新时间:2023-12-04 08:26:05 24 4
gpt4 key购买 nike

我正在寻找一个代码示例,它从麦克风和
在扬声器上播放。我需要一个具有合理恒定延迟的解决方案
不同平台(PC、Android、iPhone)。延迟大约 1-2 秒对我来说是可以的,我不
请注意它是否在每次应用程序启动时都发生变化。

我尝试在 Sound 和 Microphpne classess 上使用 SampleDataEvent.SAMPLE_DATA 事件。
一个事件将数据放入缓冲区,另一个事件将读取数据。
但似乎不可能提供恒定的延迟,要么延迟不断增长,要么
它会降低到我要输出的样本少于 2048 个并且 Sound 类停止的地步
生成 SampleDataEvent.SAMPLE_DATA 事件。

我不想处理每个传入的帧,所以使用 setLoopBack(true) 不是一个选项。

ps 这在 Android 设备上比在 PC 上更成问题。当我开始调整应用程序大小时
PC 延迟窗口也开始增长。

请帮忙。

最佳答案

不幸的是,这是不可能的……至少不是直接的。

某些声音设备会在录音和播放之间使用不同的时钟。对于手机来说尤其如此,因为运行麦克风的硬件很可能与耳机音频输出的硬件不同。

基本上,如果您以 44.1kHz 录制并以 44.1kHz 播放,但这些时钟不同步,则您可能以 44.099kHz 录制并以 44.101kHz 播放。随着时间的推移,这种漂移将意味着缓冲区中将没有足够的数据发送到输出。

另一个复杂因素(很可能是您的问题)是您的记录和回放采样率可能不同。如果您从麦克风以 11kHz 录制并以 48kHz 播放,您会注意到 11 不能均匀地放入 48。软件通常用于对录音进行上采样。有时这是通过一个很好的算法来完成的,它可以保证为您提供必要的输出。其他时候,11kHz 将被推到 44kHz 并被认为“足够接近”。

简而言之,您不能依赖录音和播放设备同步,而需要自己进行同步。有很多算法可以处理这个问题。最简单的方法是在这里和那里添加一个样本,在它之前和之后平均样本。如果你只用几个样本来做这件事,那将是听不见的。根据您遇到的漂移问题的类型,这可能就足够了。

关于actionscript-3 - Actionscript:以恒定延迟从扬声器上的麦克风播放声音(通过缓冲区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13605942/

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