0

在我的 as3 应用程序中,我使用 Microphone 类捕获声音输入。但我遇到了问题。

我录制的持续时间少于原始声音。如果将麦克风设备放在扬声器附近,则很容易重现此问题。

我开始使用 Sound 类播放本地 mp3,并将麦克风样本放入字节数组中。之后,我将带有麦克风样本的字节数组保存到本地文件(原始数据)中,并将该文件加载到 Audacity。我还加载到 Audacity 原始 mp3 文件。

图片显示了 Audacity 中显示的两个声波。 图片显示了 Audacity 中显示的两个声波。

我希望在 Audacity 中看到两个同步的声波——录音和原始声音。但是我看到录制结束时不同步增加了。最后我看到不同的持续时间。

还有一件事情。我有两台电脑供我测试。如果我以速率 44100 初始化麦克风,则在第一台计算机上会出现此问题,但如果我设置速率 22050 问题则没有。在第二台计算机上完全没有问题 - 既不是 44100 的速率,也不是 22050 的速率。

有人遇到这个问题吗?为什么会出现这种情况?

希望得到您的帮助,谢谢!

4

1 回答 1

1

这是一件非常困难的事情。有很多变量在起作用 - 麦克风何时开始录音、何时开始播放、何时停止等等。您几乎无法从 AS3 API 中获取显示开始和停止时间的信息。

一般来说,您通常可以指望从您要求播放开始到声音实际从扬声器发出时的延迟大于您开始收听录制样本的延迟。在上面的示例中,您可以看到这一点。问题不在于麦克风录音迟到了,尽管它看起来是这样。相反,问题在于音频播放开始于麦克风之后,因此麦克风在开始时记录了一些相对静音。因此,当您将麦克风录音放回播放轨道时,您会首先看到静音,然后是录制的播放,给人一种麦克风迟到的错误印象。

另一方面,您必须应对从麦克风拾取声音到 SampleDataEvent 与 Flash 中的这些样本一起到达之间的非常大的延迟。当您收到该事件时,您可能会收到很久以前录制的样本 - 甚至可能是半秒或更长时间。这意味着如果您同时停止录制和播放,您将切断麦克风中尚未到达的任何样本,即使它们来自音频播放的实际时间. 您最好的选择是不要在播放的同时关闭麦克风,而是继续检查 SampleDataEvent 处理程序中记录的总字节的长度,以及当它最终与声音文件一样长时(可能加上一个数量考虑到之前讨论的播放延迟),

于 2012-11-17T01:23:08.453 回答