当前位置:首页 > JavaScript

js网页实现录音

2026-04-07 07:48:54JavaScript

使用 Web Audio API 和 MediaRecorder

在网页中实现录音功能可以通过 Web Audio API 和 MediaRecorder API 实现。以下是一个完整的实现方案:

// 获取用户麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
  .then(function(stream) {
    // 创建音频上下文
    const audioContext = new AudioContext();
    const mediaStreamSource = audioContext.createMediaStreamSource(stream);

    // 创建MediaRecorder实例
    const mediaRecorder = new MediaRecorder(stream);
    let audioChunks = [];

    // 开始录制
    document.getElementById('startBtn').addEventListener('click', () => {
      audioChunks = [];
      mediaRecorder.start();
    });

    // 停止录制
    document.getElementById('stopBtn').addEventListener('click', () => {
      mediaRecorder.stop();
    });

    // 收集音频数据
    mediaRecorder.ondataavailable = function(e) {
      audioChunks.push(e.data);
    };

    // 录制完成处理
    mediaRecorder.onstop = function() {
      const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
      const audioUrl = URL.createObjectURL(audioBlob);
      const audio = new Audio(audioUrl);

      // 播放录音
      document.getElementById('playBtn').addEventListener('click', () => {
        audio.play();
      });

      // 下载录音
      document.getElementById('downloadBtn').addEventListener('click', () => {
        const a = document.createElement('a');
        a.href = audioUrl;
        a.download = 'recording.wav';
        a.click();
      });
    };
  })
  .catch(function(err) {
    console.error('获取麦克风权限失败:', err);
  });

添加HTML界面

<button id="startBtn">开始录音</button>
<button id="stopBtn">停止录音</button>
<button id="playBtn">播放录音</button>
<button id="downloadBtn">下载录音</button>

处理兼容性问题

不同浏览器对音频格式的支持可能不同。可以通过检查MediaRecorder的isTypeSupported方法来确保兼容性:

if (MediaRecorder.isTypeSupported('audio/webm')) {
  options = { mimeType: 'audio/webm' };
} else if (MediaRecorder.isTypeSupported('audio/ogg')) {
  options = { mimeType: 'audio/ogg; codecs=opus' };
} else {
  options = { mimeType: 'audio/wav' };
}

const mediaRecorder = new MediaRecorder(stream, options);

错误处理

添加适当的错误处理可以提高用户体验:

navigator.mediaDevices.getUserMedia({ audio: true })
  .catch(err => {
    alert('无法访问麦克风,请检查权限设置');
    console.error('麦克风访问错误:', err);
  });

音频可视化

可以使用AnalyserNode实现录音时的音频可视化效果:

js网页实现录音

const analyser = audioContext.createAnalyser();
mediaStreamSource.connect(analyser);

function drawWaveform() {
  const bufferLength = analyser.frequencyBinCount;
  const dataArray = new Uint8Array(bufferLength);
  analyser.getByteTimeDomainData(dataArray);

  // 使用canvas绘制波形
  const canvas = document.getElementById('waveform');
  const ctx = canvas.getContext('2d');
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();

  for(let i = 0; i < bufferLength; i++) {
    const x = i * canvas.width / bufferLength;
    const y = dataArray[i] / 255 * canvas.height;
    if(i === 0) {
      ctx.moveTo(x, y);
    } else {
      ctx.lineTo(x, y);
    }
  }

  ctx.stroke();
  requestAnimationFrame(drawWaveform);
}

drawWaveform();

注意事项

  • 现代浏览器要求网页通过HTTPS协议或在localhost环境下才能访问麦克风
  • 首次使用时浏览器会请求麦克风权限
  • 录音功能在移动设备上可能有不同的行为
  • 长时间录音需要考虑内存使用问题

标签: 网页js
分享给朋友:

相关文章

css制作静态网页

css制作静态网页

CSS制作静态网页的基本方法 CSS用于控制网页的样式和布局,结合HTML可以创建美观的静态网页。以下是关键步骤: HTML结构搭建 创建基本的HTML文件结构,包含<!DOCTYPE htm…

html css制作静态网页

html css制作静态网页

HTML 和 CSS 制作静态网页 创建基本 HTML 结构 使用 HTML 定义网页的结构和内容。以下是一个基本的 HTML 模板: <!DOCTYPE html> <html…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…