0

私の as3 アプリケーションでは、Microphone クラスを使用してサウンド入力をキャプチャします。しかし、私は問題に直面しました。

私の録音期間は元の音よりも短くなっています。マイク デバイスをサウンド スピーカーの近くに置くと、問題は簡単に再現されます。

Sound クラスを使用してローカル mp3 の再生を開始し、マイクのサンプルをバイト配列に入れます。その後、マイク サンプルを含むバイト配列をローカル ファイル (生データ) に保存し、このファイルを Audacity に読み込みます。また、Audacity のオリジナル mp3 ファイルに読み込みます。

写真は、Audacity に表示されている 2 つの音波を示しています。 写真は、Audacity に表示されている 2 つの音波を示しています。

Audacity では、レコードとオリジナルの 2 つの同期した音波が見られることを期待しています。しかし、録音の終わりまでに非同期が増加していることがわかります。そして最後に、さまざまな期間が表示されます。

後もう一つ。テスト用に 2 台のコンピューターがあります。この問題は、マイクをレート 44100 で初期化すると最初のコンピューターで発生しますが、レート 22050 に設定すると問題は発生しません。2 台目のコンピュータでは、44100 のレートでも 22050 のレートでもまったく問題ありません。

誰かがこの問題を抱えていましたか?なぜこれが起こるのですか?

あなたの助けを願って、ありがとう!

4

1 に答える 1

1

これを正すのは非常に難しいことです。マイクが録音を開始したとき、再生が開始されたとき、停止したときなど、多くの変数が使用されます。開始時刻と停止時刻を明らかにする AS3 API から取得できるものはほとんどありません。

一般に、再生の開始を要求してから実際にスピーカーから音が出るまでの遅延は、録音されたサンプルを聞き始めるまでの遅延よりも大きくなると通常は期待できます。上記の例では、これを見ることができます。問題は、マイクの録音が遅れていることではありませんが、そのように見えます。代わりに、問題は、オーディオの再生がマイクよりも遅く開始されたため、マイクが最初に相対的な無音を録音したことです。したがって、マイクの録音を再生トラックに戻すと、最初に無音が表示され、次に録音された再生が表示され、マイクが遅れたという誤った印象を与えます。

その一方で、マイクが音を拾ってから、SampleDataEvent が Flash 内のこれらのサンプルと共に到着するまでの非常に大きな遅延に対処する必要があります。そのイベントを取得すると、かなり前に記録されたサンプルを取得している可能性があります。これが意味することは、録音と再生を同時に停止すると、オーディオが実際に再生されていた時間からのものであっても、まだ到着していないマイクからのサンプルを切り取ることになるということです。 . ここでの最善の策は、再生と同時にマイクを切断するのではなく、SampleDataEvent ハンドラーで記録された合計バイトの長さをチェックし続け、最終的にサウンド ファイルと同じ長さになったとき (おそらくプラスの量) です。前述の再生遅延を考慮して)、

于 2012-11-17T01:23:08.453 に答える