2017-05-25 4 views
0

Ich habe seit zwei Tagen meinen Kopf gegen eine Wand geschlagen, und ich hoffe wirklich, dass jemand dabei helfen kann.Silent Mikrofon Audio getUserMedia

Ich habe einen Code für einen getUserMedia Mikrofonrecorder von https://higuma.github.io/wav-audio-encoder-js/ + https://github.com/higuma/wav-audio-encoder-js hier genommen. Ich habe die Komponenten entfernt, die ich nicht brauche - und irgendwie habe ich es dabei geschafft, dass kein Ton durch die generierte Datei dringt.

Es sieht aus wie es richtig formatiert - aber ist völlig still. Ich bekomme 0 Fehler von denen ich arbeite.

// 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); 

Wenn jemand schon einmal in das hineingeraten ist, wäre ich wirklich dankbar für eine Lösung.

Vielen Dank für Ihre Zeit und haben einen schönen Tag/Nacht

Antwort

0

Überprüfen Sie zuerst das Mikrofon mit der allgemeinen recording demo.
Wenn es funktioniert können Sie versuchen, nur Audio Stream & erforderliche MIME-Typ an Media-Recorder für grundlegende Audio-Aufnahme übergeben.
Wenn Sie mit diesem WebAudio Kontext spielen wollen, es zu microphoneLevel.gain.value = 1; //or 2

gain = 0 bedeutet, dass wir die Audio-

Am ahnend Problem mit microphoneLevel.gain.value = 0; Änderung sind Muting. gain = 1 Standard-Audio-Ebene
gain = 0.1 - 0.9 wird die Lautstärke reduziert die Pegelwerte in der Konsole auf
gain = above 1.1 Erhöhung der Lautstärke

Druck

// 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 
}); 

Meine demo und source

Verwandte Themen