2010年6月4日金曜日

長い音楽の再生

ちょっとSLの音楽再生の方法についてお問合わせを頂きました。
ありがとうございます^^
私のやり方ですが、、、、ご紹介させていただきますw
SLの音楽って、1ファイル10秒なんですよね・・・
長い音楽ですと、10秒のファイルを連続して再生することに
なると思うんですが・・・
やり方っていくつかあると思うんですが、
一番単純で簡単なのは、
llPlaySound("file01,1);
llSleepScript(9.9);
llPlaySound("file02",1);
llSleepScript(9.9);
:
:
:
と、順番に再生してくことかと思いますw
(効率とか別にして・・・w)
ただ、この方法ですと、途中で音楽を止めるのに、難があるんですよね^^;
音を止めるのは、llStopSound()を使うんですが、
上記の方法ですと、どっかでllStopSound()を入れても
再生中、ほとんどの時間、スクリプトがスリープしてるので、
効果がないっていうか・・・効かないんですよね・・
touch_start()で、再生・停止をさせようとしても、
再生したあと、やっぱりスクリプトがスリープしてる時間がほとんどなので、
停止しようとタッチしても、効かないんですw(これは実験しましたw)
また、4分の音楽なら、単純計算で24ファイル。
そのまま上記の方法で書いたら、ズラーっと下に長いスクリプトになってしまい、
見た目もよろしくない・・・
とゆうことで、
使うのは、llSleepScript()ではなく、
llSetTimerEvent()を使っていますw
たえば、llSetTimerEvent(9.95);とかして、セットになるtimer()イベントは
以下のように書いてます。
この例ではllPlaySound()ではなく、llTriggerSound()使っていますww
i はグローバル変数です
これだけで・・・file01~file24までの再生が可能です
途中で止めたいときは、
どっかで条件を入れて
llStopSound()を反映させると止まりますw
他にも、ノートカードを読んで、リストにして・・・とか
いろんな方法ありそうですけどね・・・
お求めの応えになってますでしょうか^^;
こんな感じでやってますw
あくまでも私のやり方ですので、他にもっといい方法があるかもしれませんので、
その点ご留意下さいませ^^;

 timer()
 {
            llTriggerSound("file0"+(string)i, 1);
            i = i + 1;
            if(i <=24)
            {
                llSetTimerEvent(9.95);
            }
            else
            {
                llSetTimerEvent(0);
                llStopSound();
            }   

<追記>
上記、スクリプト中真ん中あたりのllSetTimerEvent()は不要ですねw

 timer()
 {
            llTriggerSound("file0"+(string)i, 1);
            i = i + 1;
            if(i >25)
            {
                llSetTimerEvent(0);
                llStopSound();
            }   


2 件のコメント:

  1. 追記の方、00-026を再生する予感がw

     想定した上での名前生成だと、ファイルが存在しない時はエラーに
    なるのとスクの融通効かないので、invから読み込んでlist化してlistか
    ら名前拾って再生ってのがやっぱ良いかもね。名前を直接拾って再生
    とはしないのは複数曲を考慮とか、getlistlenghから再生時間取得やら
    ポーズ機能用だわな。
     まあ、入れ替えだの複数の曲を再生だのって色々機能を入れないのな
    らシンプルなのが一番だけどね。

    返信削除
  2. まーや さん^^

    あ・・・w た、、確かに・・w そのあたりは・・( ̄b ̄) シーーッ!!ww
    実はあまりlistは使ったことがないとゆう・・・私www
    そうなんですよね、ベストはリストに入れて・・・ってやろうとしてたんですが・・・めんどくさくなって・・・( ̄ー ̄; ヒヤリ 1曲だし・・・いいかーってwww 

    返信削除