当前位置:首页 > 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实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…