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' })
- }
|