一、準備資料庫
首先,我們設計MYSQL資料庫如下:
CREATE TABLE `songs` ( `song_id` int(11) NOT NULL AUTO_INCREMENT, `url` varchar(500) NOT NULL, `artist` varchar(250) NOT NULL, `title` varchar(250) NOT NULL, PRIMARY KEY (`song_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
這裡,url字段表示是mp3音樂的存放地址,artist是歌曲的演唱者,title是歌曲的名稱。我們再加入一些範例數據,如下:
INSERT INTO `songs` (`song_id`, `url`, `artist`, `title`) VALUES ('', 'http://mysongs.com/songurl.mp3', 'Artist name', 'Song name'); INSERT INTO `songs` (`song_id`, `url`, `artist`, `title`) VALUES ('', 'http://mysongs.com/anothersongurl.mp3', 'Another artist', 'Another song'); INSERT INTO `songs` (`song_id`, `url`, `artist`, `title`) VALUES ('', 'http://mysongs.com/onemoresongurl.mp3', 'One more artist', 'One more song');
二、設計HTML頁
在完成資料庫的設計後,我們就可以開始設計HTML頁面了。這裡我們要先下載jQuery的音樂播放外掛jPlayer(http://jplayer.org/)。把下載下來的包解壓縮後,把js和skin兩個資料夾的內容放到你的應用程式的根目錄下,它們是要用到的javascript檔和CSS樣式應用檔。現在可以開始設計HTML頁了,把檔案命名為demo.html,程式碼如下:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html xmlns='http://www.w3.org/1999/xhtml' lang='en' xml:lang='en'> <head> <title>Online radio using jQuery</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="skin/jplayer.blue.monday.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.jplayer.min.js"></script> </head> <body> <div id="jquery_jplayer_1" class="jp-jplayer"></div> <div class="jp-audio"> <div class="jp-type-single"> <div id="jp_interface_1" class="jp-interface"> <ul class="jp-controls"> <li><a href="#" class="jp-play" tabindex="1">play</a></li> <li><a href="#" class="jp-pause" tabindex="1">pause</a></li> <li><a href="#" class="jp-stop" tabindex="1">stop</a></li> <li><a href="#" class="jp-mute" tabindex="1">mute</a></li> <li><a href="#" class="jp-unmute" tabindex="1">unmute</a></li> </ul> <div class="jp-progress"> <div class="jp-seek-bar"> <div class="jp-play-bar"></div> </div> </div> <div class="jp-volume-bar"> <div class="jp-volume-bar-value"></div> </div> <div class="jp-current-time"></div> <div class="jp-duration"></div> </div> <div id="jp_playlist_1" class="jp-playlist"> <ul> <li><strong id="artist">Artist</strong> - <span id="songname">Song name</span></li> </ul> </div> </div> </div> </div> </body> </html>
以上程式碼其實很簡單,只是引入了jQuery和jPlayer插件的必須要的檔案和樣式,然後設定好播放器的外觀,這裡都是透過DIV去預先定位指定所在的層,例如播放進度條,播放的按鈕(開始/暫停),聲音的控制大小等。
三、讀取資料庫中的曲目
接下來,我們就可以從資料庫中讀取要播放的歌曲了,本文將採用ezSQL的PHP開源函式庫去連接資料庫,當然你也可以用傳統的MYSQL連線方法。 ezSQL的具體用法我們就不再太多介紹了,這裡使用其實很簡單,把ez_sql_core.php和ez_sql_mysql.php兩個檔案放到專案的根目錄下即可,我們寫php檔如下,命名為getsong. php,程式碼如下:
<?php if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){ include_once "ez_sql_core.php"; include_once "ez_sql_mysql.php"; $db = new ezSQL_mysql('db_user','db_password','db_name','db_host'); $song = $db->get_row("SELECT * FROM songs ORDER BY RAND() LIMIT 1"); $artist = $song->artist; $songname = $song->title; $url = $song->url; $separator = '|'; echo $url.$separator.$artist.$separator.$songname; } ?>
這裡,用rand()隨機在MYSQL中取出一條記錄(曲目),然後分別用變數保存其歌曲的名稱,歌手名稱和地址,將它們用符號「|」連接起來。而因為我們要使用ajax去呼叫這個PHP,所以注意語句:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
主要的目的是防止使用者在瀏覽器網址列中只是輸入例如http://www.yousite.com/getsong.php就能獲得歌曲的URL位址,只允許是透過AJAX發出的請求才予以接受。
四、最終實現完善程式碼
最後,我們可以修改jPlayer的程式碼,讓我們的播放器運作起來,修改demo.html程式碼如下:
<script type="text/javascript"> //<![CDATA[ $(document).ready(function(){ $("#jquery_jplayer_1").jPlayer({ ready: function () { var data = $.ajax({ url: "getsong.php", async: false }).responseText; var string = data.split('|'); $(this).jPlayer("setMedia", { mp3: string[0] }).jPlayer("play"); $('#artist').html(string[1]); $('#songname').html(string[2]); }, ended: function (event) { var data = $.ajax({ url: "getsong.php", async: false }).responseText; var string = data.split('|'); $(this).jPlayer("setMedia", { mp3: string[0] }).jPlayer("play"); $('#artist').html(string[1]); $('#songname').html(string[2]); }, swfPath: "js", supplied: "mp3" }); }); //]]> </script>
可以看到,在jPlayer插件的ready方法中,發起了一個ajax請求,請求getsong.php, 隨機地獲得一首播放的歌曲,然後對返回的資料重新用split方法分割「|」符號,其中所得的字串陣列string[0]即為mp3歌曲的URL位址,stringp[1]為歌手的名稱,這裡經由
$('#artist').html(string[1])顯示出來, $('#songname').html(string[2])則顯示出歌的名稱。 swfPath指定該播放器的FLASH所在的目錄為js目錄,當然你可以自己定義路徑,supplied指出只支援MP3格式。
運作後,可以看到以下播放器的效果: