当前位置:首页 > HTML

h5实现录音

2026-03-06 09:17:06HTML

使用Web Audio API实现录音

Web Audio API提供了录音功能的核心接口,通过MediaRecordergetUserMedia实现。需要用户授权麦克风权限。

// 请求麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    const mediaRecorder = new MediaRecorder(stream);
    const audioChunks = [];

    mediaRecorder.ondataavailable = event => {
      audioChunks.push(event.data);
    };

    mediaRecorder.onstop = () => {
      const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
      const audioUrl = URL.createObjectURL(audioBlob);
      const audio = new Audio(audioUrl);
      audio.play(); // 播放录音
    };
  });

录音控制方法

开始录音调用start()方法,停止使用stop()。可设置时间片自动分割数据:

mediaRecorder.start(); // 开始录音
// 每1秒收集一次数据(可选)
mediaRecorder.start(1000); 

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

音频格式设置

通过mimeType指定录制格式,支持audio/webmaudio/mp4等:

const options = { 
  mimeType: 'audio/webm;codecs=opus' 
};
const mediaRecorder = new MediaRecorder(stream, options);

保存录音文件

将Blob数据转换为可下载文件:

mediaRecorder.onstop = () => {
  const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
  const downloadLink = document.createElement('a');
  downloadLink.href = URL.createObjectURL(audioBlob);
  downloadLink.download = 'recording.wav';
  document.body.appendChild(downloadLink);
  downloadLink.click();
};

兼容性处理

检测API支持情况并提供备用方案:

if (!navigator.mediaDevices || !window.MediaRecorder) {
  alert('您的浏览器不支持录音功能');
} else {
  // 正常流程
}

实时音频可视化

结合AudioContext实现波形显示:

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

function visualize() {
  const bufferLength = analyser.frequencyBinCount;
  const dataArray = new Uint8Array(bufferLength);
  analyser.getByteTimeDomainData(dataArray);
  // 使用canvas绘制波形
  requestAnimationFrame(visualize);
}

注意事项

  • HTTPS环境下才能获取麦克风权限(localhost除外)
  • iOS Safari需要用户主动交互(如点击事件)才能启动录音
  • 不同浏览器支持的音频编解码器可能不同
  • 录音时长可能受浏览器内存限制

完整示例代码

<button id="start">开始录音</button>
<button id="stop">停止</button>
<audio id="playback" controls></audio>

<script>
  let mediaRecorder, audioChunks = [];

  document.getElementById('start').addEventListener('click', async () => {
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    mediaRecorder = new MediaRecorder(stream);

    mediaRecorder.ondataavailable = event => {
      audioChunks.push(event.data);
    };

    mediaRecorder.onstop = () => {
      const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
      const audioUrl = URL.createObjectURL(audioBlob);
      document.getElementById('playback').src = audioUrl;
      audioChunks = [];
    };

    mediaRecorder.start();
  });

  document.getElementById('stop').addEventListener('click', () => {
    mediaRecorder.stop();
    mediaRecorder.stream.getTracks().forEach(track => track.stop());
  });
</script>

h5实现录音

分享给朋友:

相关文章

h5实现视频

h5实现视频

使用HTML5实现视频播放 HTML5提供了内置的<video>标签,可以直接在网页中嵌入视频内容,无需依赖第三方插件如Flash。以下是实现方法和相关细节: 基本语法 <vid…

h5能实现的功能

h5能实现的功能

H5能实现的功能 H5(HTML5)是一种现代的网页技术标准,具备丰富的功能和特性,适用于多种场景。以下是H5能够实现的主要功能: 多媒体支持 H5原生支持音频和视频播放,无需依赖Flash等插件。…

h5实现抖音刷视频

h5实现抖音刷视频

实现抖音刷视频的H5页面 实现类似抖音的刷视频功能需要结合H5的视频播放、手势交互和无限滚动等技术。以下是关键实现步骤: 视频播放与布局 使用HTML5的<video>标签实现视频播放容…

h5怎么在手机上实现

h5怎么在手机上实现

h5在手机上实现的常见方法 使用响应式设计 通过CSS媒体查询(Media Queries)适配不同屏幕尺寸,确保页面在手机和桌面端均能正常显示。例如: @media screen and (max…

h5 实现固定前三榜单

h5 实现固定前三榜单

实现固定前三榜单的H5方法 使用CSS的position: sticky属性可以轻松实现固定前三榜单的效果。该方法兼容主流移动浏览器,且无需JavaScript。 <div class="r…

h5能实现抽题功能吗

h5能实现抽题功能吗

H5实现抽题功能的技术方案 H5完全能够实现抽题功能,主要通过前端技术结合后端数据交互完成。以下是具体实现方式: 前端技术实现 HTML5结合JavaScript可以动态生成和展示题目,利用DOM…