Hatena::ブログ(Diary)

Simple Inspiration RSSフィード Twitter

10/07/14 (Wed)

ActionScript3.0ライブラリ入門

f:id:keim_at_Si:20100713171521j:image

株式会社翔泳社:SEShop.com; ActionScript3.0ライブラリ入門


7/15 に発売される「ActionScript3.0ライブラリ入門」にて共著で執筆させていただきました.「豪華執筆陣!」と銘打つ中において,お前誰やねん?ランキング独走態勢な雰囲気ではありますが,一応「2章5節:サウンド系ライブラリ」を担当しております.共著の方々のリンクを張っておきます.

新藤さん;BeInteractive! [「ActionScript3.0ライブラリ入門」予約開始!]

加茂さん;xingxx - ActionScript3.0ライブラリ入門

高輪さん;ActionScript3.0 ライブラリ入門 [NUTSU]

森山さん;【Flash】「ActionScript3.0 ライブラリ入門」予約開始しました!!!|atsumo+Flash

小林さん;「ActionScript3.0 ライブラリ入門」で記事を書きましたよ (Unknown Quality)

河村さん;flabaka - 『ActionScript3.0 ライブラリ入門』が発売されます!

池田さん;「ActionScript 3.0 ライブラリ入門」の執筆に参加しました | ClockMaker Blog

浦野さん;【Tweener】ActionScript 3.0 ライブラリ入門【Papervision3D】

タロタローグさん;今月の本

こんな執筆陣の書籍に携わる機会を与えていただいて,本当にありがたいことです.


というわけで,手元にはすでに本がありまして,一足先に目を通させていただきました.

さまざまなジャンルの 19個もの ActionScript ライブラリ について 360ページに渡って網羅的に書いてあるというのは,唯一無二でしょう.一方で,各ライブラリについては限られたページ数での解説となっています.このため,すでに習熟したライブラリに関しては少し物足りないと感じるかもしれません.

本書は「ライブラリ入門」というタイトル通り,さまざまなジャンルのライブラリへの"入り口"が用意されている本だと思います.

自分の場合,ライブラリを利用するとき大きな足枷になるのが「そのライブラリを使い方を1から覚えないといけない」という点です.ライブラリは複雑な処理を肩代わりしてくれる非常に強力な道具ですが,道具を使うにはその使い方を覚えなくてはなりません.また,使い方は各ライブラリで異なるため(Tween系などは互換性がありますが),ほとんどの場合1から覚える必要があります.この「1から覚える」というのが曲者で,人間「1→10」は比較的楽なんですが「0→1」というのがなかなか難しい.その導入部をスムーズに誘導してくれる,そんな本だと思いました.


現状まともな SiON チュートリアルが書いてある唯一の情報元でもあります.是非手にとってもらえるとうれしいです.


PS. 今回,難易度と紙面の都合で,SiON 応用チュートリアル「Matrix Sequencer」の項がボツになってしまいました.が,翔泳社さんのご好意で,おまけとしてサンプルファイル内にpdf 形式で(ほぼテキストファイルのままですが)収録されています.サンプルファイル自体は上記翔泳社さんのサイトからダウンロード可能みたいですので,よかったら見てみて下さい.ただし,難易度が高いという理由で未収録となった原稿ですので,内容についてはそのつもりでお願いします.

desk fandesk fan 2010/07/29 15:42 はじめまして。
SiONのライブラリ、とても興味深く勉強させて頂いております。

mp3を使用した場合の再生方法で質問なのですが、
20秒くらいの長さのmp3を複数ロードし、
ユーザーのクリックのタイミングで、同期させて再生することは可能でしょうか?

mmlを使用した場合は、こちらのサンプル
http://www.libspark.org/browser/as3/SiOPM/trunk/samples/Tutorials/SyncSequence2.as
で理解できたのですが、
mp3を使用した場合どうすればよいのかわかりません。

mp3をロードした後、どうすればSiONDataとして保持できるのでしょうか。

お忙しいところ大変恐縮ですが、ご教示頂ければと思います。

keim_at_Sikeim_at_Si 2010/08/02 13:01 こんにちは.コメントありがとうございます.
mp3の扱い方については,未だにまとまった情報を何処にも出してないので判りにくいですね.すいません.
一応,過去に外部mp3を読み込むサンプルをwonderlflのQuestionsで答えたことがあります.
http://wonderfl.net/c/kOds

音程やフィルタ,エンベロープなど内臓音源と同様に扱いたい場合は,SiONDriver.setPCMSound()->SiONDriver.noteOn(),
効果音のように音程操作が必要ない場合は,SiONDriver.setSamplerSound()->SiONDriver.playSound()
を用います.
http://www.libspark.org/htdocs/as3/sion/org/si/sion/SiONDriver.html#setPCMData%28%29
http://www.libspark.org/htdocs/as3/sion/org/si/sion/SiONDriver.html#setSamplerData%28%29

これだけだとかなり情報足りてないので,いずれサンプル準備します.すいません.今後ともよろしくお願いします.

desk fandesk fan 2010/08/03 13:24 ご返信、ありがとうございます。

wonderlflのサンプルで、
SiONDriver.setSamplerSound()->SiONDriver.playSound()
の方法は再生することができました。

この場合ですが、読み込んだ外部mp3の音をループ再生し、音色も変え
ることはできるのでしょうか?
mmlの場合は、「$」で繰返しを指定できるはずですが、
mp3の場合はどうすればよいかわかりませんでした…。


また、紹介して頂いたwonderflの下記のコメントアウトされている箇所ですが、

//driver.setPCMSound(0,source,5,1048576);
//mml = driver.compile("%7@0c");

SiONDataがとれたらいいなと試してみてもうまく再生されませんでした。

ここらへんの方法なども含め、サンプルとして情報を提供して頂けると、
大変助かります。

まだまだ自分で使いこなすには程遠いのですが、期待していますので、
宜しくお願いします。

keim_at_Sikeim_at_Si 2010/08/06 00:51 //driver.setPCMSound(0,source,5,1048576);
//mml = driver.compile("%7@0c");
も,Soundのローディング完了後であれば動くと思います.

内部でデータとして保持する場合は,SiONVoiceの形になります.SiONVoice.setPCMVoice()というメソッドで設定すると,ロードしたSound クラスを SiONVoice として使用できます.
また,コンパイル済みmmlデータに付随させる場合は,SiONData.setPCMSound()/setSamplerSound() というメソッドもあったりします.実は方法がいっぱいあってかなり混沌としてるので,いずれまとめたいと思います.

desk fandesk fan 2010/08/06 15:10 "%7@0"の後にmmlデータをつなげてもう一度試したところ、mmlのメロディを、読み込んだmp3の音色で再生することができました。
なるほど、音色として利用できるのですね。

こちらのサンプルと同じことを、mmlを使わず、読み込んだmp3のメロディで再生したかったのですが、
http://www.libspark.org/browser/as3/SiOPM/trunk/samples/Tutorials/SyncSequence2.as
 mainMelody = driver.compile("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");
の箇所を、
 driver.setPCMSound(0,load_mp3);
 mainMelody = driver.compile("t100 l8 %7@0");
と書き換えられると勘違いしておりました。

基本的な理解が足りないので、復習したいと思います。ありがとうございました。

ame-chaname-chan 2010/08/23 13:31 初めまして。
「ActionScript3.0ライブラリ入門」にてSiONの存在を知り、勉強させて頂いております。

そこで初歩的な質問で申し訳ありませんが、playボタン、pauseボタン、stopボタンの連携でわからない点がありまして、ご指導願えればと思います。

(1)playボタンでmmlデータを再生。
(2)pauseボタンで一時停止。
(3)stopボタン(データの頭に戻りたい)を押した後、playボタンを押しても曲が
 再生されません。

(1)←→(2)、(1)←→(3)、の間では問題なく処理されています。

どこが問題なのか、あるいはよい解決策を教えて頂けないでしょうか。?

どうかよろしくお願いします。
以下、頭を悩ませているscriptです。


var mml:String = "#REV; #EFFECT0{delay300,6,1};";
//var mml:String = "t100;";
mml += "t100";
mml += "%t,1,1 %6@0 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2;";
mml += "%6@1 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2;";
mml += "%6@2 l16 v8 o6 [g4g4g4g4]10;";
mainMelody = driver.compile(mml);

mainMelody.setVoice(0, presetVoice["midi.pipe4"]);
 mainMelody.setVoice(1, presetVoice["valsound.bell16"]);
mainMelody.setVoice(2, presetVoice["midi.drum76"]);

 playBtn.addEventListener(MouseEvent.CLICK, playBClick);
pauseBtn.addEventListener(MouseEvent.CLICK, pauseBClick);
stopBtn.addEventListener(MouseEvent.CLICK, stopBClick);

function playBClick(event:MouseEvent) {

    driver.play(mainMelody);
 }

function pauseBClick(e:MouseEvent):void {

driver.pause();
}

function stopBClick(e:MouseEvent):void {

driver.stop();
}

keim_at_Sikeim_at_Si 2010/09/02 09:13 こんにちは.返信遅れて申し訳ありません.

んんー,ソースを見た限りでは,問題になりそうな箇所は見当たりませんね...MMLTalksのプレイヤなども基本的にはこの方法で実装していますので,動くと思うのですが,他のところでエラーが出てるのでしょうか...
最初に

driver.debugMode = true;

としてから,デバッグプレイヤで起動してみていただけませんか?何かエラーをはけばバグだと思われます.よろしくおねがいします.

ame-chaname-chan 2010/09/06 11:47 ご回答ありがとうございます。 MMLTalksのプレイヤーを確認させて頂きました。これと同じ挙動でした。
つまり、Play → Pause → Stop を押してから Playを一度押しても再生されない(2度押しで再生される)という点をバグと受け取った次第です。仕様という事であれば了解です。 ただ通常の再生プレイヤーだと一度押すと再生されるので、そうなればよいな〜と思います。ご検討頂ければ嬉しいです。 ちなみにdebugMode =trueではなにもひっかかりませんでした。  
よろしくお願いいたします。

keim_at_Sikeim_at_Si 2010/10/15 14:25 遅レスですいません.なるほど,pause中にstopしてもpauseが解除されないのは,おかしな挙動ですね.stop()時にpauseフラグをリセットすれば良いだけだと思うので,v0.62で直しておきます.ご指摘ありがとうございます.
とりあえずの対応としては,SiONEvent.STREAM_STOP イベントハンドラ内で
if (driver.isPaused) driver.play();
としておくと,一応対応可能だと思います(stop内でplayしているのでちょっと危険なコードですが)