外部soundファイルのロード・個人的メモ

2010 年 2月 22 日

This movie requires Flash Player 10.0.0

外部のサウンドファイルをいじくるような案件はこれまであまりなかったのですが、「外部APIで生成されたサウンドファイルをロードしては再生、ロードしては再生・・・」というような案件がまもなくやってくるというので、個人的な予習とメモ。
「押されたボタンに対応したサウンドファイルをロードしてきて、ロードが完了したら再生」というミッションですが、あるサウンドファイルのロード中に他のサウンドファイルをロードする場合も考えられるので、そこをケアするには、データのロードを中止する Sound.close() を使います。
 
 
● Sound.close()
指定されたサウンドファイルをロードする前に、現在ロード中であろうが、ロード中でなかろうが、この close() を実行したいところですが、ロード中でない場合に close() を実行するとエラーをはくので、

Actionscript:
  1. try {soundIns.close();}
  2. catch (error:IOError) { }

としてあげれば大丈夫。
 
 
● Soundインスタンスに違うサウンドファイルをload()できない。

Actionscript:
  1. soundIns = new Sound();

として、ロードするタイミングに、

Actionscript:
  1. soundIns.load(sound_url_requerst);

としようとしたら、アウト。リファレンスにばっちり、

Sound オブジェクトで load() が呼び出された後は、その Sound オブジェクトに別のサウンドファイルをロードすることはできません。別のサウンドファイルをロードするには、新しい Sound オブジェクトを作成します。

とありましたので、毎回newすることにしました、はい。

Actionscript:
  1. soundIns = new Sound();
  2. soundIns.addEventListener(ProgressEvent.PROGRESS, soundLoadProgress);
  3. soundIns.addEventListener(Event.COMPLETE, soundLoadComplete);
  4. soundIns.load(url_req);

こんな感じで addEventListener も new したあとに毎回つけてあげます。
 
 
あとは、再生される音を止めるのは、SoundChannel(sound.play()の返り値)。感覚的には、soundにplay()があって、なぜにstop()がないのだ!と思ってしまいます。しかし、こういったASの記事書くの久しぶりだなぁ。

Leave a Reply