19760


Railsでマイク入力を録音したいのでまず[`recorderjs`](https://github.com/mattdiamond/Recorderjs)を使ったサンプル[`AudioRecorder`](https://github.com/cwilso/AudioRecorder/)のサンプルを確認して、次に`AudioRecorder`の`main.js`ののソースを読もうとしてるのですが、HTML5のAudioContextを全く知らないため読み進めても行けない状態です。

最低限`recorderjs`にマイクから録音したデータを流すだけの理解が欲しい状態です。

<https://github.com/cwilso/AudioRecorder/blob/master/js/main.js#L138-L152>

[code]

    var audioContext = new AudioContext();
    function gotStream(stream) {
        inputPoint = audioContext.createGain();
    
        // Create an AudioNode from the stream.
        realAudioInput = audioContext.createMediaStreamSource(stream);
        audioInput = realAudioInput;
        audioInput.connect(inputPoint);
    
    //    audioInput = convertToMono( input );
    
        analyserNode = audioContext.createAnalyser();
        analyserNode.fftSize = 2048;
        inputPoint.connect( analyserNode );
    
        audioRecorder = new Recorder( inputPoint );
    
[/code]

`createGain`がボリュームを司る`GainNode`を作り、`createMediaStreamSource`が`MediaStreamAudioSourceNode`を作るなど、ぼんやりとわかるんですが

何故ここで取得したNodeの複製を行っているのでしょうか？

[code]

        audioInput = realAudioInput;
        audioInput.connect(inputPoint);
    
[/code]

まっと簡単な問題解決の道のりがあるなら、そちらを教えて下さい。


CC BY-SA 3.0
2015-12-08T08:16:17.933
19759
2015-12-08T09:16:58.073
2015-12-08T08:27:59.657
8000
3271
question
javascript ruby-on-rails html5
MediaStreamAudioSourceNode を複製する理由


そのサンプルに用意された、モノラル変換機能のためのコードです。

`audioInput` の方は
[`toggleMono()`](https://github.com/cwilso/AudioRecorder/blob/master/js/main.js#L125)
を呼び出すたびに `MediaStreamAudioSourceNode` と、モノラル変換した後の `ChannelMergerNode`
が交互に切り替わります。このため、元のNodeを `realAudioInput` に保持しているのです。

[code]

    function toggleMono() {
        if (audioInput != realAudioInput) {
            audioInput.disconnect();
            realAudioInput.disconnect();
            audioInput = realAudioInput;
        } else {
            realAudioInput.disconnect();
            audioInput = convertToMono( realAudioInput );
        }
    
        audioInput.connect(inputPoint);
    }
    
[/code]

また、`audioInput = realAudioInput`
は全く同じNodeを別の変数に代入しているだけで、複製は行っていません。これを行ったかどうかで Web Audio API
の挙動が変わることはないはずです。

Recorderjs にもサンプルが用意されているようなので、そちらを確認されてはいかがでしょうか？

<https://github.com/mattdiamond/Recorderjs/blob/master/example_simple_exportwav.html>


CC BY-SA 3.0
2015-12-08T09:16:58.073
19760
2015-12-08T09:16:58.073
8000
19759
answer