| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | import lamejs from 'lamejs'import MPEGMode from 'lamejs/src/js/MPEGMode'import Lame from 'lamejs/src/js/Lame'import BitStream from 'lamejs/src/js/BitStream'if (globalThis) {  (globalThis as any).MPEGMode = MPEGMode  ;(globalThis as any).Lame = Lame  ;(globalThis as any).BitStream = BitStream}export const convertToMp3 = (recorder: any) => {  const wav = lamejs.WavHeader.readHeader(recorder.getWAV())  const { channels, sampleRate } = wav  const mp3enc = new lamejs.Mp3Encoder(channels, sampleRate, 128)  const result = recorder.getChannelData()  const buffer = []  const leftData = result.left && new Int16Array(result.left.buffer, 0, result.left.byteLength / 2)  const rightData = result.right && new Int16Array(result.right.buffer, 0, result.right.byteLength / 2)  const remaining = leftData.length + (rightData ? rightData.length : 0)  const maxSamples = 1152  for (let i = 0; i < remaining; i += maxSamples) {    const left = leftData.subarray(i, i + maxSamples)    let right = null    let mp3buf = null    if (channels === 2) {      right = rightData.subarray(i, i + maxSamples)      mp3buf = mp3enc.encodeBuffer(left, right)    }    else {      mp3buf = mp3enc.encodeBuffer(left)    }    if (mp3buf.length > 0)      buffer.push(mp3buf)  }  const enc = mp3enc.flush()  if (enc.length > 0)    buffer.push(enc)  return new Blob(buffer, { type: 'audio/mp3' })}
 |