当前位置:首页 > JavaScript

js实现录音

2026-01-31 14:47:28JavaScript

使用Web Audio API实现录音

Web Audio API提供了一套完整的音频处理系统,可以用于录音功能。以下是实现录音的基本步骤:

navigator.mediaDevices.getUserMedia({ audio: true }) .then(function(stream) { const audioContext = new AudioContext(); const mediaStreamSource = audioContext.createMediaStreamSource(stream); const scriptProcessor = audioContext.createScriptProcessor(4096, 1, 1);

let audioChunks = [];
scriptProcessor.onaudioprocess = function(e) {
    audioChunks.push(e.inputBuffer.getChannelData(0));
};

mediaStreamSource.connect(scriptProcessor);
scriptProcessor.connect(audioContext.destination);

}) .catch(function(err) { console.error('获取麦克风权限失败:', err); });

使用MediaRecorder API实现录音

MediaRecorder API是更简单直接的录音解决方案,支持将录音保存为多种格式:

const startRecording = () => { navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { const mediaRecorder = new MediaRecorder(stream); let audioChunks = [];

    mediaRecorder.ondataavailable = e => {
        audioChunks.push(e.data);
    };

    mediaRecorder.onstop = () => {
        const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
        const audioUrl = URL.createObjectURL(audioBlob);
        // 使用audioUrl播放或下载录音
    };

    mediaRecorder.start();
});

};

处理录音数据

录音完成后,可以将数据转换为可用的格式:

const saveRecording = (audioChunks) => { const audioBlob = new Blob(audioChunks, { type: 'audio/wav' }); const audioUrl = URL.createObjectURL(audioBlob);

// 创建下载链接
const a = document.createElement('a');
a.href = audioUrl;
a.download = 'recording.wav';
a.click();

// 或者创建音频元素播放
const audio = new Audio(audioUrl);
audio.play();

};

添加录音控制功能

完整的录音功能通常需要开始、暂停和停止控制:

let mediaRecorder; let audioChunks = [];

js实现录音

const startBtn = document.getElementById('start'); const stopBtn = document.getElementById('stop');

startBtn.addEventListener('click', () => { navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { mediaRecorder = new MediaRecorder(stream); mediaRecorder.start();

    mediaRecorder.ondataavailable = e => {
        audioChunks.push(e.data);
    };
});

});

stopBtn.addEventListener('click', () => { mediaRecorder.stop(); // 录音停止后会触发onstop事件 });

处理浏览器兼容性

不同浏览器对录音API的支持程度不同,需要做兼容性处理:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { alert('您的浏览器不支持录音功能'); } else if (!MediaRecorder) { alert('您的浏览器不支持MediaRecorder API'); } else { // 正常录音逻辑 }

js实现录音

音频格式选择

MediaRecorder支持多种音频格式,可以通过mimeType参数指定:

const options = { mimeType: 'audio/webm', // 也可以是'audio/wav'、'audio/mp3'等 audioBitsPerSecond: 128000 // 比特率 };

const mediaRecorder = new MediaRecorder(stream, options);

录音可视化

可以使用Canvas实现录音波形可视化:

const canvas = document.getElementById('visualizer'); const canvasCtx = canvas.getContext('2d');

const drawWaveform = (audioData) => { canvasCtx.clearRect(0, 0, canvas.width, canvas.height); canvasCtx.fillStyle = 'rgb(200, 200, 200)'; canvasCtx.fillRect(0, 0, canvas.width, canvas.height);

canvasCtx.lineWidth = 2;
canvasCtx.strokeStyle = 'rgb(0, 0, 0)';
canvasCtx.beginPath();

const sliceWidth = canvas.width / audioData.length;
let x = 0;

for(let i = 0; i < audioData.length; i++) {
    const v = audioData[i] / 128.0;
    const y = v * canvas.height/2;

    if(i === 0) {
        canvasCtx.moveTo(x, y);
    } else {
        canvasCtx.lineTo(x, y);
    }

    x += sliceWidth;
}

canvasCtx.lineTo(canvas.width, canvas.height/2);
canvasCtx.stroke();

};

标签: js
分享给朋友:

相关文章

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…