lamejsでAudioWorkletを使用する

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