相关文章推荐
俊逸的青蛙  ·  pexpect(4.6.0)文档_pexpe ...·  2 年前    · 
开朗的领带  ·  JDK 11 Release Notes, ...·  2 年前    · 

Audio对象的属性

属性 描述
audio.volume (读/写) 音量
audio.src (读/写) 歌曲地址
audio.currentTime (读/写) 歌曲当前已播放时长
audio.duration (读) 歌曲的总长度
audio.paused (读) 布尔类型 是否处于暂停状态
audio.ended (读) 布尔类型 歌曲是否已经播放完毕

Audio对象的方法

方法 描述
audio.play() 让歌曲开始播放
audio.pause() 让歌曲开始暂停
audio.load() 重新加载音频元素
audio.getStartDate() 返回新的 Date 对象,表示当前时间线偏移量
audio.canPlayType() 检查浏览器是否能够播放指定的音频类型
audio.fastSeek() 在音频播放器中指定播放时间

Audio对象的事件

事件 描述
audio.oncanplay = fn() 当歌曲下载完之后调用fn
audio.onvolumechange = fn() 当audio.volume发生变换的时候调用fn
audio.onplay = fn() 歌曲开始播放之后调用fn
audio.onpause = fn() 歌曲暂停之后调用fn
audio.ontimeupdate = fn() 歌曲在播放的过程中会一直调用fn
audio.onended = fn() 一首歌曲播放完之后调用fn

事件驱动的编程模式

// 这里只设置数据
  $('音量div').on('click',function(e){
    audio.volume = e.offsetX / e.offsetWidth;
  // 这里操作界面
  $('audio').on('volumechange',function(){
    let width = (this.currentTime/this.duration).toFixed(2)*100 + '%';
    $('音量div').find('.inner').width(width);

使用一个html5模块或其他js插件的一般步骤

  1. 查阅API
  2. 快速定型API
  3. 确定一个例子,开始制作

例子中如果依赖一些公开库。

注意:不要下载到本地然后引用

如果我们想分享代码给别人, 需要把所有我们下载的文件也拷贝给别人, 尤其当依赖的公开库多的情况下, 项目会变的很大, 上传到版本控制系统也会变的很庞大。

我们通过其他方式来解决

  1. 使用cdn
  2. 使用前端自动化工具 bower
bower init
bower install jquery --save

会生成一个.bower文件 ,这样任何人拿到项目之后,同样去运行bower install, 就会下载出来所有的依赖库

node.js

var fs = require('fs');
var minglinghang = require('child_process');
var files = fs.readdirSync('./musics/');
var result = [];
var format_duration = function(str){
  var num = Number(str);
  var fen = parseInt( num/60 );
  var miao = Math.round(num%60);
  miao = (miao < 10)?( '0' + miao):miao;
  fen = '0' + fen;
  return  fen + ':' + miao;
files.forEach(function(v){
  var data = JSON.parse( minglinghang.execSync('ffprobe -v quiet -print_format json   -show_format  "./musics/'+ v +'"'));
  var duration = format_duration(data.format.duration);
  var r = {
    filename: data.format.filename,
    duration: duration,
    title: data.format.tags.title,
    album: data.format.tags.album,
    artist: data.format.tags.artist
  result.push( r );
fs.writeFile('./database.json',JSON.stringify(result, null, 2) );

递归遍历文件夹

var fs   = require('fs');
var childProcess = require('child_process');
// 递归遍历文件夹 对其中的每一个文件调用 callback
var walk = function(path, callback){
  var files  = fs.readdirSync(path);
  for( var i = 0; i< files.length; i++ ){
    var newpath = path + files[i];
    if ( fs.statSync(newpath).isFile() ){
      callback(files[i],newpath);
    }else if(fs.statSync(newpath).isDirectory() ){
      walk( newpath+'/' ) ;
// 遍历./musics 文件夹  对其中的音乐文件  调用ffprobe 解析音乐数据
var fileExtension = ['mp3', 'wav'];
var database = [];
walk('./musics/', function(name, path){
  var extName = name.split('.').pop();
  if( fileExtension.indexOf(extName) !== -1 ){
    // 这个在windows下不生效
    var path = path.trim().replace(/\s/g,'\\ ');
    var data = childProcess.execSync('ffprobe -v quiet -print_format json -show_format  ' + path);
    database.push( JSON.parse(data).format );
// 写入js文件
var js =  'var database = ' + JSON.stringify(database, null, 4);
fs.writeFile('./scripts/database.js', js, function (err) {
  if (err){
    throw err;
  console.log('saved!');
                    一个audio对象就是普通的dom对象 比其他的dom对象多出一些自己独有的属性方法和事件,下面介绍一下他常用的属性、方法和事件自己初步接触html5的新属性audio对象,做的一个简易的音乐播放器,大家有兴趣可以查看,一起讨论学习,有些功能尚未完善。。。敬请谅解!模拟音乐播放器//Audio的代码格式&amp;lt;audio id=&quot;audio&quot;&amp;gt;    &amp;lt;s...
audioTracks 返回表示可用音频轨道的 AudioTrackList 对象。 
autoplay    设置或返回是否在就绪(加载完成)后随即播放音频。 
buffered    返回表示音频已缓冲部分的 TimeRanges 对象。 
controller  返回表示音频当前媒体控制器的 MediaController 对象。 
controls
音乐播放过程中,切换到应用其他页面时,用后台的状态栏切换音乐时音乐会暂停。
问题分析:
华为audio接口只能在页面中使用,当audio所在的页面退出后,页面销毁,绑定的上下文对象也随之不存在。 此时,在通知栏上一首、下一首切换歌曲时,后台播放服务首先暂停当前歌曲,状态重置,但是audio接口的绑定事件找不到上下文对象,无法触发previous和next事件,导致上述现象。
解决方案:
在应用首页监听audio事件,而不仅仅是在播放页面添加,当用户离开播放页面时,依然可以监听到audio的每个事
客户要求完成音频生成之后,如果退出当前页面,则将后端生成的音频删除;
前端加载audio标签之后,然后退出,调用后端删除音频接口,此时后端调用file.delete会返回false,删除失败;
问题排查:
由于前端加载audio的时候,会去获取播放的文件流,但是前端audio标签是分成两段加载流,第一段获取音频头文件,第二段才是获取音频内容。所以当加载完音频,但是未播放时,http连接会保持,直到音频主体传送完成
此时问题便发生了:未播放音频,但是退出,删除音频会导致文件无法删除;
				
参考W3C详细文档:http://www.w3school.com.cn/jsref/dom_obj_audio.asp pause()方法只是暂停,这里重新load之后,再次play,音乐可重头播放 DOCTYPE html> meta charset="utf-8"> title>testtitle> script language
http://msdn.microsoft.com/zh-CN/ie/hh377903 HTML5 展示网站: http://www.beautyoftheweb.com/ HTML5资讯: http://www.mhtml5.com/ 各种声音构成了我们的生活背景。现在,