トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     onSoundCompleteが動作しない時があります
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hanywa
Åê¹ÆNo.8523
投稿日時: 2004-6-22 22:24
新米
居住地: 兵庫
投稿: 10
使用環境:
Win2K,Flash MX2004
onSoundCompleteが動作しない時があります
hanywaと申します。
最初羊部屋に投稿したのですが、こちらの方が適切かと思い移動投稿いたしました。
onSoundCompletを用いたスクリプトで行き詰まり解決できない部分がありご教授いただけませんでしょうか。

現在外部mp3と外部JPEGを使用した紙芝居のような仕組みを作っています。
mp3の再生が終わるタイミングで次のmp3とJPEGを読み込むという仕組みなのですが、
稀にmp3の再生が終わっても次のmp3とJPEGを読みに行かない場合があります。
発生する個所も再生の度に異なりますし、必ず再現する訳でもありません。

以下が使用しているスクリプトです。

タイムライン1フレーム目
function LoadNVic(nvic) {
	if (nvic != null) {
		if (theVoice != null) {
			theVoice = null;
		}
		theVoice = new Sound();
		//男女別
		var Xstr = nvic.lastIndexOf("X");
		if (Xstr != -1) {
			nvic =  nvic.slice(0, Xstr) + sex + ".mp3";
		}
		//this[nvic].start();
		trace('MP3:' + nvic);
		theVoice.loadSound(nvic, false);
		sound_mv.gotoAndPlay(1);
		sound_mv.onEnterFrame = function() {
			if (theVoice.getBytesLoaded()>=theVoice.getBytesTotal()) {
				theVoice.setVolume(150);
				theVoice.start();
				sound_mv.onEnterFrame = null;
			}else{
				trace("wait: "+theVoice.getBytesLoaded()+"/"+theVoice.getBytesTotal());
			}
		}
	}
}

function NEvent(neve, ntxt){
		//テキストが発生する場合
		if (ntxt != null) {
			※割愛しています※
		}else if (neve != null) {

		//イベントが音声後に発生する場合
		
			※割愛しています※

		} else {
			theVoice.onSoundComplete = function() {
				gotoAndPlay("main");
			}
		}
}


タイムライン(フレーム名:main)
	LoadNImg(NImg);	//イメージデータのロード※ここでJPEGを呼んでいます。このfunctionは割愛しています※
	LoadNVic(NVic,Neve,Ntxt);	//音声データのロード
	NEvent(Neve, Ntxt);	//イベント有無の判断


これを親SWFに読み込んで使用しています。

次のシーンに進まないのは
			theVoice.onSoundComplete = function() {
				gotoAndPlay("main");
			}

が動作していないためだという事はtraceで確認したのですが
何故稀にonSoundCompleteが動作していないのかがわかりません。

何故このような現象が起こるのか、またこれを回避するにはどうしたらいいかご教授くださいますようお願いいたします。
野中文雄
Åê¹ÆNo.8526
投稿日時: 2004-6-23 5:02
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: onSoundCompleteが動作しない時があります
処理のタイミングがわからないのと、いずれにしてももう少し問題の絞込みが必要でしょう。
引用:
hanywaさんは書きました:
onSoundCompletを用いたスクリプトで行き詰まり解決できない部分がありご教授いただけませんでしょうか。

現在外部mp3と外部JPEGを使用した紙芝居のような仕組みを作っています。

少し気になるのは、Sound.onSoundCompleteイベントハンドラメソッドの定義がSound.loadSound()メソッドの呼出しと分離している点、および前者の定義がフレーム"main"で毎回設定し直されることです。

サウンドの終了間際にデータの読込みなど負荷のかかる処理が行われて、Sound.onSoundCompleteメソッドの再定義のタイミングとぶつかることはありませんか?
引用:
mp3の再生が終わるタイミングで次のmp3とJPEGを読み込むという仕組みなのですが、
稀にmp3の再生が終わっても次のmp3とJPEGを読みに行かない場合があります。
発生する個所も再生の度に異なりますし、必ず再現する訳でもありません。

取りあえず、Sound.onSoundCompleteメソッドの定義位置を変えると、いかがでしょう?
引用:
タイムライン1フレーム目
function LoadNVic(nvic) {
    if (nvic != null) {
        // ...[中略]...
        trace('MP3:' + nvic);
        //【挿入】
        theVoice.onSoundComplete = function() {
            gotoAndPlay("main");
        }
        // 挿入ここまで
        theVoice.loadSound(nvic, false);
        // ...[後略]...
        }
    }
}

function NEvent(neve, ntxt){
        //テキストが発生する場合
        if (ntxt != null) {
            // ...[中略]...
        } else {
        /*【削除】
            theVoice.onSoundComplete = function() {
                gotoAndPlay("main");
            }
        */
        }
}

本題から逸れますが、「イベントハンドラメソッドはdeleteで消せ」キャンペーン実施中です。
sound_mv.onEnterFrame = null;


----------------
 

hanywa
Åê¹ÆNo.8593
投稿日時: 2004-6-25 23:13
新米
居住地: 兵庫
投稿: 10
使用環境:
Win2K,Flash MX2004
Re: onSoundCompleteが動作しない時があります
遅くなりましたが野中さんありがとうございます。

引用:
少し気になるのは、Sound.onSoundCompleteイベントハンドラメソッドの定義がSound.loadSound()メソッドの呼出しと分離している点、および前者の定義がフレーム"main"で毎回設定し直されることです。

サウンドの終了間際にデータの読込みなど負荷のかかる処理が行われて、Sound.onSoundCompleteメソッドの再定義のタイミングとぶつかることはありませんか?


負荷がかかっている可能性は高いです。
タスクマネージャーでCPU使用率を確認すると100%近く行きます。

まずはご指摘いただいたようにonSoundCompleteの位置を変更し、
あと、"main"フレームに行く度MP3をLoadしているのが
音声終わる→読み込み
の動作に負担をかけているかと思い、事前に読み込むよう対策をしました。
が、依然事態は解決していないので引き続き原因の絞込みを行います。
今度は事前読み込みの際に問題があるかもしれないので
(調べているところなのではっきりとはわかりません)
またこちらのフォーラムに投稿するかもしれませんが
その際はご縁がありましたらよろしくお願いいたします。

この度はご回答くださりありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops