lamejsは定評のあるmp3エンコーダのJS実装なのだが、サンプルコードが少し古めでAudioWorkletが使われていない。
以下のファイルを少し変更するだけで動きそう。 github.com
// mic.js const stream = await navigator.mediaDevices.getUserMedia({audio: true}); const context = new AudioContext(); const microphone = context.createMediaStreamSource(stream); await context.audioWorklet.addModule('/voiceRecorderProcessor.js') const recorder = new AudioWorkletNode(context, 'recorder'); recorder.port.onmessage = e => { realTimeWorker.postMessage({cmd: 'encode', buf: e.data}); } microphone.connect(recorder); recorder.connect(context.destination);
// voiceRecorderProcessor.js class Recorder extends AudioWorkletProcessor { constructor() { super(); } process(allInputs) { const inputs = allInputs[0][0]; this.port.postMessage(inputs); return true; } } registerProcessor('recorder', Recorder);