js实现录音和音频播放-附示例

js录音和音频播放的实现借助html5.0的相关api来实现,请尽量在server容器内启动并且支持麦克风设备的浏览器中测试。

实例构造

  1. 安装方式
npm i js-audio-recorder

import Recorder from 'js-audio-recorder';
let recorder = new Recorder();

 2.构造函数属性
 

let recorder = new Recorder({
    sampleBits: 16,         // 采样位数,支持 8 或 16,默认是16
    sampleRate: 16000,      // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
    numChannels: 1,         // 声道,支持 1 或 2, 默认是1
    compiling: false,       // 是否边录边转换,默认是false
});

3.实例属性

recorder.duration
recorder.fileSize

4.获取录音数据

//录音实时获取数据
recorder.onprogress = function(params) {
    console.log(params.data);       // 当前获取到到音频数据
}
//主动获取
recorder.getWholeData();
recorder.getNextData();

API


recorder.start().then(() => {
    // 开始录音
}, (error) => {
    // 出错了
    console.log(`${error.name} : ${error.message}`);
});

recorder.pause();

recorder.resume()

recorder.stop();

recorder.play();

recorder.getPlayTime();

recorder.pausePlay();

recorder.resumePlay();

recorder.stopPlay();

// 销毁录音实例,置为null释放资源,fn为回调函数,
recorder.destroy().then(function() {
    recorder = null;
});

Event

recorder.onprogress = function(params) {
    console.log('录音时长(秒)', params.duration);
    console.log('录音大小(字节)', params.fileSize);
    console.log('录音音量百分比(%)', params.vol);
    // console.log('当前录音的总数据([DataView, DataView...])', params.data);
}
recorder.onplay = () => {
    console.log('onplay')
}
recorder.onpauseplay = () => {
    console.log('onpauseplay')
}
recorder.onresumeplay = () => {
    console.log('onresumeplay')
}
recorder.onstopplay = () => {
    console.log('onstopplay')
}
recorder.onplayend = () => {
    console.log('onplayend')
}

Player 播放类

import Player from './player/player';

Player 用于协助播放录音文件,包括,开始、暂停、恢复、停止等功能。所支持的格式由浏览器的audio支持的类型决定。可单独使用。

Player.play([arraybuffer])
播放外部的音频。所支持的格式由浏览器的audio支持的类型决定。

Player.pausePlay()
暂停播放。

Player.resumePlay()
恢复播放。

Player.stopPlay()
停止播放。

Player.addPlayEnd(fn)
增加播放完成回调函数。

Player.getPlayTime()
获取播放时间。

Player.getAnalyseData()
获取回放录音的波形数据。

示例源码:https://recorder.zhuyuntao.cn/

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个完整的示例代码,它实现了使用WebRTC录制音频并将其保存到本地,并将录制的音频文件发送到后端进行进一步处理。 ```javascript // 获取用户媒体许可 navigator.mediaDevices.getUserMedia({ audio: true }) .then(function(stream) { // 创建MediaRecorder对象 var mediaRecorder = new MediaRecorder(stream); // 存储音频数据块 var chunks = []; // 监听音频数据可用事件 mediaRecorder.ondataavailable = function(e) { chunks.push(e.data); }; // 监听录音结束事件 mediaRecorder.onstop = function(e) { // 将音频数据块合并成单个Blob对象 var blob = new Blob(chunks, { 'type' : 'audio/wav' }); // 创建URL,用于播放录制的音频 var audioURL = URL.createObjectURL(blob); // 创建一个新的Audio元素并设置其源为录制的音频 var audio = new Audio(audioURL); // 将录制的音频文件发送到后端进行处理 var formData = new FormData(); formData.append('audioFile', blob, 'recording.wav'); var xhr = new XMLHttpRequest(); xhr.open('POST', '/process-audio', true); xhr.onload = function(e) { if (this.status == 200) { // 处理成功回调 } }; xhr.send(formData); }; // 开始录音 mediaRecorder.start(); // 录音持续时间 var duration = 5000; // 5秒钟 // 停止录音 setTimeout(function() { mediaRecorder.stop(); }, duration); }) .catch(function(err) { console.log('获取用户媒体许可失败:' + err); }); ``` 这个示例代码使用了Promise语法,它首先使用getUserMedia()方法获取用户的媒体许可,然后创建一个MediaRecorder对象来记录音频流。每当音频数据可用时,它将数据块存储在一个数组中。当录音结束时,它将所有音频数据块合并成单个Blob对象,并将其发送到后端进行进一步处理。最后,它使用setTimeout()方法设置录音持续时间,并在到达时间后停止录音
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值