当前位置:首页 > JavaScript

js 实现录音

2026-04-06 20:25:59JavaScript

录音功能实现基础

在JavaScript中实现录音功能通常需要借助浏览器提供的Web Audio API和MediaDevices API。现代浏览器支持通过navigator.mediaDevices.getUserMedia获取麦克风权限,结合AudioContext处理音频流。

获取麦克风权限

调用getUserMedia方法请求麦克风访问权限。该方法返回一个Promise,成功时解析为MediaStream对象:

js 实现录音

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    // 处理音频流
  })
  .catch(err => {
    console.error('麦克风访问被拒绝:', err);
  });

创建录音控制器

使用MediaRecorderAPI录制音频流。需先检查浏览器兼容性:

if (MediaRecorder.isTypeSupported('audio/webm')) {
  const recorder = new MediaRecorder(stream, {
    mimeType: 'audio/webm'
  });

  recorder.ondataavailable = (e) => {
    const audioBlob = e.data;
    // 处理录制的音频数据
  };
}

控制录音过程

实现开始/停止录音的基本控制逻辑:

js 实现录音

let chunks = [];

recorder.onstart = () => {
  chunks = [];
};

recorder.ondataavailable = (e) => {
  chunks.push(e.data);
};

function startRecording() {
  recorder.start(1000); // 每1秒收集一次数据
}

function stopRecording() {
  recorder.stop();
  const blob = new Blob(chunks, { type: 'audio/webm' });
  const audioURL = URL.createObjectURL(blob);
  // 可创建<audio>元素播放或上传服务器
}

音频可视化处理

通过AnalyserNode实现实时音频波形可视化:

const audioContext = new AudioContext();
const source = audioContext.createMediaStreamSource(stream);
const analyser = audioContext.createAnalyser();

source.connect(analyser);
analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);

function drawWaveform() {
  requestAnimationFrame(drawWaveform);
  analyser.getByteTimeDomainData(dataArray);
  // 使用canvas绘制波形
}

兼容性处理

对于不支持MediaRecorder的浏览器,可使用第三方库如:

  • RecordRTC
  • wavesurfer.js
  • libvorbis.js

完整示例代码

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

let recorder, stream;

startBtn.onclick = async () => {
  stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  recorder = new MediaRecorder(stream);

  const chunks = [];
  recorder.ondataavailable = e => chunks.push(e.data);
  recorder.onstop = () => {
    const blob = new Blob(chunks, { type: 'audio/ogg' });
    audioPlayer.src = URL.createObjectURL(blob);
  };

  recorder.start();
};

stopBtn.onclick = () => {
  recorder.stop();
  stream.getTracks().forEach(track => track.stop());
};

注意事项

  • 需在HTTPS环境或localhost下运行
  • 首次使用需处理用户权限请求
  • 不同浏览器支持的音频格式可能不同
  • 移动端设备可能有额外的限制

扩展功能

  • 添加音频效果处理(如降噪)
  • 实现多轨录音
  • 支持音频格式转换
  • 添加录音时长限制
  • 实现语音识别集成

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…