1

decodeAudioDataをmp3ファイルに使用します。これは私にAudioBufferを与えます。このオーディオバッファでは、getChannelData()によって返されたデータを使用してキャンバスにこのmp3ファイルの波形を描画します。AudioBufferの "getChannelData()"はMediaStream(またはMediaStreamAudioSourceNode)に相当しますか?

私は同じコードを使用してMediaStreamのオーディオデータの波形を描きたいと思います。つまり、同じ種類の入力/データが必要です。私はMediaStreamはリアルタイムの情報が含まれていますが、どのようなAudioBuffer年代であるPCMデータ

を含むFloat32Array

として MediaStreamからそれぞれの新しいデータにアクセスする方法がなければならない知っている getChannelData戻る。

私は(Float32Arrayを返す)MediaStreamAudioSourceNodeMediaStreamをラップし、getFloatFrequencyData()を使用するAnalyserNodeにそれを供給しようとしたが、私は、データは私がgetChannelData()から取得したデータは異なっている伝えることができます。 PCMデータではないのでしょうか? 「PCM」データを取得するにはどうすればよいですか?

これは明らかです。助けてくれてありがとう!

答えて

2

最初に、AnalyserNodeはデータを時々しかサンプリングするが、すべてのデータを処理しないことに注意してください。あなたのシナリオによくマッチすると思いますが、すべてのデータが必要な場合(オーディオをバッファリングしているような場合)、今日は代わりにScriptProcessorを使用する必要があります。

データのサンプルが必要な場合は、AnalyserNodeを使用できますが、getFloatFrequencyData()ではなくgetFloatTimeDomainData()を呼び出す必要があります。それはあなたにPCMデータを与えます(FrequencyDataはあなたにPCMデータのFFTを与えています)。

+0

'getFloatTimeDomainData()'は、キャンバス上の波形を描画した結果、 'getFloatTimeDomainData()'が結果として 'getChannelData()'と同じ種類のデータを返すようには見えません。両方の配列が同じデータを表し、同じ方法で編成されていますか? – maximedupre

+1

MediaStreamに複数のチャンネル(ステレオ、たとえば、)がある場合、 'AnalyserNode'はそれらをモノにミックスします。 MediaStreamデータを分割する必要があります(ChannelSplitterNodeを使用して、必要なトラックを取得してアナライザに送信する必要があります)。 –

+0

@RaymondToy感謝してくれたRaymond、私を救った!!あなたはそれを回答として投稿できますか?この追加情報を含めるように答えを更新することはできますか? – maximedupre

関連する問題