※ ChatGPTを利用し、要約された質問です(原文:actionscript2のmp3再生について)
actionscript2のmp3再生について
このQ&Aのポイント
ファイルの読込み完了時点でSoundオブジェクトがundefinedになってしまいます。
動作としましては、ファイルの読込みが完了し、loadCompleteが呼ばれ、読み込んだmp3ファイルを再生し、再生終了時点でendSoundが呼ばれ、次の音声ファイルを読み込み。。。という流れを望んでいるのですがloadComplete以降Soundオブジェクトがundefinedになってしまう為上手く動作しません。
有識者の方、ご回答頂けますと幸いです。
as2でmp3の再生を行いたいのですが上手く動作しません。
以下、ソースになります。
-----------------------------------------------------------------------
FLASHファイルの1フレーム目
stop();
var soundUtil:common.SoundUtil = new common.SoundUtil(this);
soundUtil.soundFile = ["snd1.mp3", "snd2.mp3", "snd3.mp3"];
soundUtil.startSound();
クラスファイル
class common.SoundUtil{
public var soundCtl:Object;
public var crrSoundNo:Number;
public var soundFile:Array;
public function SoundUtil(target:MovieClip) {
this.soundCtl = new Sound();
this.soundCtl.attachSound("test1");
this.soundCtl.setVolume( 100 );
this.soundCtl.onLoad = loadComplete;
this.soundCtl.onSoundComplete = endSound;
this.crrSoundNo = 0;
}
// 音声スタート
public function startSound():Void{
trace("startSound:::" + this.soundCtl);
if (this.soundFile.length > 0){
// ※loadSoundを呼び出すとこのクラス情報が消失します
this.soundCtl.loadSound(this.soundFile[this.crrSoundNo], false);
}
}
// 音声ストップ
public function stopSound():Void{
this.soundCtl.setVolume( 0 );
this.soundCtl.stop();
}
// 次ファイル再生
public function nextSoundLoad():Void{
if (this.soundFile.length - 1 < this.crrSoundNo + 1){
stopSound();
}else{
this.crrSoundNo = this.crrSoundNo + 1;
startSound();
}
}
// 音声再生終了
private function endSound():Void{
trace("endSound:::" + this.soundCtl);
if (this.soundFile.length - 1 < this.crrSoundNo + 1){
stopSound();
}else{
nextSoundLoad();
}
}
// ファイルの読込終了
private function loadComplete(success):Void{
// ※↓this.soundCtlがundefined
trace("loadComplete:::" + this.soundCtl);
if (success == true) {
// ※↓以下通過しています
trace("success:::");
this.soundCtl.start();
}
}
}
-----------------------------------------------------------------------
出力ログ
startSound:::[object Object]
loadComplete:::undefined
success:::
-----------------------------------------------------------------------
ファイルの読込み完了時点でSoundオブジェクトがundefinedになってしまいます。
動作としましては、ファイルの読込みが完了し、loadCompleteが呼ばれ、読み込んだmp3ファイルを再生し、再生終了時点でendSoundが呼ばれ、次の音声ファイルを読み込み。。。という流れを望んでいるのですがloadComplete以降Soundオブジェクトがundefinedになってしまう為上手く動作しません。
有識者の方、ご回答頂けますと幸いです。
宜しくお願い致します。
お礼
>this が指す対象の変化 >loadComplete メソッド内の this.soundCtl.start は soundCtl.soundCtl.start を指定している こちらの考えに至らず、思考がずっと同じところをぐるぐる回っておりました。 上で記して頂いた通りに修正しましたところ、問題なく希望通りの動作を確認できました。 また、ソースの不備にもご指摘下さいましてありがとうございます。 ご指摘の通りだと思います。 お忙しい中、丁寧な解説でご回答下さいまして誠にありがとうございました。 心より御礼申し上げます。