2012-08-14 160 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處理程序中檢查總記錄字節的長度,以及最終與聲音文件(可能加上一個數量允許之前討論的播放延遲),停止播放。