vue 录音pcm 格式音频,并回放服务器返回的pcm 格式音频

使用插件

使用js-audio-recorder 插件进行录音,使用pcm-player插件播放pcm 格式的音频

录音

1、安装js-audio-recorder

npm i js-audio-recorder

2、使用

  import Recorder from 'js-audio-recorder';
 onMounted(()=>{
  Recorder.getPermission().then(() => {
 
      recorder.value= new Recorder({
        sampleBits: 16,                 // 采样位数,支持 8 或 16,默认是16
        sampleRate: 16000,              // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
        numChannels: 2,                 // 声道,支持 1 或 2, 默认是1
      });
      console.log('recorder.value',recorder.value)
    }, (error) => {
        console.log(`${error.name} : ${error.message}`);
      });
})

3、开始录音

if(!recorder.value){
        recorder.value= new Recorder({
            sampleBits: 16,                 // 采样位数,支持 8 或 16,默认是16
            sampleRate: 16000,              // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
            numChannels: 2,                 // 声道,支持 1 或 2, 默认是1
          });
      }
      recorder.value.start().then((res) => {
      
        }, (error) => {
          // 出错了
          console.log(`${error?.name} : ${error?.message}`);
      });
    }

4、结束录音并获取pcm 数据

recorder.value.stop()
pcmData.value=recorder.value.getPCM()

播放

1、安装 pcm-player

npm i pcm-player

2、使用

 import PCMPlayer from 'pcm-player'

3、 播放

player.value = new PCMPlayer({
        inputCodec: 'Int16',
        channels: 2,
        sampleRate: 16000,
        flushTime: 2000,
        onended:()=>{ // 监听播放结束
         
        }
      
    });
    player.value.feed(pcmData.value);

5 获取到的pcmDataView 转换成base64 使用websocket发送给服务端

const pcmDataView = recorder.value.getPCM();

  const base64String =  window.btoa(String.fromCharCode(...new Uint8Array(pcmDataView.buffer)))

6 前端获取服务端返回的base64,转成

const base64 = atob(base64String); // 将 Base64 字符串解码为二进制数据
    const bytes = new Uint8Array(base64.length);
    for (let i = 0; i < base64.length; i++) {
      bytes[i] = base64.charCodeAt(i);
    }
    const arrayBuffer = bytes.buffer; // 将 Uint8Array 转换为 ArrayBuffer

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容