【前端】使用Web Audio API 技术播放音乐

这篇具有很好参考价值的文章主要介绍了【前端】使用Web Audio API 技术播放音乐。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简言

记录下使用web audio播放音乐的方法。

Web Audio API

Web Audio API 提供了在 Web 上控制音频的一个非常有效通用的系统,允许开发者来自选音频源,对音频添加特效,使音频可视化,添加空间效果(如平移),等等。

你可以先看下api接口介绍文章Web Audio
API接口介绍。

html 的 <audio>已经可以播放音乐了,为什么要使用web auido api来实现一下呢?

Web Audio API 使用户可以在音频上下文(AudioContext)中进行音频添加特效、音频可视化和音频输出播放等操作,很显然,比用html5的audio元素要自由度高,对音频的操作也更全,可以很好的实现自定义化的操作

web audio api 使用

一个简单而典型的 web audio 流程如下:

  1. 创建音频上下文
  2. 在音频上下文里创建源 — 例如 <audio>, 振荡器,流
  3. 创建效果节点,例如混响、双二阶滤波器、平移、压缩
  4. 为音频选择一个目的地,例如你的系统扬声器
  5. 连接源到效果器,对目的地进行效果输出

第三步和第5步就是对音频的操作,也可以不操作。

播放音乐

预览:
前端播放音频方法,前端,前端

创建AudioContext上下文

var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();

获取源

Web Audio API 获取音频源有多种方式 :

  • 二进制音频数据,格式是AudioBuffer 接口的格式。
  • HTML5 <audio>或<video>元素生成的音频源,是AudioBufferSourceNode接口。
  • WebRTC MediaStream 流生成的音频源,是
    MediaStreamAudioSourceNode接口。

示例:
我们是播放音乐,获取的是一个url mp3链接,所以我们用第二种方式。
音频url

const audio = new Audio(props.audioObject.url);
    audio.crossOrigin = 'anonymous';
    //	连接源
    source = AudioCtx.createMediaElementSource(audio);

代码使用Audio() 构造器创建并返回一个 HTMLAudioElement,为避免出现CORS,要将crossOrigin属性值设为anonymous,否则可能无法播放(网页会阻止你的播放行为)。

音频操作

音频操作就是MDN audio API的那几个接口,例如:ConvolverNode、GainNode、AnalyserNode、ChannelMergerNode等。
每个接口的用法不同,具体接口使用方法请参考mdn。

改变音量

GainNode 接口用于音量变化。它是一个 AudioNode 类型的音频处理模块,输入后应用增益 效果,然后输出。
增益是一个无单位的值,会对所有输入声道的音频进行相应的增加(相乘)。如果进行了修改,则会立即应用新增益,从而在结果音频中产生奇怪的“咔嗒”声。为了防止这种情况发生,请不要直接更改值,而应在 AudioParam 接口上使用指数插值方法
示例:

    gainNode = AudioCtx.createGain();
     //  音量直接修改
    gainNode.gain.value = volume.value / 100;
	//	audioParam修改
	gainNode.gain.setValueAtTime(0.5, AudioCtx.currentTime);

音频可视化

AnalyserNode 接口表示了一个可以提供实时频域和时域分析信息的节点。它是一个不对音频流作任何改动的 AudioNode,同时允许你获取和处理它生成的数据,从而创建音频可视化。
AnalyzerNode 只有一个输入和输出,即使未连接到输出它也能正常工作。

示例参考:音频可视化、MDN。

这个需要页面获取焦点

音频输出

音频最终要输出到扬声器上,否则会播放失败。
示例:
gainNode是一个AudioNode(音频节点),其他的音频接点也可以输出。

   gainNode.connect(AudioCtx.destination);

连接好后,我们要添加播放逻辑,首先创建播放按钮,然后监听点击事件,在事件触发音频源的播放方法。
这里的音频源是一个HTMLAudioElement,他有play()播放方法和pause()暂停方法。

	//	播放
    source.mediaElement.play();
    //	暂停
    source.mediaElement.pause();

效果

前端播放音频方法,前端,前端
前端播放音频方法,前端,前端

前端播放音频方法,前端,前端

网页顶部切换栏上面出现声音小图标,说明声音输出成功。

结语

音频节点通过它们的输入输出相互连接,形成一个链或者一个简单的网。一般来说,这个链或网起始于一个或多个音频源。这些节点的输出可以连接到其他节点的输入上,然后新节点可以对接收到的采样数据再进行其他的处理,再形成一个结果流。最后节点流再输出。

音频节点就是 AnalyserNode、GainNode 、AudioContext 对象等。文章来源地址https://www.toymoban.com/news/detail-857428.html

到了这里,关于【前端】使用Web Audio API 技术播放音乐的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 -- 使用audio标签播放音频

    公司系统内的审批页面,前端要根据后台推送的信息,使用’提示音’提醒用户进行对应审批操作。 vue3 项目 简介 | Vue.js (vuejs.org) TypeScript TypeScript: JavaScript With Syntax For Types. (typescriptlang.org) vite Vite | 下一代的前端工具链 (vitejs.dev) 下载好使用音频文件 音效网,保存本地。 将

    2024年02月01日
    浏览(43)
  • web前端实时音频播放并绘制波形

    最新项目需要用到拉取实时声音流数据播放声音以及显示对应的波形图。如果是声音文件我们可以用 wavesurfer.js这个框架很轻松的绘制波形,但是实时声音怎么转换呢,以下是我的解决方案 后端需要将数据转换成PCM格式 我们用到下面2个库: 1.pcm-player (播放声音) 2.recorder

    2024年02月11日
    浏览(57)
  • 让音乐响起:使用Python和Pygame轻松播放音频文件

    在这个数字化时代,音频和音乐已成为我们日常生活的一部分。不管是为了放松、学习还是工作,一个好的音乐播放器总是必不可少的。但你知道吗?用Python和Pygame,你可以轻松地制作自己的音频播放器!本文将引导你完成这一过程,让你体验到编程带来的乐趣和成就感。

    2024年02月22日
    浏览(39)
  • Android Audio实战——音频播放(十)

            Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack。简单来说,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源。SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频

    2024年02月15日
    浏览(42)
  • 构建远程音乐库!群晖Audio Station公开共享音频实现公网访问

    之前文章我详细介绍了如何在公网环境下使用pc和移动端访问群晖audiostation: 公网访问群晖audiostation听歌 - cpolar 极点云 群晖套件不仅能读写本地文件,还能共享,那么我们如何以共享链接的形式分享本地音频文件呢? 按照本教程方法操作后,达到的效果是 公网环境 下(连

    2024年02月08日
    浏览(100)
  • 前端实现页面自动播放音频方法

    前提 需要页面自动播放一段报警声音,将audio标签的 autoplay 属性设置为true,发现自动播放失败,并出现如下报错: Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first. 为什么要禁止自动播放音频与视频 网页加载完成后立即播放音频(或带有音

    2024年02月09日
    浏览(46)
  • vue实现音频audio列表循环,实现暂停播放切换

    功能界面如下 功能使用如下: 首先根据后端返回的音频地址进行渲染,其中playAudioSrc字段用来控制暂停样式还是播放样式,audio进行隐藏 vue处理逻辑如下

    2024年02月11日
    浏览(41)
  • flutter开发实战-just_audio实现播放音频暂停音频设置音量等

    flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放,这里使用just_audio来实现播放音频暂停音频设置音量等 在pubspec.yaml引入just_audio 在iOS上,video_player使用的是AVPlayer进行播放。 在Android上,video_player使用的是ExoPlayer。 2.

    2024年02月13日
    浏览(44)
  • 【golang音频库】发现了一个特别棒的音频库,beep,使用docker方式驱动设备,可以使用golang进行控制音频设备,播放音乐。

    本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址是:https://juejin.cn/user/585379920479288 博主知乎地址是:https://www.zhihu.com/people/freewebsystem ALSA(Advanced Linux Sound Architecture)是linux上主流的

    2023年04月09日
    浏览(68)
  • Unity 之利用Audio Source(音频源)组件用于播放声音

    Unity中的Audio Source(音频源)是一个用于播放声音的组件,通常附加到游戏对象上,以便在游戏中播放音频效果、音乐或对话。以下是Audio Source的详细介绍: 添加Audio Source : 要在Unity中使用Audio Source,首先需要将其附加到一个游戏对象上。通常,您可以选择场景中的一个空游

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包