マイク録音テスト #html2(){{ <input type="button" id="rec" value="rec"> <input type="button" id="stop" value="stop"> <input type="button" id="play" value="play"><br> <pre id="output"></pre> }} #js(){{ let ac; // AudioContext let prc; // ScriptProcessorNode let msas; // MediaStreamAudioSourceNode let abuf; // AudioBuffer let src; // AudioBufferSourceNode let flg = false; let pos; onload = function() { rec.onclick = on_rec; stop.onclick = on_stop; play.onclick = on_play; navigator.mediaDevices.getUserMedia({ audio: true, video: false }) .then(init) .catch(err => { output.textContent = err; }); }; function init(stream) { ac = new AudioContext(); prc = ac.createScriptProcessor(2048, 1, 1); prc.connect(ac.destination); prc.onaudioprocess = process; msas = ac.createMediaStreamSource(stream); msas.connect(prc); } function on_rec() { abuf = ac.createBuffer(1, ac.sampleRate * 10, ac.sampleRate); pos = 0; flg = true; } function on_stop() { flg = false; } function on_play() { src = ac.createBufferSource(); src.buffer = abuf; src.connect(ac.destination); src.start(); } function process(e) { let ibuf = e.inputBuffer; let obuf = e.outputBuffer; let len = ibuf.length; let idat = ibuf.getChannelData(0); let odat = obuf.getChannelData(0); for (let i = 0; i < len; i++) { odat[i] = idat[i]; } if (! flg) return; if (pos + len > abuf.length) { flg = false; return; } let adat = abuf.getChannelData(0); for (let i = 0; i < len; i++) { adat[pos++] = idat[i]; } output.textContent = pos; } }}