AS3。麦克风录音的持续时间少于原始声音

时间:2012-08-14 20:29:06

标签: actionscript-3 flash audio microphone recording

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

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

我开始使用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 个答案:

答案 0 :(得分:1)

这是一件非常艰难的事情。有许多变量在起作用 - 麦克风开始录制时,播放开始时,停止播放时等等。很少有人可以从AS3 API返回,显示开始和停止时间。

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

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