Endlich ist es mir gelungen, mit der Web Audio API von Google-Chrome eine Audio-Aufnahme vom Mikrofon vorzunehmen und diese wiederzugeben, ohne das Audio-Tag zu verwenden. Die Daten werden in einen Audio-Buffer gespeichert und können so nachbearbeitet werden. Auch gelang es mir, zwei verschiedene Audio-Buffer zu mischen, was eigentlich gar nicht so schwierig ist.
Hier ein Beispiel, wie man Audio vom Mikrofon aufnimmt und wiedergibt (funktioniert auf Google Chrome Canary. Andere weiss ich nicht):
var audio_context;
var mic;
var tmpBuffer;
var offset=0;
try {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
window.URL = window.URL || window.webkitURL;
audio_context = new AudioContext;
console.log(‚Audio context eingerichtet.‘);
} catch (e) {alert(‚Ihr Web-Browser unterstuetzt die Web Audio API nicht!‘); }
navigator.getUserMedia({video:true, audio: true}, startUserMedia, function(e) { console.log(‚Kein live audio Eingang: ‚ + e);});
tmpBuffer=audio_context.createBuffer(1,1000000,48000); // An Bedarf anpassen
var recording=false;
var recorder = audio_context.createJavaScriptNode(1024, 1, 1);
recorder.connect(audio_context.destination);
function startUserMedia(stream) {
mic = audio_context.createMediaStreamSource(stream);
mic.connect(recorder);
console.log(‚Einang hergestellt.‘);
}
function startRecording() {
console.log(„aufnehmen…“);
recording=true;
}
function stopRecording() {
console.log(„Aufnahme anhalten…“);
recording=false;
}
function resetRecording() {
console.log(„Reset buffer…“);
tmpBuffer=““;
tmpBuffer=audio_context.createBuffer(1,1000000,48000);
offset=0;
}
function playRecording()
{
playAudioBuffer(tmpBuffer);
}
function activateAudio(){
recorder.onaudioprocess = function (e) {
var output = e.outputBuffer.getChannelData(0);
var input = e.inputBuffer.getChannelData(0);
if (recording){
var channel=tmpBuffer.getChannelData(0);
channel.set(input,offset);
offset+=e.inputBuffer.length;
}
}
}
function deactivateAudio(){
recorder.onaudioprocess=““;
}
function playAudioBuffer(x)
{
var node=audio_context.createBufferSource();
node.buffer=x;
node.connect(audio_context.destination);
console.log(„Aufnahme abspielen…“);
node.start(0);
}
Dies ist ledglich der JavaScript-Teil. Der Anwender möge die HTML-Struktur zum Aufrufen der Funktionen selber erstellen, was für einen HTML-/ JavaScript-Programmierer kein Problem sein sollte.
0 Kommentare