SiON(サイオン)で音を鳴らしたい!

参考図書:ActionScript3.0ライブラリ入門

SiONとはサイオンと読みます※シオンではないです。
Flashで音を鳴らしたり、エフェクトをかけたりするライブラリです。
音をインタラクテヴにいじれるので、使いこなせたら
楽しいだろうなぁと思いすこし触ってみました。
僕自身は音楽の知識がゼロですが、いろいろ調べて
とりあえず音を出してみるところから鍵盤で音を鳴らすところまでがんばりました。
下記にSiONの解説をしたいと思います。

 


【SiON概要】

SiONでできることをざっくり下記のように纏めてみました

できる事
・音源の選択(音色)
・エフェクターの適用
・継ぎ目のないループ再生
・フェードイン、フェードアウト再生
・音階をつけての再生
・波形データを生成する(play,roteOn,sequenceOn,render,)
・MMLをコンパイル、演奏(compile,play,)※MMLについては下記で説明します。
・MP3を読み込む/再生する(setPCMSound,setSamplerSound)
・シーケンスの再生速度、ボリューム、パン、フェードなどの操作
・各種イベントを発行する。同期発音、同期再生、ディスプレイオブジェクトとの連動
 ※発音、消音をイベントハンドラに登録できるためDisplayObjectとの連動が容易

今回は エフェクトの設定、音階の設定、イベントハンドラの設定について解説したいと思います

 


【STEP1 音を鳴らす】

とりあえず音を鳴らしたいので、下準備として
kaeruData = sionDriver.compile(“文字列で設定”) に各種設定します。

●エフェクター設定(#EFFECT1{delay}) エフェクタ音響効果を設定します。
  設定例)EFFECTスロット1番に音量16でdelayを設定する場合
  #EFFECT1{delay}; t100 @v32,16 
  エフェクト不要な場合は「#EFFECT1{delay};」をマルッと削除してください(@v32の第二引数の設定も削除)
 
  *スロットは1~7番まで設定できる
  *スロット0番目は全体に反映したいときに使う
  *エフェクトの音量は「@v32,n」カンマ区切りの第二引数で設定
  *derayは別名エコーと呼ばれる効果です
   その他効果の詳細はSiOPM MML reference (version 0.6.0)をご確認ください

●全体の設定(t100 @v32 l8 o6)
・テンポ(t100)→ 一分間で何拍打つかのBPM(Beat per minute)数値
  設定例) 
  テンポ100で演奏する場合 t100

・音量(@v32) → 0~128で指定
  設定例)
  音量32で演奏する場合 @v32

・音符/休符(l8)→ 全体の音符/休符の指定  
  設定例)
  全音符の場合「l1」 16音符の場合は「l16」 ※特に指定のない場合8部音符が鳴る。

・オクターブ(o6)→オクターブ(ドからつぎのドまでの音階)指定 0~9 標準はo5

・MML設定(cdefedcr efgagfer [c4]4 l16ccddeeff l8edcr)
 音に関するメインの設定ですね。
 楽譜や音源の設定は Music Macro Language (MML) によって記述する事ができるため,
 非常に軽量なテキストデータによって音楽や効果音を表現できるそうです。

  音階
  ド=c レ=d ミ=e ファ=f ソ=g ラ=a シ=b
  #=+ ♭=- 休符=r

  設定例)ドのシャープ c+ ドのフラット c- 

  音を繰り返す
  四分音符のドを4回繰り返す例) [c4]4

  複数のトラック再生
  「;」で分けることで複数のトラックを再生できる

  ※詳細はwikiなどでご確認くださいMML記述参考
  ※作曲に役立ちそうな、MMLエディタ適当に打ち込んで演奏するだけでも楽しいですヨ
  ※MML記述の標準仕様は存在しないため、記述方法については他アプリとの互換性はないそうです、
   作曲や打ち込みの経験のある方だとより深く楽しめそうですね

上記設定後、sionDriver.play(kaeruData);で音を鳴らせます。

 
 


【STEP2 音にあわせてMCを動かす】

続いて発音に合わせてMCを動かす方法を説明します。
カエルの口をパクパクさせてましょう。
発音のタイミングをリスナーイベントでキャッチできますので
それにあわせてカエルMCをうごかします。

イベントの種類について
●全体に関するイベント
 SIONEventで設定
 「ストリーミング中/開始/終了、コンパイル中/終了、フェード開始/終了、MML演奏終了」
 などの通知を受け取ることができる。
 今回はMML演奏終了のイベントを使用します。

●演奏中に関する通知
 SIONTrackEventで設定
 「発音/消音イベント、表紙イベント、テンポ変更イベント」
 などの通知を受け取ることができる。
 今回は発音、消音のイベントを使用します。

それでは順を追って下記に説明します。

1)カエルMCの用意、配列に格納
 ・カエルのMCを用意し2フレーム目に口を開けた絵をおきましょう
  カエルMCを使用する音階分コピーしステージに配置し、インスタンス名(Do~Shi)をつけます。
  発音のタイミングで各MCにアクセスしやすいように配列に格納しておきます。
  KaeruList = [Do,DoSharp,Re,ReSharp,Mi,Fa,FaSharp,So,SoSharp,Ra,RaSharp,Shi];

2)ドライバの設定
 sionDriver = new SiONDriver(2048,2);

 ・第一引数にバッファの数値(2048 4096 8192のいずれか)を設定します
  2048を設定すると、クリック音などユーザーアクションに反応させる音の反応は早いが、合成処理は安定しない
  8192の場合はその逆  
 ・第二引数はチャンネル設定、モノラル(1)ステレオ(2)
  ※どちらを設定してもパフォーマンスに影響はない、普通は(2)を設定する

3)SiONDataにイベントを設定(%t0,1,1)
 ・第一引数 ID
 ・第二引数 発音イベントの種類 //0=発行しない 1=発行する
 ・第三引数 消音イベントの種類 //0=発行しない 1=発行する
  ID:0で発音、消音のイベントを発行する例)「%t0,1,1 」

4)イベントリスナーを登録
 各イベントを登録します。
 ・拍子   sionDriver.addEventListener(SiONTrackEvent.BEAT,_onBeat);
 ・発音   sionDriver.addEventListener(SiONTrackEvent.NOTE_ON_FRAME,_onNoteOn);
 ・消音   sionDriver.addEventListener(SiONTrackEvent.NOTE_OFF_FRAME,_onNoteOFF);
 ・演奏終了 sionDriver.addEventListener(SiONEvent.FINISH_SEQUENCE,_onFinishSequence);
 ・SiONTrackEvent.BEATイベントの発行間隔を設定 1~16 
       sionDriver.setBeatCallbackInterval(4);

 あとは関数に実行したい内容(カエルの口をあける、閉じる、波紋を動かす)を記述して完成ですね。

Get Adobe Flash player


 
 


【STEP3 鍵盤を作る!】

STEP2のカエルMCを鍵盤に見立てて ド~シの音を割り当ててクリックで鳴らせるように
したいと思います。
それでは順を追って説明します。

1)カエルMCにノートナンバー、マウスイベントの設定。

 for (i = 0; i < kaeruList.length; i++)  {  //MIDIノートナンバーは、60から開始される  kaeruList[i].noteNumber = i + 60;  //マウスイベント設定  kaeruList[i].addEventListener(MouseEvent.CLICK,_onClick);  kaeruList[i].buttonMode = true;  } 2) プリセット音色リストの生成  presetVoiceList = new SiONPresetVoice ;  pianoVoice = presetVoiceList["midi.piano1"];  プリセット音色の一覧 http://www.inazumatv.com/contents/archives/3623

3)クリック時の、発音、音量などの設定。

 private function _onClick(e:MouseEvent):void
 {
 // クリックされたカエルインスタンスの取得
 var kaeru:MovieClip = e.target as MovieClip;
 // ノートナンバーの取得
 var noteNumber:int = kaeru.noteNumber;

 //指定番号を発音
 sionDriver.noteOn(noteNumber,pianoVoice,4,0,0);

 kaeru.gotoAndStop(2);

 // 指定ノート番号の音を発音.発音するトラックを返値で取得
 track = sionDriver.noteOn(noteNumber,pianoVoice,4,0,0);

 // トラックのイベントトリガーの設定 (ID、発音設定、消音設定)
 track.setEventTrigger(0,1,1);

 //音量
 //
 track.velocity = 128;

 }

 その他に、track:SiMMLTrackでエフェクタ、左右バランス、音程、減衰のタイミング、合成などを設定できるようです。
 

※下の例では、カエルクリックとキー操作(z,s,x,d,c,v,g,b,h,n,j,m)で音が出るようにしました。
【ピアノの音色 ”midi.piano1″ を設定】

Get Adobe Flash player

【ドラムの音色 ”midi.drum24″ を設定】

Get Adobe Flash player

音色の設定をもっと自在にいじれるようになると楽しいと思います。
MP3などの音源を設定して犬猫の音声に音階をつけたりして遊べるみたいです。
今回はそこまで到達できませんでした、、、すみません

ディスプレイオブジェクトとの連動はキャンペーン用のサイトなどで使ったら楽しいんじゃないかなぁと思いました。
完全にこのライブラリを使いこなすには、MIDIや作曲の知識などが必須ですが、
にぎやかしの一環として使うのであれば知識が無くても有効に使えるかもしれないとも
思いました。

※今回使用したサンプルファイル