問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:17 / 状態:未解決 / No:82 / ATOM
1 名前:宇宙刑事シャイダー PR: 愛の手を 日付:2010/12/05(日)12:50:22 ID:7w5yfYRwm2aB
ここの質問コーナーであったASのサンプルを使用して作っています。
まずxmlで曲を読み込んで鳴らす所なのですが・・・。
traceで受け取った値のmp3を鳴らそうとしても鳴りません!!
格納して再生しても連続でならないのでしょうか?
画像だとスライドみたいに再生するのですが・・。
●xmlで大量に受け取った曲を順番に鳴らすにはどうしたらいいのでしょうか?
●xmlのタグなしを読み込む方法も教えてもらえると助かります>w<
flash環境CS4、flashlite3.1、AS2.0

System.security.loadPolicyFile("crossdomain.xml");//別ドメインから読み込む許可
import mx.xpath.XPathAPI
var photos_xml:XML = new XML();//読み込むXMLオブジョクト
photos_xml.ignoreWhite = true;//空白を無視するコマンド
photos_xml.onLoad = photoLoaded;
photos_xml.load("onair.xml"); //イベントハンドラを指定
XPathAPI.selectSingleNode(this.firstChild, "data");
function photoLoaded(success){
var i:Number;
var num:Number;
var photoNodes:Array = photos_xml.childNodes;// photos_xml子ノード
var photoNode:XMLNode = null;
num = photoNodes.length;
for (var i=0; i<num; i++) {
if(photoNodes[i].localName == "data"){
photoNode = photoNodes[i];
break;
}
}
if(!photoNode)return;
var imageNodes:Array = photoNode.childNodes;// photoNode子ノード
var imageNode:XMLNode = null;
num = imageNodes.length;
for(i=0;i<num;i++){
imageNode = imageNodes[i];
preview_obj=new Object();
preview_obj.artist_name=imageNode.attributes["artist_name"]
preview_obj.filename=imageNode.attributes["filename"];
preview_obj.topimg=imageNode.attributes["topimg"];
preview_obj.toptitle=imageNode.attributes["toptitle"];
preview_obj.pageurl=imageNode.attributes["pageurl"];
preview_obj.setname=imageNode.attributes["setname"];

var BGMSound:Sound = new Sound();
BGMSound.loadSound(preview_obj.filename, true);
BGMSound.onLoad = function(s:Boolean) {
      this.start();
}
}
}
2 名前:宇宙刑事シャイダー 日付:2010/12/05(日)12:51:16 ID:7w5yfYRwm2aB
さきほど投稿で文字数オーバーしたのでここに追加で書きます。
xmlです。
<?xml version="1.0" encoding="utf-8" ?>
<data>
<song artist_name="collection" filename="voice0001.mp3" topimg="077.jpg" toptitle="こんにちわ" pageurl="???" setname="101201">更新日:2010/12/01
第一回ラジオ番組</song><song artist_name="collection" filename="voice0002.mp3" topimg="077.jpg" toptitle="こんにちわ" pageurl="???" setname="101201">更新日:2010/12/01
第二回ラジオ番組</song><song artist_name="collection" filename="voice0003.mp3" topimg="077.jpg" toptitle="こんにちわ" pageurl="???" setname="101201">更新日:2010/12/01
第三回ラジオ番組</song>
</data>
3 日付:2010/12/05(日)13:00:03 ID:8d7uAYrQHgxE
xmlの画像参照
1 名前:flash初心者 日付:2010/11/22(月)20:08:49 ID:bLRafCpIRrXV
http://hakuhin.jp/mcs/flash/#78

宇宙刑事シャイダーさんはこちらの質問者と同一の方ですか?
4 名前:宇宙刑事シャイダー 日付:2010/12/05(日)15:57:45 ID:7w5yfYRwm2aB
それを参考にしただけで別人ですよ~。
5 日付:2010/12/05(日)17:17:26 ID:8d7uAYrQHgxE
>別人ですよ~。
そうですか。

「xml の読み込み」と「mp3 の順番再生」が結合されている状態ですが
「xml の読み込み」の方は成功しているようですので、後は「mp3 の順番再生」ですね。
6 日付:2010/12/05(日)17:38:51 ID:8d7uAYrQHgxE
サウンドの再生終了を調べるには、onSoundComplete イベントを使用します。

このイベントが実行されたら次のサウンドを再生する事になります。

配列に サウンドファイル名を格納しておいて、
順番に取り出していき、中身が無くなるまで繰り返す例です。

var sound_list:Array = new Array();

// 再生したいサウンドファイル名を配列の最後尾に追加
sound_list.push("voice0001.mp3");
sound_list.push("voice0002.mp3");
sound_list.push("voice0003.mp3");

// サウンドオブジェクト作成
var BGMSound:Sound = new Sound();

// 読み込みが完了したら呼び出されるイベント
BGMSound.onLoad = function(s:Boolean):Void {
this.start();
};

// サウンド再生が完了したら呼び出されるイベント
BGMSound.onSoundComplete = function():Void {

// 配列が残っている
if(sound_list.length){

// 配列の先頭から取り出して読み込み
var sound_url:String = "" + sound_list.shift();
this.loadSound(sound_url , true);

}

};

// サウンドファイルの読み込みを開始
var sound_url:String = "" + sound_list.shift();
BGMSound.loadSound(sound_url, true);
7 名前:宇宙刑事シャイダー 日付:2010/12/06(月)00:37:07 ID:7w5yfYRwm2aB
回答ありがとうございます!
ですが再生終わっても次が再生されません・・。
if(sound_list.length){// 配列の先頭から取り出して読み込み     
var sound_url:String = "" + sound_list.shift();  
this.loadSound(sound_url , true); 
のsound_list.lengthをでたらめに入れると
一つ目の音が再生終わったあとに
URL 'file:///C|/Documents%20and%20Settings/uemoto%5Fn/デスクトップ/
開くエラーとでるから信号は来ているはずなのですが・・・。


8 日付:2010/12/06(月)00:41:04 ID:7w5yfYRwm2aB
でたらめではなくplaylistと入れたらでした。
エラーもURL 'file:///C|/Documents%20and%20Settings/uemoto%5Fn/デスクトップ/
underfind開くエラーでした。
9 日付:2010/12/06(月)01:01:10 ID:8d7uAYrQHgxE
>>6 のソースで順番再生できるかの確認は済んでいますか?
また、playlist とは何でしょうか?
10 日付:2010/12/06(月)01:22:39 ID:7w5yfYRwm2aB
すいませんsound_listのことです。
順番再生はできてません。
再生は一度で止まってしまいます。
再生しようとする信号はきているみたいです。
11 日付:2010/12/06(月)02:06:07 ID:8d7uAYrQHgxE
>sound_list.lengthをでたらめに入れると
>でたらめではなくplaylistと入れたらでした。
>sound_listのことです。

とは具体的にどのような改変を行われましたか?
12 名前:宇宙刑事シャイダー 日付:2010/12/06(月)20:06:27 ID:7w5yfYRwm2aB
回答して頂いたもので順次再生できました!!
ありがとうございます!
変に改変したために再生されなかったのですが・・・・。
40ファイル以上を管理するために変えたのがいけなかったみたいです。

var playlist:Array = new Array();
var playA:String = preview_obj.filename;
 playlist.push(playA);
//この時とっさに書いたplaylistのためにsound_listをこの名前を変えてしまいました。
var BGMSound:Sound = new Sound();
BGMSound.onLoad = function():Void {

    this.start();
};
BGMSound.onSoundComplete = function():Void {
if( playlist.length){
var sound_url:String = "" +  playlist.shift();
this.loadSound(sound_url , true);
}
};
var sound_url:String = "" +  playlist.shift();
BGMSound.loadSound(sound_url, true);

としたらダメだっただけです。
大量のファイルを管理するのに
playlist.push("voice0001.mp3");
playlist.push("voice0002.mp3");
playlist.push("voice0003.mp3");
etc・・・。
とやってら大変だと思い、変数で処理したらダメでした・・。
何がいけなかったのでしょうか・・。
上のやり方だと for (初期値 in 配列名){処理}
の作業が入らないと順次再生しないのでしょうか?
よろしくお願いします>w<

trace(playA);
でvoice.0001.mp3~0003.mp3がでました。

13 日付:2010/12/10(金)09:11:22 ID:8d7uAYrQHgxE
>>1 のソースのように xml からサウンドファイル名を取り出す for 文中に、
見つかったサウンドファイル名の数だけサウンドオブジェクトを作成されているようでしたら
すべてのサウンドが同時に再生されるような動作をするのではないでしょうか。
14 名前:宇宙刑事シャイダー 日付:2010/12/14(火)00:32:04 ID:7w5yfYRwm2aB
xml からサウンドファイル名を取り出して、一つのサウンドオブジョクトに
入れて順番に鳴らすものです。
1レスのpreview_obj=new Object();
から下は
preview_obj.filename=imageNode.attributes["filename"];
var playlist:Array = new Array();
var playA:String = preview_obj.filename;
playlist.push(playA);
for (var p in playlist) {
trace(i + "=" +playlist[p]);

var BGMSound:Sound = new Sound();
BGMSound.onLoad = function(s:Boolean):Void {
this.start();
};

BGMSound.onSoundComplete = function():Void {
if(playlist.length){
var sound_url:String = "" + playlist.shift();
this.loadSound(sound_url, true);
}
};

var sound_url:String = "" + playlist.shift();
BGMSound.loadSound(sound_url, true);

traceで
0=voice0001.mp3
1=voice0002.mp3
2=voice0003.mp3
//////////////64個ある
64=voice0064.mp3

あとは順番に鳴らすだけなのですがうまくいきません。
やはり一個ずつ
playlist.push("voice0001.mp3");
playlist.push("voice0002.mp3");
playlist.push("voice0003.mp3");
とするしかないのでしょうか・・。
15 日付:2010/12/14(火)02:53:47 ID:8d7uAYrQHgxE
>一つのサウンドオブジョクトに入れて順番に鳴らすものです。

見つかったファイル名の数だけ、
複数のサウンドオブジェクトが作成されています。

>>6 の sound_list 配列はキュー(待ち行列)として動作します。
先に入れたものから先に取り出され順番に処理されます。

>>14 では、サウンドファイル名が見つかるたびに playlist 配列を新規に作り直しているため
せっかく登録したファイル名が消滅しています。
16 名前:宇宙刑事シャイダー 日付:2010/12/16(木)00:02:28 ID:7w5yfYRwm2aB
>せっかく登録したファイル名が消滅しています。
具体的な回避方法はあるのでしょうか?

17 日付:2010/12/16(木)01:20:42 ID:8d7uAYrQHgxE
配列を一度だけ作成します。

×
------------------------------------------
var i;
for(i=0;i<100;i++){
var ary = new Array();
ary.push(i);
}
// 結果
trace(ary.join(","));
------------------------------------------


------------------------------------------
var i;
var ary = new Array();
for(i=0;i<100;i++){
ary.push(i);
}
// 結果
trace(ary.join(","));
------------------------------------------
このスレッドについて
質問の状態 :
未解決
投稿開始日 :
2010/12/05(日)12:50:22
投稿終了日 :
2010/12/16(木)01:20:42
投稿者 :
宇宙刑事シャイダー
レス総数 :
17
スレッド番号 :
82
MondoCollectionSystem ver.0x00020000 by Hakuhin