埋め込みサウンドの操作

Flash Player 9 以降、Adobe AIR 1.0 以降

外部ファイルからサウンドをロードする代わりに埋め込みサウンドを使用することは、ボタンがクリックされたときに再生されるサウンドなど、アプリケーションのユーザーインターフェイス内のインジケーターとして使用される小さなサウンドに非常に便利です。

アプリケーションにサウンドファイルを埋め込むと、その結果として生成される SWF ファイルのサイズが、サウンドファイルの分だけ増加します。 つまり、アプリケーションに大きなサウンドファイルを埋め込むと、SWF ファイルが望ましくないサイズに増加する可能性があるということです。

アプリケーションの ファイルにサウンドファイルを埋め込む厳密な方法は、SWF の開発環境によって異なります。

Flash での埋め込みサウンドファイルの使用

Flash オーサリングツールでは、複数のサウンド形式のサウンドを読み込んで、ライブラリにシンボルとして格納できます。 保存したサウンドは、タイムラインのフレームやボタン状態のフレームに割り当てる、ビヘイビアーで使用する、ActionScript コードで直接使用する、というように使用できます。 この節では、Flash オーサリングツールで ActionScript コードを処理する際に埋め込みサウンドを使用する方法について説明します。 Flash で埋め込みサウンドを使用するその他の方法について詳しくは、『Flash ユーザーガイド』の「サウンドの読み込み」を参照してください。

Flash オーサリングツールを使用してサウンドファイルを埋め込むには:

  1. ファイル/読み込み/ライブラリに読み込みを選択し、サウンドファイルを選択して読み込みます。

  2. ライブラリパネルで読み込んだファイルの名前を右クリックし、「プロパティ」を選択します。「ActionScript に書き出し」チェックボックスをクリックします。

  3. 「クラス」フィールドに、ActionScript でこの埋め込みサウンドを参照する際に使う名前を入力します。 デフォルトでは、このフィールド内のサウンドファイル名が使用されます。 「DrumSound.mp3」のようにファイル名にピリオドが含まれている場合は、「DrumSound」のように変更する必要があります。ActionScript では、クラス名でピリオドを使用できません。「基本クラス」フィールドには引き続き flash.media.Sound と表示されます。

  4. 「OK」をクリックします。このクラスの定義がクラスパスで見つからなかったことを示すダイアログボックスが表示される場合もあります。 「OK」をクリックして続行します。 アプリケーションのクラスパスに含まれるいずれのクラス名とも一致しないクラス名を入力した場合は、flash.media.Sound クラスから継承する新しいクラスが自動的に生成されます。

  5. 埋め込まれているサウンドを使用するには、そのサウンドのクラス名を ActionScript で参照します。例えば、次のコードでは最初に、自動生成された DrumSound クラスの新しいインスタンスが作成されます。

    var drum:DrumSound = new DrumSound(); 
    var channel:SoundChannel = drum.play();

    DrumSound は、flash.media.Sound クラスのサブクラスなので、上記のとおり play() メソッドを含む Sound クラスのメソッドとプロパティを継承します。

Flex での埋め込みサウンドファイルの使用

Flex アプリケーションにサウンドアセットを埋め込むには、次のような様々な方法があります。

  • スクリプトで [Embed] メタデータタグを使用する

  • MXML で @Embed ディレクティブを使用して、Button、SoundEffect などのコンポーネントのプロパティとして埋め込みアセットを割り当てる

  • CSS ファイルで @Embed ディレクティブを使用する

この節では、最初の、 [Embed] メタデータタグを使用して、Flex アプリケーション内の ActionScript コードにサウンドを埋め込む方法を説明します。

ActionScript コードにアセットを埋め込むには、 [Embed] メタデータタグを使用します。

サウンドファイルを、メインソースフォルダーまたはプロジェクトのビルドパスにある別のフォルダーに配置します。 コンパイラーで埋め込みメタデータタグが検出されると、自動的に埋め込みアセットクラスが作成されます。 このクラスには、 [Embed] メタデータタグの直後に宣言するデータ型クラスの変数からアクセスできます。

次のコードでは、smallSound.mp3 というサウンドを埋め込み、 soundClass という変数を使用して、サウンドに関連付けられている埋め込みアセットクラスへの参照を格納します。次に、埋め込みアセットクラスのインスタンスを作成して、Sound クラスのインスタンスとしてキャストし、そのインスタンスで play() メソッドを呼び出します。

package 
{ 
    import flash.display.Sprite; 
    import flash.media.Sound; 
    import flash.media.SoundChannel; 
 
    public class EmbeddedSoundExample extends Sprite 
    { 
        [Embed(source="smallSound.mp3")] 
        public var soundClass:Class; 
         
        public function EmbeddedSoundExample() 
        { 
            var smallSound:Sound = new soundClass() as Sound; 
            smallSound.play(); 
        } 
    } 
}

埋め込みサウンドを使用して Flex コンポーネントのプロパティを設定するには、Sound クラスのインスタンスとしてではなく、mx.core.SoundAsset クラスのインスタンスとしてキャストする必要があります。SoundAsset クラスを使用する同様の例については、『ActionScript 3.0 の学習』の「埋め込みアセットクラス」を参照してください。