热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5audioAPI的研究与学习1

HTML5audio1.audiosprite音频精灵的主要思想其实跟css精灵差不多,将一个音频合成到一个音频,然后通过currentTime获取当前播放时间进行区分,不过在这里执行以下代码之前需将audio先加载到页面当中。当时怎么判断页面已经加载完声音呢,在移动端audio的很多属性支持的都不是很好,在尝试了

HTML5 audio

1.audio sprite

音频精灵的主要思想其实跟css精灵差不多,将一个音频合成到一个音频,然后通过currentTime获取当前播放时间进行区分,不过在这里执行以下代码之前需将audio

先加载到页面当中。当时怎么判断页面已经加载完声音呢,在移动端audio的很多属性支持的都不是很好,在尝试了很多也在网上找了很多资料之后,暂且发现可以使用AudioContext对象去管理与播放声音


    
    



var audioSprite = document.getElementById("audio1");
                    audioData = {
                        shake: {
                            start: 0,
                            length: 10
                        },
                        win: {
                            start: 15,
                            length: 15
                        }
                    }
                    document.getElementById("play").addEventListener("click", function () {
                        audioSprite.play()
                        audioSprite.currentTime = audioData.shake.start;
                        //audioSprite.play();
                    }, false);
                    var handler = function () {
                        if (this.currentTime >= audioData.shake.start + audioData.shake.length) {
                            this.pause();
                            setTimeout(function () {
                                audioSprite.removeEventListener("timeupdate", handler, false);
                                audioSprite.currentTime = audioData.win.start;
                                audioSprite.play();
                                audioSprite.addEventListener("timeupdate", handler2, false);
                            }, 1000);
                        }
                    }

                    var handler2 = function () {
                        if (this.currentTime >= audioData.win.start + audioData.win.length) {
                            this.pause();
                        }
                    }
                    audioSprite.addEventListener("timeupdate", handler, false);

2.利用AudioContext,为了生成一个声音,需要创建一个或多个声音源,并且通过AudioContext对象将这些声音源连接在一起,这些声音源并不是直接连接,而是通过多个用于对音频信号的各种模块进行处理的AudioNodes对象间接连接.

一个AudioContext对象可以支持多个音频输入,可以支持音频图的生成,所以在一个音频处理应用程序中我们只需创建一个AudioContext对象

	var context;
        if(webkitAudioContext){
            cOntext= new webkitAudioContext();
        }else{
            cOntext= new AudioContext();//标准
        }
2.1在创建了AudioContext对象之后,我们可以使用AudioBuffer对象加载音频数据。以上有个加载声音的按钮,我们通过点击该按钮后使用XMLHttpRequest对象获取服务器端的MP3文件中的音频数据。以下实例:

function loadSound() {
            var request = new XMLHttpRequest();
            request.open("GET", "smbb.mp3", true);
            request.respOnseType= "arraybuffer";
            request.Onload= function () {
                context.decodeAudioData(request.response, function (buffer) {
                    console.log(buffer)
                }, onError);
            }
            request.send();
        }

        function onError(e) {
            console.log(e);
        }

在以上代码中用户点击“加载声音”按钮,执行Javascript脚本代码中的loadSound函数,在该函数中,使用XMLHttpRequest对象获取服务器端的MP3文件中的音频数据,因为音频数据是二进制数据,所以讲XMLHttpRequest对象的responseType属性值设为“arraybuffer”。当接受到服务器的MP3文件中未解码的音频数据时,可以使用AudioContext对象的decodeAudioData方法将其解码。

AudioContext对象的decodeAudioData方法使用三个参数,其中第一个为一个加载了未解码的音频数据的ArrayBuffer对象,第2,3个参数都为一个函数,代表音频数据的解码处理执行成功时执行的回调函数与音频数据的解码处理执行失败时执行的回调函数.

2.2当音频加载完成之后我们就可以通过AudioBuffer对象的createBufferSource对象创建一个AudioBufferSourceNode对象(代表音频播放设备的声音源),并且将AudioBufferSourceNode对象的buffer属性值指定为AudioBuffer对象,代码如下

var source = context.createBufferSource();
    source.buffer = buffer;
该buffer为上面例子decodeAudioData返回的buffer。

接下来,我们需要使用AudioBufferSourceNode对象的connect方法将声音源连接到AudioContext对象的destination属性值(代表音频播放设备)。

source.connect(context.destination);
AudioBufferSourceNode对象的connect方法使用一个参数,参数值为AudioContext对象的destination属性值,该属性值为客户端计算机上的音频播放设备

最后使用AudioBufferSourceNode对象的start方法播放声音

source.start(0)//备注:之前网上跟书上很多位置都是说使用noteOn方法,当时,我测试该方法未定义。使用start()方法可以播放,当时测试在IOS系统中如果start方法不传参数,该方法也是未定义,后来发现必须得给一个默认得参数。

现阶段的整个代码




    
    
    
    
    



    
    
    



总结,HTML5的audioAPI功能确实很强大,研究起来也很有意思,不过暂且技术部到家,在琢磨的时候耗费的时间也不少,当然肯定也有漏洞,说的不对的地方还请见谅,下阶段还有更有意思的控制播放节奏,多个声音的交叉混合及多个声音文件之间的平滑过渡。。。


推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
  • 为什么三角形与菜单背景的颜色不同? - Why is the triangle a different colour shade to the menu background?
    Imnotunderstandingastowhythetrianglewhichappearswhenthemousehoversoverthemenuitem, ... [详细]
author-avatar
觅树知音
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有