js实现发送语音消息
使用 Web Audio API 录制语音
通过 navigator.mediaDevices.getUserMedia 获取麦克风权限,结合 MediaRecorder 进行录音:
let mediaRecorder;
let audioChunks = [];
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
mediaRecorder.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
// 此处可上传或处理音频
};
});
控制录音开始与结束
通过按钮触发录音控制:
document.getElementById('startBtn').addEventListener('click', () => {
audioChunks = [];
mediaRecorder.start();
});
document.getElementById('stopBtn').addEventListener('click', () => {
mediaRecorder.stop();
});
上传音频到服务器
使用 FormData 和 fetch 上传音频文件:
function uploadAudio(audioBlob) {
const formData = new FormData();
formData.append('audio', audioBlob, 'recording.wav');
fetch('/upload-endpoint', {
method: 'POST',
body: formData
}).then(response => {
console.log('Upload successful');
});
}
播放录制的音频
通过 URL.createObjectURL 生成临时链接播放:
const audioElement = document.createElement('audio');
audioElement.src = URL.createObjectURL(audioBlob);
audioElement.controls = true;
document.body.appendChild(audioElement);
兼容性处理
检查浏览器支持情况:
if (!navigator.mediaDevices || !window.MediaRecorder) {
alert('您的浏览器不支持语音录制功能');
}
格式转换(可选)
如需转换为其他格式(如MP3),需引入第三方库如 lamejs:

// 示例:使用lamejs编码MP3
const mp3Encoder = new lamejs.Mp3Encoder(1, 44100, 128);
const mp3Data = mp3Encoder.encodeBuffer(leftChannel);
注意事项
- 需在 HTTPS 环境或 localhost 下使用
getUserMedia - iOS 可能对自动播放有限制,需用户手势触发
- 长时间录音需注意内存管理,可分段上传






