当前位置:首页 > JavaScript

js实现录音

2026-03-02 05:55:23JavaScript

使用Web Audio API实现录音

Web Audio API提供了一套完整的音频处理系统,可以通过JavaScript在浏览器中实现录音功能。以下是一个基本的实现方法:

js实现录音

// 获取音频上下文
const audioContext = new (window.AudioContext || window.webkitAudioContext)();

// 请求麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
  .then(function(stream) {
    // 创建音频源节点
    const source = audioContext.createMediaStreamSource(stream);

    // 创建录音处理器
    const recorder = audioContext.createScriptProcessor(4096, 1, 1);

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

    // 连接节点
    source.connect(recorder);
    recorder.connect(audioContext.destination);

    // 开始录音
    function startRecording() {
      audioChunks = [];
    }

    // 停止录音
    function stopRecording() {
      const audioBuffer = audioContext.createBuffer(1, 
        audioChunks.length * 4096, 
        audioContext.sampleRate);

      const channelData = audioBuffer.getChannelData(0);
      for (let i = 0; i < audioChunks.length; i++) {
        channelData.set(audioChunks[i], i * 4096);
      }

      return audioBuffer;
    }
  })
  .catch(function(err) {
    console.error('无法获取麦克风:', err);
  });

使用MediaRecorder API实现录音

MediaRecorder API是更简单的录音方案,可以直接录制媒体流:

js实现录音

let mediaRecorder;
let audioChunks = [];

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(function(stream) {
    mediaRecorder = new MediaRecorder(stream);

    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);
      audio.play();
    };

    // 开始录音
    document.getElementById('start').onclick = function() {
      audioChunks = [];
      mediaRecorder.start();
    };

    // 停止录音
    document.getElementById('stop').onclick = function() {
      mediaRecorder.stop();
    };
  });

录音格式处理

录制完成后通常需要将音频数据转换为可用格式:

// 将Blob转换为Base64
function blobToBase64(blob) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.readAsDataURL(blob);
  });
}

// 下载录音文件
function downloadAudio(audioBlob, filename = 'recording.wav') {
  const url = URL.createObjectURL(audioBlob);
  const a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.click();
}

注意事项

浏览器兼容性需要考虑,不同浏览器对音频API的支持程度不同。建议在使用前检测API可用性:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
  alert('您的浏览器不支持录音功能');
}

if (!window.MediaRecorder) {
  alert('您的浏览器不支持MediaRecorder API');
}

录音功能需要HTTPS环境或在localhost开发环境下才能正常工作,这是浏览器安全策略的要求。

标签: js
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现全选

js实现全选

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…