当前位置:首页 > JavaScript

js 实现音频

2026-03-15 10:00:51JavaScript

使用 Web Audio API 播放音频

通过 AudioContextfetch 加载音频文件并播放:

const audioContext = new (window.AudioContext || window.webkitAudioContext)();
fetch('audio.mp3')
  .then(response => response.arrayBuffer())
  .then(buffer => audioContext.decodeAudioData(buffer))
  .then(decodedData => {
    const source = audioContext.createBufferSource();
    source.buffer = decodedData;
    source.connect(audioContext.destination);
    source.start();
  });

使用 HTML5 <audio> 标签

直接在 HTML 中嵌入音频控件,通过 JavaScript 控制播放:

<audio id="myAudio" src="audio.mp3"></audio>
<script>
  const audio = document.getElementById('myAudio');
  audio.play(); // 播放
  audio.pause(); // 暂停
  audio.currentTime = 0; // 重置进度
</script>

动态生成音频(Oscillator)

使用 AudioContext 生成简单音调:

const ctx = new AudioContext();
const oscillator = ctx.createOscillator();
oscillator.type = 'sine'; // 波形类型:sine, square, sawtooth, triangle
oscillator.frequency.value = 440; // 频率(Hz)
oscillator.connect(ctx.destination);
oscillator.start();
oscillator.stop(ctx.currentTime + 2); // 2秒后停止

音频可视化(AnalyserNode)

结合 Canvas 实现音频频谱可视化:

js 实现音频

const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();
const source = audioCtx.createMediaElementSource(document.getElementById('myAudio'));
source.connect(analyser);
analyser.connect(audioCtx.destination);

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteFrequencyData(dataArray);

// 使用 Canvas 绘制频谱(需循环调用)
function draw() {
  requestAnimationFrame(draw);
  analyser.getByteFrequencyData(dataArray);
  // 绘制逻辑...
}

注意事项

  • 跨浏览器兼容性:部分旧浏览器需使用 webkit 前缀(如 webkitAudioContext)。
  • 用户交互限制:现代浏览器要求音频播放必须由用户手势(如点击)触发。
  • 格式支持:常见音频格式为 MP3、WAV、OGG,需根据浏览器兼容性选择。

标签: 音频js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…