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フォーマットの再生曲のファイルをセットし再生させる。
 
flashirohaサイト内  Web全体 
HOME   お勉強総リスト