mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 04:43:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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' })
 | 
						|
}
 |