`
wangyu070707
  • 浏览: 13105 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HTML5 API---使用WebAudio API播放音频文件

 
阅读更多


    WebAudio API主要是为音频文件添加音效而设计的,但是它也可以用来播放音频文件,这类似于HTML5 audio元素的功能,只是audio元素可以有控制界面,用户可以点击界面上的播放/停止按钮来控制文件的播放,也可以拖动界面上的进度条来控制播放进度。而采用WebAudio API实现的音频播放则没有控制界面,但对于移动平台Android,IOS确实非常有用的,例如在Android平台上Chrome浏览器设置了gesture-requirement-for-media-playback属性,意思是说不能通过调用audio元素的play函数实现音频文件的播放,除了调用play函数之外,还必须要求用户在屏幕上有一个手势操作,该行为和苹果的IOS上的行为一致。现在如果采用WebAudio来播放音频文件就不会有该限制,开发者可以任意控制音频文件的播放和停止,这对移动平台的上游戏开发者而言尤为重要,目前比较流行的游戏引擎Cocos2d-html5正在使用该功能。

    下面是一段实例代码:
   
    var context = new window.webkitAudioContext();
    var source = null;
    var audioBuffer = null;
    function stopSound() {
        if (source) {
            source.noteOff(0); //立即停止
        }
    }
    function playSound() {
        source = context.createBufferSource();
        source.buffer = audioBuffer;
        source.loop = true;
        source.connect(context.destination);
        source.noteOn(0); //立即播放
    }
    function initSound(arrayBuffer) {
        context.decodeAudioData(arrayBuffer, function(buffer) { //解码成功时的回调函数
            audioBuffer = buffer;
            playSound();
        }, function(e) { //解码出错时的回调函数
            console.log('Error decoding file', e);
        });
    }
    function loadAudioFile(url) {
        var xhr = new XMLHttpRequest(); //通过XHR下载音频文件
        xhr.open('GET', url, true);
        xhr.responseType = 'arraybuffer';
        xhr.onload = function(e) { //下载完成
            initSound(this.response);
        };
        xhr.send();
    }
    loadSoundFile('demo-audio.mp3');
    上面的实例中,先通过XMLHttpRequest API从服务器上下载音频文件到本地,在下载完毕后,调用iniSound函数,该函数调用WebAudio中的解码函数decodeAudioData对下载的数据(当前存储为ArrayBuffer)进行解码,如果平台不支持音频文件的解码,将调用出错回调函数,如果解码成功就会调用成功的回调函数。现在假设解码成功,在成功的解码函数中,调用playSound函数去播放解码后的音频文件。

    使用WebAudio播放音频文件的效率问题

    前面介绍了如何使用WebAudio来播放音频文件,但是需要注意的是不要轻易采用WebAudio的该功能,因为当音频文件较大时,可能会影响程序的执行效率。首先,如果我们在程序中采用XMLHttpRequest去下载文件时,这是一个比较耗时的操作,具体的时间取决于当前的网络环境和文件的大小,尽管程序中采用异步的下载方式,但是同样会让音频的播放延迟。其次,程序需要调用WebAudio的decodeAudioData函数去解码整个音频文件,这里需要注意的是它需要一次性解码整个文件后,才会触发成功的回调函数,程序才能开始播放音频文件,这又一次的增加了音频文件播放的延迟,另外,由于整个文件的一次性解码,整个解码前和解码后的文件都同时存放在内存中,这也引起了内存的巨大开销(相比采用audio元素播放时,因为audio元素是一边解码一边播放)。此时可能有朋友会质疑decodeAudioData API的实现有问题,其实该函数是为解码比较短小的声音文件而设计的,另外由于WebAudio对音频的延时性特别关注,所以为了较少声音的延时,在音效处理前要求把需要处理的音频文件装载进内存。

    所以如果需要使用WebAudio播放文件,又比较关注效率问题时,建议把音频文件的大小缩小一些,或者分解成若干小的文件再分别加载解码播放。
分享到:
评论

相关推荐

    音频播放功能web audio api + html5audio元素

    web audio api + audio标签 javascript 原生实现音频播放标注功能

    基于html5 webaudio api 实现的播放器.zip

    HTML5 WebAudio API 是一种强大的技术,用于在网页上实现高质量的音频处理和播放功能。这个"基于html5 webaudio api 实现的播放器.zip"压缩包内容可能包含了一个使用WebAudio API构建的音乐播放器项目的源代码。下面...

    Web Audio API 中文文档(官方pdf)

    - **AudioContext**:这是Web Audio API的核心,它管理音频的播放、暂停、时间线和音频处理链。创建一个新的AudioContext是使用API的第一步。 - **AudioNodes**:AudioNodes是音频处理的基本单元,它们负责接收、...

    Web Audio Api非扫描

    - **节点类型**:Web Audio API 支持多种类型的音频节点,包括但不限于 `AudioBufferSourceNode`(用于播放预加载的音频缓冲)、`GainNode`(用于控制音量)、`ConvolverNode`(用于卷积混响)等。 - **连接音频图**...

    [Web.Audio.API

    这一部分可能会探讨在Web Audio API出现之前,网页上的音频是如何实现的,包括早期的和标签使用,以及HTML5的<audio>元素。 **2. 游戏与交互性(Games and Interactivity)** 这部分内容可能会讨论如何利用Web ...

    web 页播放mp3音频文件

    总结来说,网页播放MP3音频文件主要依赖HTML5的`<audio>`标签,结合JavaScript可以实现播放控制、事件监听等功能。需要注意浏览器的兼容性和跨域问题,以及多格式支持以确保广泛兼容。利用Audio API,还可以进行更...

    web-audio-api, 由W3C音频小组开发的网络音频 API.zip

    web-audio-api, 由W3C音频小组开发的网络音频 API 网络音频API规范 这个存储库包含了最新的 W3C AudioWG音频API站点编辑器。你可以在这里预览主分支的当前版本。测试对于标准更改,需要使用相应的web-platform-tests...

    html5自定义音频播放界面

    Audio API是HTML5提供的一套JavaScript接口,用于在Web页面中处理音频数据。开发者可以通过创建`Audio`对象来访问这些接口,如`var audio = new Audio('音频URL')`。Audio API提供了丰富的功能,包括播放、暂停、...

    webaudio播放aac.zip

    本项目聚焦于在Web环境中使用Web Audio API播放AAC(Advanced Audio Coding)实时流,这是一个高效的音频编码标准,广泛应用于数字音频广播、音乐下载和流媒体服务。 AAC的解码在客户端由FAAD库实现,而FAAD是一个...

    fetch-stream-audio:低延迟Web音频播放示例,用于使用Fetch&Streams API解码块中的音频流

    此存储库提供了低延迟的Web音频播放示例,可使用Web Audio API和新的Fetch&Streams API以编程方式对块中的音频进行解码。 传统上, 用于程序解码,但需要下载完整的文件,并且不支持基于块的解码。 这些Streams示例...

    使用audio标签播放mp3,amr,wav文件

    在网页开发中,HTML5引入了`<audio>`标签,使得在浏览器中直接播放音频文件变得简单易行。本文将详细讲解如何使用`<audio>`标签来播放不同格式的音频文件,包括mp3, amrnb和wav,并讨论可能遇到的兼容性问题以及解决...

    FastAPI-CURD-Operation-Using-MongoDB-On-AudioData:这是基于FastAPI的Web API,可在使用MongoDB数据库时模拟音频文件服务器的行为

    这是基于FastAPI的Web API,可在使用MongoDB数据库时模拟音频文件服务器的行为。 问题陈述 Colne资料库 从github git clone ...

    ws-audio-api:WebSocket音频API

    播放音频队列(需要Web Audio Api支持) 在所有浏览器中都可以正常工作 仅针对扬声器:在Chrome浏览器中,您应使用安全连接,因为Chrome在不安全的HTTP连接中不支持getUserMedia 凉亭 $ bower install ws-audio-api...

    掌握 JavaScript 中的 Web Audio API:创建动态音频体验

    通过本文的介绍,你应该能够理解Web Audio API的基本概念,掌握其使用方法,并能够在实际项目中应用这一API来创建丰富的音频体验。 在现代Web开发中,音频已成为提升用户体验的关键元素。JavaScript的Web Audio API...

    merge-audio:客户端js使用web-audio api合并音频文件

    合并音频 上传词干并将它们组合成您和您的朋友可以收听的曲目! 使用 WebAudio API 现场混音词干。 跑步 只需使用命令 cd app/ node app.js 然后访问 localhost:5000

    web-audio-api:Web音频API的Node.js实现

    默认情况下, web-audio-api不播放其生成的声音。 实际上, AudioContext没有默认输出,因此您需要为其提供可写的节点流,以便可以向其写入原始PCM音频。 创建AudioContext ,按如下所示设置其输出流: audioC

    webaudio-mod-player, 用于网络音频的MOD/S3M/XM 模块播放器.zip

    webaudio-mod-player, 用于网络音频的MOD/S3M/XM 模块播放器 webaudio-mod-player 这是使用Web音频API实现的MOD/S3M/XM 模块播放器,并完全在浏览器中运行。 已经被测试并确认可以在 Chrome 14 ,Firefox 24 ,...

    基于Web Audio API实现音频可视化效果

    在介绍基于Web Audio API实现音频可视化效果的知识点时,我们首先需要了解Web Audio API本身及其在音频处理中的作用。Web Audio API是一套强大的接口,允许开发者在网页中控制音频内容,它提供了一种在网页上进行...

    js-web端播放amr音频

    最后,考虑到兼容性和用户体验,你还可以考虑使用Web Audio API创建一个音频处理器节点,将AMR数据实时解码并播放。这种方法更灵活,但也更复杂,需要对Web Audio API有深入理解。 总之,虽然AMR格式在Web端播放...

Global site tag (gtag.js) - Google Analytics