Web前端入门第 90 问:JavaScript 也能无中生有的创建音频

news/2025/11/13 9:17:57/文章来源:https://www.cnblogs.com/linx/p/19216408

网页播放音乐这个常识应该都知道,毕竟百度 MP3 搜索可是风靡一时!

但使用浏览器无中生有的创建音频,在 HTML5 规范落地之前可是一片空白。

AudioContext 的体量与 Canvas 差不了多少,一个针对图形图像,一个用于音频,两者结合起来就把 flash 给拉下了神坛~~


本文源之于一次技术研究,曾经有一个需求要用 H5 搞一个网页 K 歌,技术难点在于要将原唱、伴唱、录音的音频数据进行合并,后来寻寻觅觅的找到了 AudioContext 这个 API,虽然最终没用 H5 去实现,不过还是涨了见识!!

不废话,直接看代码:

<button id="button">经过我</button><script>window.AudioContext = window.AudioContext || window.webkitAudioContext;(function () {if (!window.AudioContext) {alert('当前浏览器不支持Web Audio API');return;}// 按钮元素var eleButton = document.getElementById('button');// 创建新的音频上下文接口var audioCtx = new AudioContext();// 发出的声音频率数据,表现为音调的高低var arrFrequency = [196.00, 220.00, 246.94, 261.63, 293.66, 329.63, 349.23, 392.00, 440.00, 493.88, 523.25, 587.33, 659.25, 698.46, 783.99, 880.00, 987.77, 1046.50];// 音调依次递增或者递减处理需要的参数var start = 0, direction = 1;// 鼠标hover我们的按钮的时候eleButton.addEventListener('mouseenter', function () {// 当前频率var frequency = arrFrequency[start];// 如果到头,改变音调的变化规则(增减切换)if (!frequency) {direction = -1 * direction;start = start + 2 * direction;frequency = arrFrequency[start];}// 改变索引,下一次hover时候使用start = start + direction;// 创建一个OscillatorNode, 它表示一个周期性波形(振荡),基本上来说创造了一个音调var oscillator = audioCtx.createOscillator();// 创建一个GainNode,它可以控制音频的总音量var gainNode = audioCtx.createGain();// 把音量,音调和终节点进行关联oscillator.connect(gainNode);// audioCtx.destination返回AudioDestinationNode对象,表示当前audio context中所有节点的最终节点,一般表示音频渲染设备gainNode.connect(audioCtx.destination);// 指定音调的类型,其他还有square|triangle|sawtoothoscillator.type = 'sine';// 设置当前播放声音的频率,也就是最终播放声音的调调oscillator.frequency.value = frequency;// 当前时间设置音量为0gainNode.gain.setValueAtTime(0, audioCtx.currentTime);// 0.01秒后音量为1gainNode.gain.linearRampToValueAtTime(1, audioCtx.currentTime + 0.01);// 音调从当前时间开始播放oscillator.start(audioCtx.currentTime);// 1秒内声音慢慢降低,是个不错的停止声音的方法gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 1);// 1秒后完全停止声音oscillator.stop(audioCtx.currentTime + 1);});})();
</script>

以上代码内容来源于大佬张鑫旭的博客:https://www.zhangxinxu.com/wordpress/2017/06/html5-web-audio-api-js-ux-voice/

注意:AudioContext 必须要在在用户有交互之后才能创建!!意思就是用户在网页上有点击操作之后才能开始播放音频。

否则报错警告:

The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.

效果预览

可长按以下二维码跳转到大佬的体验地址:

{% asset_img qrcode.jpg %}

二维码链接:https://www.zhangxinxu.com/study/201706/button-hover-web-audio.html

其他示例

1、 oscillator.type 不同波形带来的声音效果:

https://codepen.io/gregh/pen/LxJEaj

2、又有大佬使用 AudioContext 搞出了小时候玩的游戏音乐:

https://codepen.io/gregh/pen/xqWwqz

写在最后

AudioContext 的 API 绝不止用来创建音频这么简单,往大了想一下,Canvas 可以把 PS 搬到浏览器,那些专业的音频处理软件是不是也可以搬到线上?

看看大佬对 AudioContext 的看法:

1

参考资料
https://www.zhangxinxu.com/wordpress/2017/06/html5-web-audio-api-js-ux-voice/
https://developer.mozilla.org/zh-CN/docs/Web/API/AudioContext

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年评价高的极薄缓冲骑马抽厂家最新用户好评榜

2025年评价高的极薄缓冲骑马抽厂家最新用户好评榜行业背景与市场趋势随着家居五金行业向智能化、轻量化方向发展,极薄缓冲骑马抽作为现代橱柜和家具的核心功能部件,市场需求持续增长。据中国五金制品协会2024年数据显…

H模型:梳理(重点记)

产品拿出需求规格说明书(srs);召开需求会议,分析需求,熟悉需求;测试负责人拿到需求开始编写测试计划;安排测试任务,各自编写测试用例;编写完用例后在对用例进行评审(有组内评审,有交叉评审);评审通过以后…

Xmind 2024 Pro 破解版下载及安装教程

Xmind 2024 Pro 破解版下载及安装教程Xmind 应该是目前最好用的一款思维导图软件了。拥有优秀的用户体验,凭借简单易用,功能强大的特点,XMind在2013年被著名互联网媒体Lifehacker评选为全球最受欢迎的思维导图软件。…

kubeadm安装k8s - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年热门的橱柜缓冲骑马抽厂家最新用户好评榜

2025年热门的橱柜缓冲骑马抽厂家最新用户好评榜行业背景与市场趋势随着家居消费升级和全屋定制市场的持续增长,橱柜五金配件行业迎来了新一轮发展机遇。根据中国五金制品协会最新数据,2024年中国橱柜五金市场规模已突…

2025年知名的空压机冷却塔TOP品牌厂家排行榜

2025年知名的空压机冷却塔TOP品牌厂家排行榜行业背景与市场趋势随着工业4.0的深入推进和"双碳"目标的持续落实,空压机冷却塔作为工业制冷领域的关键设备,正迎来新一轮技术升级与市场扩容。据《2024-2029年…

OP250影像检测项目详解

ES2TES2T P1.卡板弹簧上脚位置 轮廓相似度工具,此处应该有弹簧脚轮廓ES2T P2.卡板弹簧下脚位置 轮廓相似度工具,此处应该有弹簧脚轮廓ES2T P3.备份锁漏装 轮廓相似度工具,此处应该有备份锁轮廓ES2T P4.棘爪弹簧漏装…

项目组有哪些人员?

测试,开发、产品经理 ,开发测试、测试经理、项目经理(pm) 、业务员、运维

2025年质量好的送风消防风机厂家最新用户好评榜

2025年质量好的送风消防风机厂家最新用户好评榜行业背景与市场趋势随着我国城市化进程加速和高层建筑数量激增,消防排烟设备市场需求持续扩大。据中国消防协会最新统计数据显示,2024年我国消防风机市场规模已达186亿…

什么是端到端流程?

端到端测试不是多此一举,而是一种全面把关的测试方法。大家好,我是陈哥。 不知道大家有没有听过端到端测试? 每个软件都应该进行端到端测试,以确保其按规定运行。这种测试方法建立了对系统的信心,并帮助开发团队确…

maven配置settings.xml 配置详解

----------------------------------------------------------------------------------------------maven 配置详解Maven 是 Java 项目的构建工具,其核心配置由 pom.xml(项目级配置) 和 settings.xml(全局 / 用户…

2025年评价高的送风消防风机厂家推荐及选择指南

2025年评价高的送风消防风机厂家推荐及选择指南行业背景与市场趋势消防风机作为建筑消防系统的核心设备,在火灾发生时承担着排烟、送风、维持逃生通道安全的重要功能。根据中国消防协会2024年发布的行业报告显示,我国…

学习笔记:连通性相关的 Tarjan 算法

请注意:本文讨论的是在图上求解连通性相关问题的 Tarjan 算法,不是求解最近公共祖先的 LCA 算法。Tarjan 发明了多种算法和数据结构,很多算法都以他命名,不要弄混了。 在阅读本文之前,请务必确保自己了解:图、有…

react 生命周期中,最适合与服务端进行数据交互的是哪 个函数?

在 React 的生命周期中,最适合与服务端进行数据交互(如调用接口、请求后端数据)的函数是: componentDidMount() 原因说明 componentDidMount() 是 React 类组件生命周期中 组件挂载完成(渲染到真实 DOM)后 调用的…

习题解析之:哥德巴赫猜想

习题解析之:哥德巴赫猜想【问题描述】编写验证哥德巴赫猜想的小程序。 1742 年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于 2 的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于 2 的偶数都…

2025年口碑好的旅游文化照明工程全国推荐榜

2025年口碑好的旅游文化照明工程全国推荐榜行业背景与市场趋势随着我国文旅产业的蓬勃发展和夜间经济的持续升温,旅游文化照明工程行业迎来了前所未有的发展机遇。据中国照明电器协会最新数据显示,2024年我国文旅照明…

靠谱的 GEO+Agent 双引擎系统独立部署源头厂家

AI 时代的流量逻辑已重塑,GEO 精准触达与 AI 智能体的结合成为企业营销破局的关键。选择靠谱的 GEO+Agent 双引擎系统独立部署源头厂家,能让企业精准捕捉 AI 搜索流量,高效完成用户沉淀转化。讯灵 AI 作为深耕全网营…

一文讲透数字人民币充值、支付、清算(产研必读)

一、什么是数字人民币 数字人民币说的直白一点就是电子钞票,为什么叫电子钞票呢?它是和纸币对应的叫法,我们知道纸币的介质是纸张,那数字人民币的介质是数字化载体(如数字人民币APP、银行APP等),你有它就是有钞…

国产DAC芯片KY80508软硬件兼容替代DAC80508

KY80508为SPI接口的8独立通道、16BIT高精度DAC芯片,可用于工业控制、通信、消费电子等对精度和稳定性要求较高的领域。 ➢工作电压范围: 2. 7~5.5V ➢8通道16位 精度DAC V DNL: 1LSB Typ . V INL: 3LSB Typ V TUE: 0.…

2025年靠谱的楼体亮化工程综合评分榜单

2025年靠谱的楼体亮化工程综合评分榜单行业背景与市场趋势随着城市化进程的加快和夜间经济的蓬勃发展,楼体亮化工程已成为城市建设的重要组成部分。据中国照明电器协会最新数据显示,2024年中国楼体亮化市场规模已突破…