FLASHのお勉強 ーアクションスクリプトの実践的事始めー
(50) MP3プレイヤー2(MediaController、List、xmlを使う) 2007/10/31
先稿の「MP3プレイヤー 」では、自前のスキンを作ってmp3を再生する方法について解説したが、本稿では、コンポーネントのMediaDisplayとMediaControllerを組み合わせたコントロール部を使い、Listコンポーネントを使って複数の登録曲から再生曲を選曲できるようにした。また、再生曲の演奏者などのデータがテキストボックスに表示されるようにし、それらのデータをxmlファイルから呼び出す方法について解説する。
SAMPLE
ステージの準備
●310*340、背景色黒、12fpsのステージを準備
●MediaDisplay & MediaController
コンポーネントウインドウからMediaDisplayをドラッグしてステージに配置する。(CS3では、actionscript2.0でないとウィンドウには表示されない) インスタンス名をmyMediaDisplayとし、コンポーネントインスペクターでmp3とAutomaticalyPlayにチェックを入れる。MediaDisplayは表示させないので、自由変形ツールでサイズを小さくして、あとで配置するMediaControllerの背後に隠す。
次にMediaControllerをコンポーネントウインドウからドラッグしてステージに配置する。インスタンス名をmyControllerとし、パラメータウインドウで、activePlayControlをpauseに、controllerPolicyをonにセットする。いいか悪いかは別にして、着色を施すためmyControllerをシンボルに変換し(インスタンス名:Controller)、プロパティのカラーで好みの色に着色する。
●List
コンポーネントウインドウからListをドラッグしてステージに配置(サイズ:300*100)、インスタンス名をmyListとする。これをシンボルに変換し(myListBox)、好みの色に着色する。
●テキストボックス
ステージにサイズ300*150のダイナミックテキストボックスを作成し、インスタンス名をmyTextboxとする。複数行、HTMLレンダリング、外枠をセットする。
●このfla(swf)ファイルと同じフォルダに、再生したいmp3ファイルを複数格納しておく(ここでは6曲)。なお、楽曲は「著作権フリーの音楽の部屋」というサイト からダウンロードさせていただいた。
(各コンポーネントのサイズ、色、配置は好みに応じて設定してください。)
xmlファイルの準備
xmlのデータはFlash側で配列として読み込むので、Flash内で配列として定義してもよいが、再生曲を入れ替えることを考えるとxmlファイルにしておいた方が便利なので、この方法について解説する。
なお、Flash内で配列として定義するには、
var Player:Array = new Array("****","aaaa","bbbb",,,,,,);
のようにしておくと、Player[0],Player[1],,,,として扱える。 これを全データ項目について定義する。
xml ファイルは以下のような記述をテキストエディターなどで作成し、ここでは、同じフォルダに、listdata.xml と言うファイル名で保存する(UTF-8フォーマット)。
<?xml version="1.0" encoding="UTF-8"?>
<musicdata>
<music title="大きな古時計" composer="WORK HENRY CLAY"
artist="音楽の部屋様" size="1.4MB" file="hurudokei.mp3"></music>
<music title="アベマリア" composer="Schubert" artist="音楽の部屋様"
size="2.0MB" file="abemaria.mp3"></music>
<music title="もろびとこぞりて" composer="HAENDEL GEORG FRIEDRICH"
artist="音楽の部屋様" size="1.2MB" file="morobitokozorite.mp3"></music>
<music title="野ばら" composer="WERNER HEINRICH" artist="音楽の部屋様"
size="1.8MB" file="nobara.mp3"></music>
<music title="きよしこの夜" composer="GRUBER FRANZ XAVER"
artist="音楽の部屋様" size="1.6MB" file="kiyosikonoyoru.mp3"></music>
<music title="ジングルベル" composer="J.Pieapont" artist="音楽の部屋様"
size="1.3MB" file="jinglbel.mp3"></music>
</musicdata>
スクリプト _root、FRAME1に
listData = new XML();
listData.load("listdata.xml");
listData.ignoreWhite = true;
listData.onLoad = musicPlay;
var Title:Array = new Array();
var Composer:Array = new Array();
var Artist:Array = new Array();
var Size:Array = new Array();
var File:Array = new Array();
myListBox.setStyle("fontSize", 16);
myListBox.setStyle("fontWeight", "bold");
myMediaDisplay.associateController(Controller.myController);
function musicPlay(ok) {
if (ok) {
rootNode = listData.firstChild;
total = rootNode.childNodes.length;
for (i=0; i<total; i++) {
Title[i] = rootNode.childNodes[i].attributes.title;
Composer[i] = rootNode.childNodes[i].attributes.composer;
Artist[i] = rootNode.childNodes[i].attributes.artist;
Size[i] = rootNode.childNodes[i].attributes.size;
File[i] = rootNode.childNodes[i].attributes.file;
}
for (i=0; i<total; i++) {
myListBox.myList.addItem(Title[i]);
}
var listHandler:Object = new Object();
listHandler.change = function(evt:Object) {
for (k=0; k<total; k++) {
switch (evt.target.selectedItem.label) {
case Title[k] :
myTextbox.htmlText = " <B>曲 名: "+Title[k]+"</B>";
myTextbox.htmlText += "<br>";
myTextbox.htmlText += " <B>作曲者: "+Composer[k]+"</B>";
myTextbox.htmlText += " <B>制 作: "+Artist[k]+"</B>";
myTextbox.htmlText += " <B>サ イ ズ: "+Size[k]+"</B>";
myMediaDisplay.setMedia(File[k], "MP3");
}
}
};
myListBox.myList.addEventListener("change", listHandler);
}
}
スクリプトの説明
●listData = new XML(); listData.load("listdata.xml"); listData.ignoreWhite
= true; listData.onLoad = musicPlay;
xmlファイルからDATAを読み込み、このデータを使ってmusicPlayを実行する
●var Title:Array = new Array(); 以下5行は配列の定義
●_global.styles.ScrollSelectList.setStyle("fontSize", 16); _global.styles.ScrollSelectList.setStyle("fontWeight",
"bold");
リストボックス内の文字のサイズ、太字設定
●myMediaDisplay.associateController(Controller.myController);
MediaDisplayとMediaControllerの関連付け
●rootNode = listData.firstChild; 以下 File[i] = rootNode.childNodes[i].attributes.file; まで
xml から読み込んだデータをFlashで定義した配列に組み込む(xmlデータのFLASHへの取り込みは、以下を参照のこと)
「xml データをFlashで活用 」、「xmlデータ読み込み型ショッピングカート 」
●myListBox.myList.addItem(Title[i]);
リストボックスに曲の題名を表示させるための登録。
リストボックスに着色を施さない時は、myListをシンボルに変換せずに、myList.addItem(Title[i]);と言う記述でよい。
●var listHandler:Object = new Object(); myListBox.myList.addEventListener("change",
listHandler);
myListにリスナーを設定し、曲タイトルがクリックされたら、listHandlerが受け取ってイベントfunctionを実行させる。
●switch/case
リストボックスで選択された曲目に応じて、それに対応する曲データをテキストボックスの表示させる。
●myMediaDisplay.setMedia(File[k], "MP3");
MediaDisplayにMP3フォーマットの再生曲のファイルをセットし再生させる。
HOME お勉強総リスト