29

getUserMedia を介して 48000Hz の録音を録音しようとしています。しかし、運がなければ。返されたオーディオ MediaStream は 44100Hz を返します。これを 48000Hz に設定するにはどうすればよいですか?

ここに私のコードのスニペットがあります:

var startUsermedia = this.startUsermedia;

            navigator.getUserMedia({ 
                audio: true, 
                //sampleRate: 48000 
            }, startUsermedia, function (e) {
                console.log('No live audio input: ' + e);
            });

startUsermedia 関数:

startUsermedia: function (stream) {
            var input = audio_context.createMediaStreamSource(stream);
            console.log('Media stream created.');
            // Uncomment if you want the audio to feedback directly
            //input.connect(audio_context.destination);
            //__log('Input connected to audio context destination.');

            recorder = new Recorder(input);
            console.log('Recorder initialised.');
        },

AudioContext のプロパティ sampleRate を変更しようとしましたが、うまくいきませんでした。

sampleRate を 48000Hz に変更するにはどうすればよいですか?

編集:48000Hzでwavファイルを記録およびエクスポートできるフラッシュソリューションでも問題ありません

4

7 に答える 7

16

私の知る限り、オーディオ コンテキスト内でサンプル レートを変更する方法はありません。サンプル レートは通常、レコーディング デバイスのサンプル レートであり、そのまま維持されます。したがって、次のようなものを書くことはできません。

var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);

ただし、オーディオ ストリームを取得し、再サンプリングしてからバックエンドに送信する (または Web Audio API の外部でそれを使用する) 場合は、外部のサンプル レート コンバーターを使用できます (例: https:// github.com/taisel/XAudioJS/blob/master/resampler.js )。

   var resampler = new Resampler(44100, 48000, 1, 2229);

   function startUsermedia(stream) {
        var input = audio_context.createMediaStreamSource(stream);
        console.log('Media stream created.');


        recorder = audio_context.createScriptProcessor(2048);
        recorder.onaudioprocess = recorderProcess;
        recorder.connect(audio_context.destination);
    }

    function recorderProcess(e) {
        var buffer = e.inputBuffer.getChannelData(0);
        var resampled = resampler.resampler(buffer);
        //--> do sth with the resampled data for instance send to server
    }
于 2015-05-04T14:01:17.740 に答える
4
audioContext = new AudioContext({sampleRate: 48000})

AudioContextオブジェクトを作成するときにサンプルレートを設定するだけで、これでうまくいきました

于 2019-12-17T10:43:33.187 に答える
2

OfflineAudioContextを使用して、基本的にオーディオ バッファーを異なるサンプル レートにレンダリングできます (ただし、これはバッチ操作です)。

そのため、通常のオーディオ コンテキストを使用してレコーディングを録音し、異なるサンプル レートで OfflineAudioContext を使用してバッファをレンダリングします。Mozilla ページに例があります。

于 2016-07-19T14:26:30.333 に答える