2017-05-25 18 views
0

私は2日間この壁に頭を打ちました。本当に誰かがこれを助けることを願っています。サイレントマイクの音声getUserMedia

ここでは、getUserMediaマイクレコーダー用のコードをhttps://higuma.github.io/wav-audio-encoder-js/ + https://github.com/higuma/wav-audio-encoder-jsから取得しました。私は必要のないコンポーネントを取り除いたことがあります。何らかの形で、生成されたファイルにはオーディオが通らないように処理しています。

正しくフォーマットされているように見えますが、完全に静かです。私は仕事に0エラーが発生しています。

// navigator.getUserMedia shim 
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; 
// URL shim 
window.URL = window.URL || window.webkitURL; 

// audio context + .createScriptProcessor shim 
var audioContext = new AudioContext; 
if (audioContext.createScriptProcessor == null) { 
    audioContext.createScriptProcessor = audioContext.createJavaScriptNode; 
} 

// selectors 
var $microphone = $('#microphone'); 
var $cancel = $('#cancel'); 
var $recordingList = $('#recording-list'); 
var $timeDisplay = $('#time-display'); 
var $microphoneLevel = $('#microphone-level'); 

var microphone = undefined; 
var input = audioContext.createGain(); 
var mixer = audioContext.createGain(); 
var microphoneLevel = audioContext.createGain(); 
microphoneLevel.gain.value = 0; 
microphoneLevel.connect(mixer); 
var processor = undefined; 
var startTime = null; 
var encoder = undefined; 

// obtaining microphone input 
$microphone.click(function() { 
    navigator.getUserMedia({ audio: true }, 
     function(stream) { 
     microphone = audioContext.createMediaStreamSource(stream); 
     microphone.connect(microphoneLevel); 
     console.log(microphone); 
     }, 
     function(error) { 
     window.alert("Could not get audio input"); 
     }); 
}); 

// start/stop recording 
$microphone.click(function() { 
    if (startTime != null) { 
    stopRecording(true); 
    } else { 
    startRecording(); 
    } 
}); 

// cancel recording (without saving) 
$cancel.click(function() { 
    stopRecording(false); 
}); 

// microphone level slider 
$microphoneLevel.on('input', function() { 
    var level = $microphoneLevel[0].valueAsNumber/100; 
    microphoneLevel.gain.value = level * level; 
}); 

function startRecording() { 
    startTime = Date.now(); 
    $microphone.html('Stop'); 
    $cancel.removeClass("hidden"); 
    startRecordingProcess(); 
} 

function startRecordingProcess() { 
    processor = audioContext.createScriptProcessor(1024, 2, 2); 
    input.connect(processor); 
    processor.connect(audioContext.destination); 
    // wav encoder 
    encoder = new WavAudioEncoder(audioContext.sampleRate, 2); 
    processor.onaudioprocess = function(event) { 
    encoder.encode(getBuffers(event)); 
    }; 
} 

function getBuffers(event) { 
    var buffers = []; 
    for (var ch = 0; ch < 2; ++ch) { 
    buffers[ch] = event.inputBuffer.getChannelData(ch); 
    } 
    return buffers; 
} 

function stopRecording(finish) { 
    startTime = null; 
    $timeDisplay.html('00:00'); 
    $microphone.html('<i class="start fa fa-microphone fa-5x" aria-hidden="true"></i>'); 
    $cancel.addClass('hidden'); 
    stopRecordingProcess(finish); 
} 

function stopRecordingProcess(finish) { 
    input.disconnect(); 
    processor.disconnect(); 

    if (finish) { // if microphone pressed 
    saveRecording(encoder.finish()); 
    } else { // if cancel pressed 
    encoder.cancel(); 
    } 
} 

function saveRecording(blob) { 
    var url = URL.createObjectURL(blob); 
    var html = "<p class='recording' recording='" + url + "'><a class='btn btn-default' href='" + url + "' download='recording.wav'>Save Recording</a></p>"; 
    $recordingList.prepend($(html)); 

    // once we have done all the processing, upload the file to beyond verbal 
    // uploadFile(blob); 
} 

// update the recording timer 
function minuteSeconds(n) { return (n < 10 ? "0" : "") + n; } 
function updateDateTime() { 
    if (startTime !== null) { 
    var sec = Math.floor((Date.now() - startTime)/1000); 
    $timeDisplay.html(minuteSeconds(sec/60 | 0) + ":" + minuteSeconds(sec % 60)); 
    } 
} 
window.setInterval(updateDateTime, 200); 

誰もがこれまでに遭遇したことがあれば、本当に感謝しています。

はお時間ありがとうございました、そして素敵な昼/夜

答えて

0

を持っている。まず、一般的なrecording demoでマイクを確認してください。
もしオーディオストリーム&必須のMIMEタイプをメディアレコーダーに渡して、基本的なオーディオレコーディングを試すことができます。
このwebaudio文脈で再生したい場合は、

microphoneLevel.gain.value = 1; //or 2

gain = 0からmicrophoneLevel.gain.value = 0; の変更をして、問題を疑っAMは、我々は、音声をミュートすることを意味します。 gain = 1デフォルトのオーディオレベル
gain = 0.1 - 0.9は私demosource

を参照してください

// microphone level slider 
$microphoneLevel.on('input', function() { 
    var level = $microphoneLevel[0].valueAsNumber/100; 
    console.log('value: ' + $microphoneLevel[0].valueAsNumber + ' Level: ' + level); 
    microphoneLevel.gain.value = level * level; // if level is zero, then its silent 
    // its better if you have a predefined level values based slider position instead of multiplying it 
}); 

に音量レベル

印刷コンソールでレベル値を上げる音量レベル
gain = above 1.1を削減されます