寒假即將結束,不巧膝蓋突然中了一箭,便決定實驗 HTML5 audio
標籤的效果,雖然已有 jPlayer 這款輕便好用的播放器,但不折騰一下就沒辦法消磨時間了,所以本次的實驗品完全由我操刀。
開始之前
首先必須了解audio
標籤的使用方式:
1
2
3
4
|
<audio controls>
<source src="music.mp3">
<source src="music.ogg">
</audio>
|
輸入以上代碼後,便可在網頁中看到瀏覽器內建的播放器。每種瀏覽器支援的播放類型不一,最保險的方法是備妥mp3
、ogg
。
為了浪費時間,當然不可能用瀏覽器的預設介面,所以刪除controls
屬性,透過 JavaScript 操作:
1
2
3
4
5
|
var audio = document.getElementsByTagName('audio')[0];
// 播放
audio.play();
// 暫停
audio.pause();
|
只需要懂這兩個函數,就可製作最基礎的播放器了,其他複雜的指令可參閱文末的參考出處。
介面
寫網頁時,比起最重要的 JavaScript,我習慣先寫 CSS,最初的參考範本是 Mac 的 CoverFlow。
經過一連串絞盡腦汁,寫了一堆亂七八糟的 CSS 之後,成品如下。
無論是倒影、中間的圓圈進度表都與 CoverFlow 非常相像,但這種樣式實在 太麻煩了 不便使用者操作,所以從 Premium Pixels 偷點子過來,稍微加油添醋一下,完成了播放器介面 Ver. 2。
核心
介面完成自爽一下之後,就得面對麻煩的 JavaScript 了,播放、暫停非常簡單,按鈕按下去執行鄉對應的動作即可,然而音量調整與進度條該如何處理呢?
雖然本次的重點是消磨時間,但再去造一個輪子實在他媽的太累了,於是 聰明如我 請到了 jQuery UI,Slider 功能壓縮後需要約 20KB 的空間,有點龐大不過方便就好。
時間的控制方式如下,單位為秒數,例如跳至第 100 秒的位置:
1
|
audio.currentTime = 100;
|
音量的控制方式如下,範圍為 0~1,例如將音量調整至一半大小:
1
|
audio.volume = 0.5;
|
audio
可綁定play
, pause
, ended
, progress
, canplay
, timeupdate
等事件。play
與pause
如字面上意思,分別為播放、暫停後生效。
1
2
3
4
5
6
7
|
audio.addEventListener('play', function(){
play.title = 'pause';
}, false);
audio.addEventListener('pause', function(){
play.title = 'play';
}, false);
|
ended
為結束後生效,當音樂結束後,可透過此事件讓時間歸零。
1
2
3
|
audio.addEventListener('ended', function(){
this.currentTime = 0;
}, false);
|
當音樂檔案開始載入後,便會啟動progress
事件,可透過此事件監測下載進度。Firefox 可能會發生問題,建議搭配durationchange
事件使用。
1
2
3
4
|
audio.addEventListener('progress', function(){
var endVal = this.seekable && this.seekable.length ? this.seekable.end(0) : 0;
buffer.style.width = (100 / (this.duration || 1) * endVal) + '%';
}, false);
|
當音樂下載到一定程度後,canplay
事件便會生效,一般會透過此事件初始化播放器。相同類型的事件還有很多,依照啟動順序分別為:loadstart
, durationchange
, loadeddata
, progress
, canplay
, canplaythrough
。
timeupdate
會在音樂播放時不斷生效,可透過此事件更新時間。
1
2
3
|
audio.addEventListener('timeupdate', function(){
progress.style.width = (this.currentTime / this.duration) * 100 + '%';
}, false);
|
播放列表
一個播放器的基礎功能就此完成,能夠播放、暫停、調整音量、調整時間。但這顯然還不夠,播放列表對於播放器而言相當重要。(大概啦)
與自己的邏輯奮戰大約一晚後,有播放列表、隨機播放、重複播放(單首、全部)功能的播放器於焉完成。只需要 214 行、約 6KB 的代碼(未壓縮)即可完成,應該能算是輕便簡易了。
後記
播放列表的製作過程有點髒,中途還重構了幾次,所以直接看範例應該會比較快,若對於範例內的程式碼感到疑惑,可在下方留言。
範例內已設定了一些參數,可在js/script.js
內更改。第 5 行的continous
參數為連續播放,第 6 行的autoplay
參數為自動播放,第 7 行的playlist
陣列請自行設定,壓縮檔內不會附帶範例內的音樂檔案。playlist
陣列的格式如下:
1
2
3
4
5
6
7
8
9
10
|
var playlist = [
{
title: 'Tell Your World',
artist: 'livetune feat. 初音ミク',
album: 'Tell Your World',
cover: 'cover/tell_your_world.jpg',
mp3: 'music/tell_your_world.mp3',
ogg: 'music/tell_your_world.ogg'
}
];
|
title
為標題,artist
為演出者,album
為專輯名稱,cover
為專輯封面的路徑,mp3
、ogg
分別為音樂檔案的路徑,建議備妥兩種格式的檔案,要不然 Firefox 和 Opera 不就只能去死了嗎?
因為做到最後頭腦快爆炸了,懶得做 Flash fallback,IE 請去死一死吧。
相关推荐
VideoContext VideoContext是一个实验性HTML5 / WebGL媒体处理和排序库,用于在网络上创建交互式和响应式视频。 它由两个主要部分组成。 基于图的着色器加速处理管道,以及媒体播放排序时间线。 该设计在很大程度上...
开朗使用React创建HTML5语言实验室Web应用程序关于对于对使用React开发HTML5视频语言实验室Web应用程序感兴趣的任何人来说,OpenLang都是一个很好的起点。 OpenLang使用MediaDevices和MediaStream Recording API进行...
此扩展程序通过Chrome文本语音扩展播放HTML5视频的音频描述音轨元素。 重要提示:请激活“启用” 元素“chrome中的实验:// flags /必须启用此实验才能使扩展工作。此扩展程序通过Chrome文本语音扩展功能播放HTML5...
此扩展程序通过屏幕阅读器播放HTML5视频的音频描述轨道元素。 重要提示:请激活“启用” 元素“chrome中的实验:// flags /必须启用此实验才能使扩展工作。如果您希望屏幕阅读器呈现音频描述,请使用此扩展名。对于...
必须启用此实验,以便延期工作。此扩展播放通过Chrome文本到语音扩展名HTML5视频的音频描述曲目元素。对于通过ScreenReader播放的扩展,...
此扩展通过屏幕阅读器播放HTML5视频的音频描述曲目元素。 重要提示:请激活Chrome://标志/ ///ing中的“启用元素”实验 必须启用此实验,以便延期工作。 如果希望屏幕阅读器呈现音频描述,请使用此扩展。 对于通过...
在任何网页(例如YouTube)上移动HTML5视频中的音频 #现在固定! #音高在不更改播放速率的情况下(除非您希望)将页面上HTML5视频源的音频转移。 潜在的用例:修正过于抱怨的youtuber的声音。 撒旦版本的最爱影片...
音乐广场一个简单的 HTML5 画布/网络音频实验。 使用 。
作者:Obadiah Metivier 作者 URI: ://middleearmedia.com/webaudioloopmixer/ 标签:网络音频 api、mixer、loop、html5、css3、javascript、jquery、中耳媒体、obadiah metivier 稳定标签:2.2.1 Web Audio Loop...
网络音频项目网络音频实验(目前为止的教学示例) 在本地运行网络音频: 这是一个可以从命令行运行的简单 Python Web 服务器: python -m SimpleHTTPServer 8000 如果你从 web-audio-projects 文件夹运行它,然后在...
js-可视化工具js-visualizer 是一个 HTML5 / Javascript 可视化实验。 受到这个非常棒的代码笔的启发: ://codepen.io/soulwire/pen/Dscga 终于来了: Spotify 整合非常花哨的背景资料目前,从这些教程和项目中观察/...
audio>流的configureAudioContext方法; 还有analyseAudioStream方法对当前音频流执行分析并定义用于创建可视化的frequencyData ; 从那里,我们有renderCircles和renderSplodges称取上述frequencyData变量建立...
WebGL / Javascript实验 :test_tube: :microscope: ( :warning: 在制品)实验清单在此存储库中包含的实验列表下方,并托管在github页面上Three.js上面的实验是一个简单的顶点位移着色器和一个简单的高度片段着色器...
TUMP 是一个使用 Web Audio API 创建的合成器。 它允许用户从四种类型的振荡器和四种气质中进行选择。 它有 88 个键和一个滑块设备,用于在更窄的显示器上切换八度音程。 还有一个音量控制和一个调谐控制。
实验室国语 描述 Lab Bahasa 是基于 HTML5 的网络软件,适用于高中语言学习课程。 特征 基本的 师生界面 能够向所有学生同时播放音乐/视频。... HTML5 WebAudio API FFMPEG 进步 20150213:WebAPI 实验
哦,这是一款使用大量 HTML5 API 的 WebGL 射击风格游戏。 来吧,现在就在这里射球: : #Credits 本实验使用 、 、 和 。 它是项目的后代,但它还具有 Ascent 中不存在的元素,例如 InfiniteGround、WebAudio ...
是基于WebAudio API的微调音乐平台。 它是一个框架,用于构建通用或自定义的微调音乐键盘乐器,微调实验和计算,音乐研究以及可能的远程选项的音乐课教学。 该项目介绍的所有应用程序都可以使用Web浏览器进行实时...
合成图 用于画布绘画的 HTML5 合成器 Synthogram 是在画布上合成图画的实验。... 它使用 HTML5 Web Audio API,可在浏览器中实现声音合成。 因此,它只能在支持它的浏览器上运行(例如 Google Chrome)。
##Audio Visualizer 使用 HTML5 AudioContext API 和 D3.js 构建的音频可视化器v1 - 实验版:动画扩展和收缩圆圈以表示频率变化。 v2 - 用原型和更新的动画流程重写 V1,使其更加流畅。 v3 - 将动画从圆形更改为条形...
[完成]通过HTML5 WebAudio API发出的本地立体声 [进行中]游戏保存/还原(保存到本地存储,自动保存,跳转到最后保存,保存到云) [进行中]用户上传选择器,并通过HTML5 File API拖放ROM文件 通过HTML5全屏API全屏...