当前位置:首页 > 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实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js jquery

js jquery

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…