すぐに自宅のオーディオシステムで理解できる予約をします。
目的:ホームネットワーク上の任意のデバイスからの列の音楽の再生を制御します。実装は次のようになります。音楽情報はデータベースに格納され、この情報をオンデマンドでプルするサーブレットがあります。
すべてはWebインターフェースを介して制御されます。
最後に、スピーカーが接続されているAndroidデバイスで、オーディオサーバーが回転しています。
それでは、行きましょう。
1.データベースの準備
データベースとしてMySQLを使用します。 データベースには2つのテーブルが含まれています
。mp3-オーディオファイルのデータと
mp3_tmp-データベースの更新時にテーブルが使用されます。 両方のテーブルの構造は同じです。
テーブルには次のフィールドが含まれます。path-ディスク上のファイルへのパス、
PRIMARY KEY ;
アーティスト -パフォーマー;
album-アルバム名;
title-トラックのタイトル。
年 -記録の年。
番号 -アルバムのトラック番号。
length -mm:ss形式のトラックの長さ。
したがって、テーブルを作成するSQL:
DROP TABLE IF EXISTS `mp3_tmp`; CREATE TABLE `mp3_tmp` ( `path` varchar(250) NOT NULL, `artist` varchar(250) DEFAULT NULL, `album` varchar(250) DEFAULT NULL, `title` varchar(250) DEFAULT NULL, `year` varchar(40) DEFAULT NULL, `length` varchar(40) DEFAULT NULL, `number` varchar(40) DEFAULT NULL, PRIMARY KEY (`path`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
テーブルを作成するには、Javaのプログラムを使用します。開始するには、音楽を含むフォルダー内のすべてのmp3ファイルのリストを作成します。
FileFinder ff = new FileFinder();
次に、一時テーブルにファイル情報を入力します
(
JDBCを使用-データベースに接続し、
jaudiotaggerライブラリ
-mp3タグのスキャン用):
for (File file : files) {
2.バックエンドプレーヤー
プレーヤーのバックエンドは、2つのサーブレットで構成されています。@WebServlet( "/ getlist")-検索クエリのトラックのリストを返します。
@WebServlet( "/ヒント")-ツールチップを最初の文字で返します。
GetListサーブレットの詳細。
ヒントサーブレットは、次のSQLクエリを実行します。
JSON形式でデータを返します。
3. HTML5フロントエンド
プレーヤーのフロントエンドとして
HTML5と
jQueryを使用し
ます 。 ここで興味深い点は次のとおりです。
プレイリストの形成: $('#search').click(function(){
ヒント:
ボリュームの変更: $('#volume_slider').slider({orientation:'vertical',range:'min',min:0,max:100,value:100,stop:function(event,ui){ var volume = (ui.value*1.0)/100.0; $('#my_audio').prop('volume',volume); } });
トラックアドバンス: $('#time_slider').slider({disabled:true,range:'min',min:0,max:1000,stop:function(event, ui) { var dur = $('#my_audio').prop('duration'); var cur = (dur*ui.value)/1000; $('#my_audio').prop('currentTime',cur); } });
現在位置のインタラクティブな表示: $('#my_audio').bind('timeupdate',function(){ var cur = $('#my_audio').prop('currentTime'); var dur = $('#my_audio').prop('duration'); var left = dur - cur; if (dur) { var slider_val = cur*1000/dur; cur = Math.floor(cur+0.5); dur = Math.floor(dur+0.5); left = Math.floor(left+0.5); cur_s = cur % 60; cur_m = (cur - cur_s)/60; dur_s = dur % 60; dur_m = (dur - dur_s)/60; left_s = left % 60; left_m = (left - left_s)/60; cur_s = $.formatNumber(cur_s,{format:'00',locale:'ru'}); cur_m = $.formatNumber(cur_m,{format:'00',locale:'ru'}); dur_s = $.formatNumber(dur_s,{format:'00',locale:'ru'}); dur_m = $.formatNumber(dur_m,{format:'00',locale:'ru'}); left_s = $.formatNumber(left_s,{format:'00',locale:'ru'}); left_m = $.formatNumber(left_m,{format:'00',locale:'ru'}); $('#time_cur').text(cur_m+':'+cur_s+' ') $('#time_dur').text(' '+left_m+':'+left_s); $('#time_slider').slider('option',{disabled:false}); $('#time_slider').slider('value',slider_val); } });
最後に次のトラックに切り替えます。 $('#my_audio').on('ended',function(){ var n = (Number(window.number) + 1) % window.playlist.length; $('li#'+n).trigger('click'); });
完成したプレーヤーは次のとおりです。http://home.tabatsky.ru/mp3player/homeaudio/desktop.jsp4.オーディオサーバー
偶然、私のスピーカーは、ほこりや良いスピーカー、Android上の1つのデバイスを集めていました。 その結果、Android用のオーディオサーバーを作成し、スピーカーから音楽を聴くというアイデアがありました。
オーディオサーバーは、1つのアクティビティと2つのサービス(
HttpServiceと
PlayerService)で構成されます。
そして、より詳細に。
HttpServiceはHTTPリクエストを受け入れ、PlayerServiceコマンドを送信します。 public int onStartCommand(Intent intent, int flags, int startId) { t = new Thread() { public void run() { try { ss = new ServerSocket(port, backlog, InetAddress.getByName(addr)); while (true) {
PlayerServiceは音楽の再生を担当します。 public int onStartCommand(Intent intent, int flags, int startId) { player = new MediaPlayer(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); result = "ok"; status = "playing"; } }); player.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) {
対応するフロントエンドコードをわずかに変更するだけです。
結論:スピーカーでの音楽の再生は、ホームネットワークに接続されているどのデバイスからでも制御できます。