当前位置:首页 > 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()。可设置时间片自动分割数据:

h5实现录音

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数据转换为可下载文件:

h5实现录音

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视频通话的关键技术 WebRTC(Web Real-Time Communication)是实现H5视频通话的核心技术。它允许浏览器之间直接进行实时音视频通信,无需插件或第三方软件。 基本实…

h5实现页面切换

h5实现页面切换

h5实现页面切换的方法 在H5中实现页面切换可以通过多种方式完成,包括使用原生HTML链接、JavaScript动态加载、框架路由等。以下是几种常见的方法: 使用原生HTML的<a>标签…

h5实现选项卡

h5实现选项卡

使用HTML5和CSS实现选项卡 HTML5结合CSS可以轻松实现选项卡效果,无需JavaScript也能完成基本功能。以下是纯HTML+CSS的实现方法: <div class="tab-c…

h5翻牌游戏实现思路

h5翻牌游戏实现思路

翻牌游戏实现思路 游戏核心逻辑 翻牌游戏(Memory Game)的核心是通过匹配成对的卡片来消除它们。玩家每次翻开两张牌,若相同则消除,否则翻回背面。游戏目标是在最短时间内或最少步数内消除所有牌。…

怎样实现h5摄像头

怎样实现h5摄像头

调用摄像头权限 在H5中调用摄像头需要使用getUserMedia API,需确保用户授权访问摄像头。现代浏览器(如Chrome、Firefox、Edge)支持该API,但需通过HTTPS协议或本地环…

h5实现单选框未勾选

h5实现单选框未勾选

实现单选框未勾选状态的方法 在HTML5中,单选框(<input type="radio">)默认未勾选。若需确保初始状态为未勾选或动态控制,可通过以下方式实现: 初始未勾选状态 直接使…