2012-08-14 163 views
0

在我的as3应用程序中,我使用麦克风类捕获声音输入。但我面临问题。AS3。麦克风录音时间少于原始声音

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

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

picture显示了在Audacity中显示的两个声波。 The picture shows two sound waves as it shows in the Audacity.

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

还有一件事。我有两台电脑用于测试。这个问题发生在第一台计算机上,如果我初始化速率为44100的麦克风,但是如果我设置速率22050的问题没有。 在第二台计算机上完全没有问题 - 无论是44100的速率,还是速率22050.

有没有人有这个问题?为什么会发生?

希望对您有所帮助,谢谢!

回答

1

这是一个非常艰难的事情得到正确的。在播放时有很多变数 - 当麦克风开始录制时,播放开始时,停止时等等。您很少能够从AS3 API中获取有关启动和停止时间的信息。

通常情况下,您通常可以计算从播放开始到开始播放扬声器时的延迟时间,以及当您开始收听录制的样本时的延迟时间。在你上面的例子中,你可以看到这个。问题不在于麦克风录制的时间晚了,即使它看起来如此。相反,问题是音频播放比麦克风开始晚,所以麦克风在开始时记录了一些相对的静音。因此,当您将麦克风录音重新放回播放轨道时,首先会看到静音,然后是录制的播放,从而给出麦克风迟到的错误印象。

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