パッケージflash.media
クラスpublic class Sound
継承Sound Inheritance EventDispatcher Inheritance Object
サブクラス SoundAsset

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

Sound クラスを使用すると、アプリケーション内のサウンドを処理することができます。Sound クラスを使用すると、Sound オブジェクトの作成や、外部 MP3 ファイルのオブジェクトへのロードと再生ができます。また、サウンドストリームを閉じたり、サウンド関連のデータ (ストリームおよび ID3 メタデータのバイト数などの情報) にアクセスしたりできます。サウンドのサウンドソース(SoundChannel オブジェクトまたは Microphone オブジェクト)と、コンピュータのスピーカーへのサウンド出力を制御する SoundTransform クラスのプロパティを使用して、サウンドを詳細に制御できます。

Flash Player 10 以降および AIR 1.5 以降では、このクラスを使用して、動的に生成されたサウンドを処理することもできます。この場合、sampleData イベントハンドラに割り当てた関数が Sound オブジェクトでサウンドデータのポーリングに使用されます。サウンドは、サウンドデータに設定された ByteArray オブジェクトから取得され、再生されます。Sound.extract() を使用すると、Sound オブジェクトからサウンドデータを抽出できます。抽出したサウンドデータは、ストリームに書き戻して再生する前に処理できます。

SWF ファイルに埋め込まれたサウンドを制御するには、SoundMixer クラスのプロパティを使用します。

メモ : ActionScript 3.0 の Sound API は、ActionScript 2.0 とは異なります。ActionScript 3.0 では、取得して階層内に配置した Sound オブジェクトのプロパティを制御することができません。

このクラスを使用するときは、次のセキュリティモデルを考慮してください。

ただし、Adobe AIR では、application セキュリティサンドボックス内のコンテンツ(AIR アプリケーションと共にインストールされたコンテンツ)は、これらのセキュリティ制限による制限を受けません。

セキュリティ情報について詳しくは、以下を参照してください。

例を表示

関連項目

flash.net.NetStream
Microphone
SoundChannel
SoundMixer
SoundTransform
Basics of working with sound


パブリックプロパティ
 プロパティ定義元
  bytesLoaded : uint
[読み取り専用] この Sound オブジェクトで現在利用できるデータのバイト数を返します。
Sound
  bytesTotal : int
[読み取り専用] この Sound オブジェクトの合計バイト数を返します。
Sound
 Inheritedconstructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  id3 : ID3Info
[読み取り専用] MP3 ファイルの一部であるメタデータに対するアクセスを提供します。
Sound
  isBuffering : Boolean
[読み取り専用] 外部 MP3 ファイルのバッファリング状態を返します。
Sound
  length : Number
[読み取り専用] 現在のサウンドの継続時間を示すミリ秒数です。
Sound
 Inheritedprototype : Object
[静的] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
  url : String
[読み取り専用] サウンドがロードされる URL です。
Sound
パブリックメソッド
 メソッド定義元
  
Sound(stream:URLRequest = null, context:SoundLoaderContext = null)
新しい Sound オブジェクトを作成します。
Sound
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
EventDispatcher
  
ストリームを閉じて、データのダウンロードを中止します。
Sound
 Inherited
イベントをイベントフローに送出します。
EventDispatcher
  
extract(target:ByteArray, length:Number, startPosition:Number = -1):Number
Sound オブジェクトから生のサウンドデータを抽出します。
Sound
 Inherited
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 Inherited
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 Inherited
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
  
load(stream:URLRequest, context:SoundLoaderContext = null):void
指定した URL から外部 MP3 ファイルのロードを開始します。
Sound
  
play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel
サウンドを再生する SoundChannel オブジェクトを新しく作成します。
Sound
 Inherited
指定されたプロパティが存在し、列挙できるかどうかを示します。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
 Inherited
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 Inherited
指定されたオブジェクトのストリング表現を返します。
Object
 Inherited
指定されたオブジェクトのプリミティブな値を返します。
Object
 Inherited
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
イベント
 イベント 概要 定義元
 Inherited[ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。EventDispatcher
  データが正常にロードされたときに送出されます。Sound
 Inherited[ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。EventDispatcher
  MP3 サウンドで ID3 データを使用できる場合に、Sound オブジェクトによって送出されます。Sound
  入出力エラーが発生して読み込み操作が失敗したときに送出されます。Sound
  読み込み操作が開始したときに送出されます。Sound
  ロード処理の実行中にデータを受信したときに送出されます。Sound
  Flash Player が新しいオーディオデータを要求するときに送出されます。Sound
プロパティの詳細
bytesLoadedプロパティ
bytesLoaded:uint  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

この Sound オブジェクトで現在利用できるデータのバイト数を返します。このプロパティは、通常、外部から読み込むファイルのみに使用します。



実装
    public function get bytesLoaded():uint
bytesTotalプロパティ 
bytesTotal:int  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

この Sound オブジェクトの合計バイト数を返します。



実装
    public function get bytesTotal():int
id3プロパティ 
id3:ID3Info  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

MP3 ファイルの一部であるメタデータに対するアクセスを提供します。

MP3 サウンドファイルには、ファイルについてのメタデータを示す ID3 タグを含めることができます。Sound.load() メソッドを使用してロードした MP3 サウンドに ID3 タグが含まれる場合は、これらのプロパティを調べることができます。サポートされているのは、UTF-8 文字セットを使用する ID3 タグだけです。

では、ID3 2.0 (厳密には 2.3 および 2.4) のタグをサポートしています。次の表に、標準の ID3 2.0 タグと、そのタグが表すコンテンツタイプを示します。Sound.id3 プロパティでは、my_sound.id3.COMMmy_sound.id3.TIME などの形式を使用してこれらのタグにアクセスできます。最初の表は、ID3 2.0 プロパティ名または ActionScript プロパティ名のいずれかを使用してアクセスできるタグを示します。2 番目の表は、サポートされているものの、ActionScript に定義済みのプロパティが存在しない ID3 タグを示します。

ID3 2.0 タグ対応する Sound クラスプロパティ
COMMSound.id3.comment
TALBSound.id3.album
TCONSound.id3.genre
TIT2Sound.id3.songName
TPE1Sound.id3.artist
TRCKSound.id3.track
TYERSound.id3.year

次の表は、サポートされているものの、Sound クラスに定義済みのプロパティが存在しない ID3 タグを示します。これらのタグにアクセスするには、mySound.id3.TFLTmySound.id3.TIME などを呼び出します。

プロパティ説明
TFLTファイル形式
TIME時刻
TIT1内容の属するグループの説明
TIT2タイトル/曲名/内容の説明
TIT3サブタイトル/説明の追加情報
TKEY最初の調
TLAN言語
TLEN長さ
TMEDメディアタイプ
TOALオリジナルのアルバム/ムービー/ショーのタイトル
TOFNオリジナルのファイル名
TOLYオリジナルの作詞家/文書作成者
TOPEオリジナルのアーティスト/演奏者
TORYオリジナルのリリース年
TOWNファイルの所有者/ライセンス保持者
TPE1主な演奏者/ソリスト
TPE2バンド/オーケストラ/伴奏
TPE3指揮者/演奏者詳細情報
TPE4翻訳、リミックス、その他の修正を行った人
TPOSセット中の位置
TPUB発行者
TRCKトラック番号/セット内の位置
TRDA録音日
TRSNインターネットラジオ局の名前
TRSOインターネットラジオ局の所有者
TSIZサイズ
TSRCISRC (国際標準録音資料コード)
TSSEエンコードに使用したソフトウェア/ハードウェアと設定
TYER
WXXXURL リンクフレーム

このプロパティを使用するときは、Flash Player セキュリティモデルを考慮してください。

ただし、Adobe AIR では、application セキュリティサンドボックス内のコンテンツ(AIR アプリケーションと共にインストールされたコンテンツ)は、これらのセキュリティ制限による制限を受けません。

セキュリティ情報について詳しくは、以下を参照してください。



実装
    public function get id3():ID3Info

関連項目



次の例では、サウンドファイルから ID3 情報を読み取り、テキストフィールドに表示します。

コンストラクタで、サウンドファイルがロードされますが、再生するように設定されていません。ここでは、ファイルが SWF ディレクトリにあると想定しています。ロードされるサウンドファイルの ID3 タグを読み取るために、システムにアクセス権がある必要があります。ファイル内に 情報が存在し、プログラムに読み取ることが許可されている場合、Event.ID3 イベントが送出され、サウンドファイルの id3id3 プロパティに値が設定されます。id3 プロパティには、すべての 情報を持つ ID3InfoID3 オブジェクトが格納されています。

id3Handler() メソッドで、ファイルの ID3 タグが ID3Info クラスのオブジェクトである id3 に保存されます。テキストフィールドがインスタンス化され、ID3 タグの一覧が表示されます。for ループによってすべての ID3 2.0 タグが繰り返し処理され、テキストフィールドの内容に名前と値が追加されます。(ID3InfoID3Info)プロパティを使用して、アーティスト、曲名、およびアルバムも追加されます。ActionScript 3.0 および Flash Player 9 以降では、ID3 2.0 タグ、特に 2.3 と 2.4 がサポートされます。この for ループのようにプロパティの反復処理を実行すると、ID3 2.0 タグだけが表示されます。ただし、以前のバージョンからのデータも曲の id3 プロパティに保存され、ID3 info クラスのプロパティを使用してアクセスできます。ID3 1.0 のタグはファイルに末尾にあります。一方、ID3 2.0 タグはファイルの先頭にあります。以前のバージョンと最新バージョンのタグがファイルの同じ場所にある場合があります。ファイルが、ファイルの先頭と末尾にあるバージョン 1.0 タグと 2.0 タグの両方でエンコードされている場合、id3Handler() メソッドが 2 回呼び出されます。最初にバージョン 2.0 が読み込まれ、次にバージョン 1.0 が読み込まれます。 1.0 タグだけが使用できる場合、id3.songnameid3. などと記述して、ID3 info プロパティを介して情報にアクセスできます。 2.0 では、新しいタグ()を使用して id3.TITSid3.TITS プロパティによって曲名が取得されます。

この例にはエラー処理の記述がないため、ID3 の内容が長い場合、結果が表示可能領域を超える場合があります。

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.media.ID3Info;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.Event;

    public class Sound_id3Example extends Sprite {
        private var snd:Sound = new Sound();       
        private var myTextField:TextField = new TextField();

        public function Sound_id3Example() {
            snd.addEventListener(Event.ID3, id3Handler);
            snd.load(new URLRequest("mySound.mp3"));
        }
    
        private function id3Handler(event:Event):void {
            var id3:ID3Info = snd.id3;

            myTextField.autoSize = TextFieldAutoSize.LEFT;
            myTextField.border = true;

            myTextField.appendText("Received ID3 Info: \n");
              
            for (var propName:String in id3) {
                myTextField.appendText(propName + " = " + id3[propName] + "\n");
            }
 
            myTextField.appendText("\n" + "Artist: " + id3.artist + "\n");
            myTextField.appendText("Song name: " + id3.songName + "\n");
            myTextField.appendText("Album: " + id3.album + "\n\n"); 
 
            this.addChild(myTextField);
        }
    }
}
isBufferingプロパティ 
isBuffering:Boolean  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

外部 MP3 ファイルのバッファリング状態を返します。値が true の場合、再生は現在中断され、オブジェクトがデータを待機しています。



実装
    public function get isBuffering():Boolean
lengthプロパティ 
length:Number  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

現在のサウンドの継続時間を示すミリ秒数です。



実装
    public function get length():Number
urlプロパティ 
url:String  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

サウンドがロードされる URL です。このプロパティは Sound.load() メソッドを使用してロードされた Sound オブジェクトにのみ適用できます。SWF ファイルのライブラリのサウンドアセットに関連付けられた Sound オブジェクトでは、url プロパティの値は null です。

初めて Sound.load() を呼び出す際は最終的な URL が不明なため、url プロパティの初期値は null になります。url プロパティは、Sound オブジェクトから open イベントが送出されると同時に、null 以外の値になります。

url プロパティには、サウンドがロードされる元の最終的な絶対 URL が格納されます。url の値は、通常 stream パラメータ(Sound.load()())に渡される値と同じです。ただし、Sound.load() に相対 URL を渡しても、url プロパティの値は絶対 URL を表します。また、元の 要求が HTTP サーバーによってリダイレクトされると、urlurl プロパティの値はサウンドファイルが実際にダウンロードされた URL を示します。この最終的な絶対 URL の報告は、LoaderInfo.url の動作と同じです。



実装
    public function get url():String

関連項目

コンストラクタの詳細
Sound()コンストラクタ
public function Sound(stream:URLRequest = null, context:SoundLoaderContext = null)

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

新しい Sound オブジェクトを作成します。Sound コンストラクタに有効な URLRequest オブジェクトを渡すと、コンストラクタは自動的に Sound オブジェクトの load() 関数を呼び出します。Sound コンストラクタに有効な URLRequest オブジェクトを渡さない場合は、ユーザー自身が Sound オブジェクトの load() 関数を呼び出す必要があります。呼び出さないと、ストリームがロードされません。

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

Flash Player 10 以降および AIR 1.5 以降では、load() の代わりに sampleData イベントハンドラを使用して、サウンドを Sound オブジェクトに動的にロードできます。

パラメータ
stream:URLRequest (default = null) — 外部の MP3 ファイルを指定する URL です。
 
context:SoundLoaderContext (default = null) — オプションの SoundLoader コンテキストオブジェクトです。これは、バッファ時間 (Sound オブジェクトのバッファに保持する MP3 データのミリ秒単位の最小数) を定義でき、また、アプリケーションがサウンドをロードする前にクロスドメインポリシーを確認すべきかどうかを指定できます。
メソッドの詳細
close()メソッド
public function close():void

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

ストリームを閉じて、データのダウンロードを中止します。close() メソッドの呼び出し後は、ストリームからデータを読み込みません。


例外
IOError — ストリームを閉じることができないか、またはストリームが開いていません。



次の例では、ユーザーが「停止」ボタンをクリックしたときに、Sound.close() メソッドが呼び出され、サウンドがストリーミングを停止します。

コンストラクタで、[開始] ボタンおよび [停止] ボタン用のテキストフィールドが作成されます。ユーザーがテキストフィールドをクリックすると、clickHandler() メソッドが呼び出されます。このメソッドは、サウンドファイルの開始と停止を処理します。ネットワーク接続によって、またはユーザーが [停止] ボタンを押したときにファイルの多くがロードされてしまっているため、サウンドファイルの再生を停止するのにしばらく時間がかかる場合があります。ストリームを閉じている間に発生する可能性のある IO エラーをキャッチするために、try...catch ブロックが使用されます。例えば、サウンドがローカルディレクトリからロードされ、ストリームされない場合、エラー 2029 がキャッチされ、"この URLStream オブジェクトには開いているストリームがありません" というメッセージが表示されます。

 
package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;    
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
    import flash.errors.IOError;
    import flash.events.IOErrorEvent;

    public class Sound_closeExample extends Sprite {
        private var snd:Sound = new Sound();
        private var button:TextField = new TextField();
        private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
        
        public function Sound_closeExample() {
            button.x = 10;
            button.y = 10;
            button.text = "START";
            button.border = true;
            button.background = true;
            button.selectable = false;
            button.autoSize = TextFieldAutoSize.LEFT;

            button.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(button);
        }

        private function clickHandler(e:MouseEvent):void {

            if(button.text == "START") {

                snd.load(req);
                snd.play();        

                snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

                button.text = "STOP";
            }
            else if(button.text == "STOP") {
                    
                try {
                    snd.close();
                    button.text = "Wait for loaded stream to finish.";
                }
                catch (error:IOError) {
                    button.text = "Couldn't close stream " + error.message;    
                }
            }
        }
        
        private function errorHandler(event:IOErrorEvent):void {
                button.text = "Couldn't load the file " + event.text;
        }
    }
}


extract()メソッド 
public function extract(target:ByteArray, length:Number, startPosition:Number = -1):Number

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

Sound オブジェクトから生のサウンドデータを抽出します。

このメソッドは、動的に生成されたオーディオを処理する場合に、別の Sound オブジェクトの sampleData イベントに割り当てられた関数を使って使用するように設計されています。つまり、このメソッドを使用して Sound オブジェクトからサウンドデータを抽出できます。次に、別の Sound オブジェクトによってダイナミックオーディオのストリーミングに使用されているバイト配列に、そのデータを書き込むことができます。

オーディオデータは、対象のバイト配列に、現在の位置から配置されます。オーディオデータは、通常、44,100 Hz ステレオで公開されます。サンプルの型は 32 ビット浮動小数値で、ByteArray.readFloat() () を使用して Number に変換できます。

パラメータ

target:ByteArray — 抽出されるサウンドサンプリングの配置先の ByteArray オブジェクトです。
 
length:Number — 抽出するサウンドサンプリングの数です。サンプルには、2 つの 32 ビット浮動小数点数を意味する左チャンネルと右チャンネルがあります。
 
startPosition:Number (default = -1) — 抽出を開始するサンプルです。値を指定しない場合、Sound.extract() の最初の呼び出しはサウンドの先頭から開始され、startPosition の値が設定されていない後続の呼び出しでは、ファイル全体が順に処理されます。

戻り値
Number — Sound オブジェクトで使用できるサンプルの数です。

関連項目




次の例では、mp3 ファイルを読み込み、Sound クラスの extract() メソッドを使用してオーディオデータにアクセスします。

mp3 データは sourceSnd Sound オブジェクト内に読み込まれます。アプリケーションが mp3 データを読み込むと、loaded() 関数が呼び出されます。この関数は、complete イベント(sourceSnd オブジェクトのイベント)のイベントハンドラです。2 番目の Sound オブジェクト outputSound を使用して、変更されたオーディオが再生されます。outputSound オブジェクトには sampleData イベントリスナーがあり、sampleData イベントが定期的に送出されます(このオブジェクトの play() メソッドを呼びだした場合)。upOctave() メソッドは、ソースのオーディオデータに基づいて、変更されたオーディオデータのバイト配列を返します。ソースデータのオーディオサンプルを 1 つおきにスキップすることにより、1 オクターブ高いオーディオが返されます。sampleData イベントのイベントハンドラによって、返されたバイト配列が data プロパティ(outputSound オブジェクトのプロパティ)に書き込まれます。data バイト配列は outputSound オブジェクトの出力オーディオデータに追加されます。

この例をテストするには、test.mp3 ファイルを SWF ファイルと同じディレクトリに追加してください。


var sourceSnd:Sound = new Sound();
var outputSnd:Sound = new Sound();
var urlReq:URLRequest = new URLRequest("test.mp3");

sourceSnd.load(urlReq);
sourceSnd.addEventListener(Event.COMPLETE, loaded);

function loaded(event:Event):void
{
    outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
    outputSnd.play();
}

function processSound(event:SampleDataEvent):void
{
    var bytes:ByteArray = new ByteArray();
    sourceSnd.extract(bytes, 4096);
    event.data.writeBytes(upOctave(bytes));
}

function upOctave(bytes:ByteArray):ByteArray
{
    var returnBytes:ByteArray = new ByteArray();
    bytes.position = 0;
    while(bytes.bytesAvailable > 0)
    {
        returnBytes.writeFloat(bytes.readFloat());
        returnBytes.writeFloat(bytes.readFloat());
        if (bytes.bytesAvailable > 0)
        {
            bytes.position += 8;
        }
    }
    return returnBytes;
}
load()メソッド 
public function load(stream:URLRequest, context:SoundLoaderContext = null):void

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

指定した URL から外部 MP3 ファイルのロードを開始します。Sound コンストラクタに有効な URLRequest オブジェクトを渡すと、コンストラクタは Sound.load() を呼び出します。ユーザー自身で Sound.load() を呼び出す必要があるのは、Sound コンストラクタに有効な URLRequest オブジェクトを渡さない場合、または null 値を渡す場合のみです。

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

このメソッドを使用するときは、次のセキュリティモデルを考慮してください。

Flash Player 10 以降では、"multipart/form-data" などのマルチパート Content-Type にアップロードが含まれていると(アップロードが含まれているかどうかは POST ボディ内の "content-disposition" ヘッダーの "filename" パラメータで示されます)、そのアップロードに適用されるセキュリティ規則によって POST 処理が拘束されます。

また、すべてのマルチパート Content-Type では、RFC2046 標準に準拠した有効なシンタックスを使用する必要があります。シンタックスが有効でない場合は、アップロードに適用されるセキュリティ規則によって POST 処理が拘束されます。

Adobe AIR では、application セキュリティサンドボックス内のコンテンツ(AIR アプリケーションと共にインストールされたコンテンツ)は、これらのセキュリティ制限による制限を受けません。

セキュリティ情報について詳しくは、以下を参照してください。

パラメータ

stream:URLRequest — 外部の MP3 ファイルを指定する URL です。
 
context:SoundLoaderContext (default = null) — オプションの SoundLoader コンテキストオブジェクトです。これは、バッファ時間 (Sound オブジェクトのバッファに保持する MP3 データのミリ秒単位の最小数) を定義でき、また、アプリケーションがサウンドをロードする前にクロスドメインポリシーを確認すべきかどうかを指定できます。


例外
IOError — このロードの失敗原因であるネットワークエラーです。
 
SecurityError — 信頼されていないローカルファイルはインターネットへの接続を許可されません。この問題は、このファイルを local-with-networking または trusted として分類し直すことで回避できます。
 
SecurityError — 一般的な予約ポートに接続しようとしている場合。ブロックされているポートの完全な一覧については、『ActionScript 3.0 のプログラミング』のセキュリティに関する章の「ネットワーク API の制限」を参照してください。
 
IOError digest プロパティ(stream オブジェクトのプロパティ)は null ではありません。RLRequest オブジェクトの digest プロパティを設定できるのは、URLLoader.load() メソッドを呼び出して SWZ ファイル(Adobe プラットフォームコンポーネント)を読み込む場合のみです。
 
SecurityError — 一般的な予約ポートに接続しようとしている場合。ブロックされているポートの完全な一覧については、『ActionScript 3.0 のプログラミング』のセキュリティに関する章の「ネットワーク API の制限」を参照してください。

関連項目




次の例では、サウンドファイルのロードの進行状況を表示します。

コンストラクタで、アドビ システムズ社のポッドキャストであるサウンドファイルの位置を識別する URLRequest オブジェクトが作成されます。ファイルのロード中に発生する可能性のあるエラーをキャッチするために、ファイルが try...catch ブロックにロードされます。IO エラーが発生すると、errorHandler() メソッドも呼び出され、進行状況をレポートするテキストフィールドにエラーメッセージが書き出されます。ロード操作が進行している間に、ProgressEvent.PROGRESS イベントが送出され、progressHandler() メソッドが呼び出されます。ここでは、ProgressEvent.PROGRESS イベントがロードの進行状況を計算するタイマとして使用されます。

progressHandler() メソッドによって、bytesLoaded 値(ProgressEvent オブジェクトで渡される値)が bytesTotal 値で除算され、ロードされるサウンドデータの割合(パーセント)が算出されます。次に、これらの値がテキストフィールドに表示されます。ファイルが小さいか、キャッシュされているか、ローカルディレクトリにある場合、進行状況が目立たない場合があります。

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.ProgressEvent;
    import flash.events.IOErrorEvent;
    
    public class Sound_loadExample extends Sprite {
        private var snd:Sound = new Sound();
        private var statusTextField:TextField  = new TextField();

        public function Sound_loadExample(){

            statusTextField.autoSize = TextFieldAutoSize.LEFT;
            var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
            
            try {
            snd.load(req);
            
            snd.play();
            }
            catch (err:Error) {
                trace(err.message);
            }
 
            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            snd.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                     
            this.addChild(statusTextField);
        }
    
        private function progressHandler(event:ProgressEvent):void {
            var loadTime:Number = event.bytesLoaded / event.bytesTotal;
            var LoadPercent:uint = Math.round(100 * loadTime);
              
            statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" 
                                 + "Bytes being loaded: " + event.bytesLoaded + "\n" 
                                 + "Percentage of sound file that is loaded " + LoadPercent + "%.\n";
        }
 
        private function errorHandler(errorEvent:IOErrorEvent):void {
            statusTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }
    }
}
play()メソッド 
public function play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

サウンドを再生する SoundChannel オブジェクトを新しく作成します。このメソッドは SoundChannel オブジェクトを返します。このオブジェクトにアクセスして、サウンドの停止、およびボリュームの監視を行います。ボリュームの制御、パン、バランスの設定を行うには、サウンドチャンネルに割り当てられた SoundTransform オブジェクトにアクセスします。

パラメータ

startTime:Number (default = 0) — 再生を開始する初期位置 (ミリ秒単位) です。
 
loops:int (default = 0) — サウンドチャネルの再生が停止するまで startTime 値に戻ってサウンドの再生を繰り返す回数を定義します。
 
sndTransform:SoundTransform (default = null) — サウンドチャンネルに割り当てられた初期 SoundTransform オブジェクトです。

戻り値
SoundChannel — サウンドの制御に使用する SoundChannel オブジェクトです。このメソッドは、サウンドカードがない場合、または使用できるサウンドチャンネルが不足した場合は null を返します。一度に使用できるサウンドチャンネルの最大数は 32 チャネルです。

関連項目




次の例では、ファイルがロードされると、グラフィックバーを使用するユーザーは、サウンドファイルの開始位置 (開始時点) を選択できます。

コンストラクタが Sound.load() メソッドを呼び出して、サウンドデータのロードを開始します。次に、Sound.play() メソッドを呼び出して、十分なデータがロードされ次第、サウンドの再生を開始します。Sound.play() メソッドによって、サウンドの再生を制御するために使用される SoundChannel オブジェクトが返されます。テキストフィールドにはユーザーに対する説明が表示されます。ユーザーが再生を開始しようとしているサウンドの内容が確実にロードされているようにするため、ファイルのロードが完了してから bar Sprite オブジェクトが作成され、表示されます。ファイルが正常にロードされると、Event.COMPLETE イベントが送出され、そのイベントによって completeHandler() メソッドがトリガされます。次に、completeHandler() メソッドによってバーが作成され、表示リストに追加されます。インタラクティブ機能をサポートするために、Shape オブジェクトの代わりに Sprite オブジェクトが使用されます。ユーザーがバーをクリックすると、clickHandler() メソッドがトリガされます。

clickHandler() メソッドで、ユーザーがクリックした x 座標の位置 event.localX を使用して、ユーザーがファイルの開始を指定した場所が特定されます。バーは 100 ピクセルであり、x 座標の 100 ピクセルの位置から開始するので、位置の割合(パーセント)は簡単に特定されます。また、ファイルがロードされるため、サウンドファイルの length プロパティに、完全なファイルの長さ (ミリ秒単位) が設定されます。サウンドファイルの長さと行内の位置を使用して、サウンドファイルの開始位置が特定されます。サウンドの再生を停止した後は、選択した開始位置からサウンドファイルの再生が再開されます。この開始位置は startTime パラメータとして play() メソッドに渡されます。

 
package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.MouseEvent;
    import flash.media.Sound;;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.IOErrorEvent;
    
    public class Sound_playExample1 extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel = new SoundChannel();
        private var infoTextField:TextField = new TextField();
    
        public function Sound_playExample1() {

            var req:URLRequest = new URLRequest("MySound.mp3");
            
            infoTextField.autoSize = TextFieldAutoSize.LEFT;
            infoTextField.text = "Please wait for the file to be loaded.\n" 
                                + "Then select from the bar to decide where the file should start.";
            
            snd.load(req);               
            channel = snd.play();

            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            snd.addEventListener(Event.COMPLETE, completeHandler);


            this.addChild(infoTextField);
        }

        private function completeHandler(event:Event):void {                
            infoTextField.text = "File is ready.";

            var bar:Sprite = new Sprite();

            bar.graphics.lineStyle(5, 0xFF0000);
            bar.graphics.moveTo(100, 100);
            bar.graphics.lineTo(200, 100);

            bar.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(bar);
        }
    
        private function clickHandler(event:MouseEvent):void {
            
                var position:uint = event.localX;
                var percent:uint = Math.round(position) - 100;   
                var cue:uint = (percent / 100) * snd.length;

                channel.stop();
                channel = snd.play(cue);    
        }

        private function errorHandler(errorEvent:IOErrorEvent):void {
            infoTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }
    }
}

次の例では、ユーザーがボタンをシングルクリックするか、ダブルクリックするかに応じて、サウンドを 1 回または 2 回再生します。

コンストラクタで、サウンドがロードされ、単純な矩形の button Sprite オブジェクトが作成されます。インタラクティブ機能をサポートするために、Shape オブジェクトの代わりに Sprite オブジェクトが使用されます。ここでは、サウンドファイルが SWF ファイルと同じディレクトリにあると想定しています。この例には、エラー処理コードはありません。

マウスのシングルクリックとダブルクリックに応答するために、2 つのイベントリスナーが設定されます。ユーザーがボタンをシングルクリックすると、clickHandler() メソッドが呼び出され、サウンドが再生されます。ユーザーがボタンをダブルクリックすると、doubleClickHandler() メソッドが呼び出され、サウンドファイルが 2 回再生されます。play() メソッドの 2 番目の引数が 1 に設定されます。これは、サウンドが開始時点に 1 回ループバックされ、再び再生されることを意味します。1 つ目の引数(開始時点)は 0 に設定されます。これは、ファイルが最初から再生されることを意味します。

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.net.URLRequest;

    public class Sound_playExample2 extends Sprite {
        private var button:Sprite = new Sprite(); 
        private var snd:Sound = new Sound();
            
        public function Sound_playExample2() {

            var req:URLRequest = new URLRequest("click.mp3");
            snd.load(req);               
     
            button.graphics.beginFill(0x00FF00);
            button.graphics.drawRect(10, 10, 50, 30);
            button.graphics.endFill();
     
            button.addEventListener(MouseEvent.CLICK, clickHandler);
            button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler);
     
            this.addChild(button);
        }

        private function clickHandler(event:MouseEvent):void {
            snd.play();            
        }

        private function doubleClickHandler(event:MouseEvent):void {
            snd.play(0, 2);        
        }
    }
}

次の例では、サウンドファイルのロードと再生の進行状況を表示します。

コンストラクタで、ファイルのロード中に発生する可能性のあるエラーをキャッチするために、ファイルが try...catch ブロックにロードされます。IOErrorEvent イベントに応答するサウンドオブジェクトに、errorHandler() メソッドを呼び出すことでリスナーが追加されます。もう 1 つのリスナーが Event.ENTER_FRAME イベントに応答するメインアプリケーションに追加されます。このイベントは、再生の進行状況を表示するタイミング制御メカニズムとして使用されます。最後に、(サウンドの再生が終了したとき)soundCompleteHandler() イベントに応答するサウンドチャンネルに、Event.SOUND_COMPLETE メソッドを呼び出すことで 3 番目のリスナーが追加されます。soundCompleteHandler() メソッドによって、Event.ENTER_FRAME イベントのイベントリスナーの削除も実行されます。

enterFrameHandler() メソッドによって、bytesLoaded 値(ProgressEvent オブジェクトで渡される値)が bytesTotal 値で除算され、ロードされるサウンドデータの割合(パーセント)が算出されます。再生されるサウンドデータの割合 (パーセント) は、サウンドチャンネルの position プロパティの値をサウンドデータの長さで除算することで算出される場合があります。ただし、サウンドデータが完全にロードされていない場合、サウンドオブジェクトの length プロパティは、現在ロードされているサウンドデータのみのサイズを表示します。完全なサウンドファイルの最終的なサイズの推定値は、現在のサウンドオブジェクトの length の値を bytesLoaded プロパティの値で除算してから、bytesTotal プロパティの値で除算することで算出されます。

ファイルが小さいか、キャッシュされているか、ローカルディレクトリにある場合、ロードの進行状況が目立たない場合があります。また、サウンドデータのロードが開始されてから、ロードされたデータの再生が開始されるまでの遅延時間は、SoundLoaderContext.buffertime プロパティの値によって指定されます。この値は、デフォルトで 1000 ミリ秒であり、リセットできます。

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    
    public class Sound_playExample3 extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel;
        private var statusTextField:TextField  = new TextField();

        public function Sound_playExample3(){

            statusTextField.autoSize = TextFieldAutoSize.LEFT;

           var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
            
            try {
                snd.load(req);
            
                channel = snd.play();
            }
            catch (err:Error) {
                trace(err.message);
            }
                    
            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
                    
            this.addChild(statusTextField);
        }
    
        private function enterFrameHandler(event:Event):void {    
            var loadTime:Number = snd.bytesLoaded / snd.bytesTotal;
            var loadPercent:uint = Math.round(100 * loadTime);
            var estimatedLength:int = Math.ceil(snd.length / (loadTime));
            var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength));
      
            statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" 
                                   + "Bytes being loaded: " + snd.bytesLoaded + "\n" 
                                   + "Percentage of sound file that is loaded " + loadPercent + "%.\n"
                                   + "Sound playback is " + playbackPercent + "% complete.";     
        }
 
        private function errorHandler(errorEvent:IOErrorEvent):void {
            statusTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }

        private function soundCompleteHandler(event:Event):void {
            statusTextField.text = "The sound has finished playing.";
            removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
    }
}
イベントの詳細
complete イベント
イベントオブジェクトの型: flash.events.Event
プロパティ Event.type = flash.events.Event.COMPLETE

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

データが正常に読み込まれたときに送出されます。

Event.COMPLETE 定数は、type プロパティ(complete イベントオブジェクト)の値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
targetロードが完了したネットワークオブジェクトです。

関連項目

id3 イベント  
イベントオブジェクトの型: flash.events.Event
プロパティ Event.type = flash.events.Event.ID3

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

MP3 サウンドで ID3 データを使用できる場合に、Sound オブジェクトによって送出されます。

Event.ID3 定数は、type プロパティ(id3 イベントオブジェクト)の値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
targetID3 データが現在使用可能な MP3 をロードしている Sound オブジェクトです。target は、必ずしもイベントリスナーを登録した表示リスト内のオブジェクトとは限りません。現在イベントを処理している表示リスト内のオブジェクトにアクセスするには、currentTarget プロパティを使用します。

関連項目

ioError イベント  
イベントオブジェクトの型: flash.events.IOErrorEvent
プロパティ IOErrorEvent.type = flash.events.IOErrorEvent.IO_ERROR

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

入出力エラーが発生して読み込み操作が失敗したときに送出されます。

type プロパティ (ioError イベントオブジェクト) の値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
errorID特定のエラーに関連付けられた参照番号です(AIR のみ)。
target入出力エラーが発生したネットワークオブジェクトです。
textエラーメッセージとして表示されるテキストです。

関連項目

open イベント  
イベントオブジェクトの型: flash.events.Event
プロパティ Event.type = flash.events.Event.OPEN

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

読み込み操作が開始したときに送出されます。

Event.OPEN 定数は、type プロパティ(open イベントオブジェクト)の値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
target接続をオープンしたネットワークオブジェクトです。

関連項目

progress イベント  
イベントオブジェクトの型: flash.events.ProgressEvent
プロパティ ProgressEvent.type = flash.events.ProgressEvent.PROGRESS

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

ロード処理の実行中にデータを受信したときに送出されます。

type プロパティ (progress イベントオブジェクト) の値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
bytesLoadedリスナーがイベントを処理しているときにロードされたアイテム数またはバイト数です。
bytesTotalロードプロセスが成功した場合に最終的にロードされるアイテムまたはバイトの総数です。
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
target進行状況をレポートする オブジェクトです。

関連項目

sampleData イベント  
イベントオブジェクトの型: flash.events.SampleDataEvent
プロパティ SampleDataEvent.type = flash.events.Event.SAMPLE_DATA

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

Flash Player が新しいオーディオデータを要求するときに送出されます。




次の例は、単純な正弦波を再生します。
var mySound:Sound = new Sound();
function sineWaveGenerator(event:SampleDataEvent):void {
    for ( var c:int=0; c<8192; c++ ) {
        event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25);
        event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25);
    }
}

mySound.addEventListener(Event.SAMPLE_DATA,sineWaveGenerator);
mySound.play();

関連項目

例の使用法
SoundExample.as

次の例では、MP3 ファイルを開い再生すると発生するサウンドイベントに関する情報が表示されます。この例を実行するには、MySound.mp3 ファイルを SWF ファイルと同じディレクトリに配置します。
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;

    public class SoundExample extends Sprite {
        private var url:String = "MySound.mp3";
        private var song:SoundChannel;

        public function SoundExample() {
            var request:URLRequest = new URLRequest(url);
            var soundFactory:Sound = new Sound();
            soundFactory.addEventListener(Event.COMPLETE, completeHandler);
            soundFactory.addEventListener(Event.ID3, id3Handler);
            soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            soundFactory.load(request);
            song = soundFactory.play();
        }

        private function completeHandler(event:Event):void {
            trace("completeHandler: " + event);
        }

        private function id3Handler(event:Event):void {
            trace("id3Handler: " + event);
        }

        private function ioErrorHandler(event:Event):void {
            trace("ioErrorHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler: " + event);
        }
    }
}




 

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/media/Sound.html