flash.mediaID3Info ID3Info クラスには、ID3 メタデータが反映されるプロパティが含まれます。Object ID3Info クラスには、ID3 メタデータが反映されるプロパティが含まれます。Sound クラスの id3 プロパティにアクセスして、MP3 ファイルから追加のメタデータを取得できます。例えば、mySound.id3.TIME です。詳細については、Sound.id3 の項目と ID3 タグの定義(http://www.id3.org)を参照してください。 Sound.id3album アルバム名です。ID3 2.0 タグ TALB に対応します。String アルバム名です。ID3 2.0 タグ TALB に対応します。 artist アーチスト名です。ID3 2.0 タグ TPE1 に対応します。String アーチスト名です。ID3 2.0 タグ TPE1 に対応します。 comment 録音に関するコメントです。ID3 2.0 タグ COMM に対応します。String 録音に関するコメントです。ID3 2.0 タグ COMM に対応します。 genre 曲のジャンルです。ID3 2.0 タグ TCON に対応します。String 曲のジャンルです。ID3 2.0 タグ TCON に対応します。 songName 曲名です。ID3 2.0 タグ TIT2 に対応します。String 曲名です。ID3 2.0 タグ TIT2 に対応します。 track トラック番号です。ID3 2.0 タグ TRCK に対応します。String トラック番号です。ID3 2.0 タグ TRCK に対応します。 year 録音された年です。ID3 2.0 タグ TYER に対応します。String 録音された年です。ID3 2.0 タグ TYER に対応します。 MediaType MediaType クラスは、カメラから返される可能性があるメディアの一般的な種類を列挙します。Object MediaType クラスは、カメラから返される可能性があるメディアの一般的な種類を列挙します。

このクラスに定義されている定数を、CameraUI クラスの launch() メソッドの入力として使用します。また、MediaType 値は MediaPromise クラスの mediaType プロパティでも使用されます。

CameraUI.launch()MediaPromise.mediaTypeIMAGE 単一の画像。imageString 単一の画像。 VIDEO ビデオ。videoString ビデオ。
scanHardware システム上のマイクとカメラを強制的に再スキャンします。 システム上のマイクとカメラを強制的に再スキャンします。 Camera Camera クラスは、クライアントシステムのカメラからビデオをキャプチャするために使用します。flash.events:EventDispatcher Camera クラスは、クライアントシステムのカメラからビデオをキャプチャするために使用します。Video クラスは、ビデオをローカルで監視するために使用します。NetConnection クラスおよび NetStream クラスは、Flash Media Server にビデオを送信するために使用します。Flash Media Server は、他のサーバーにそのビデオストリームを送信し、Flash Player を実行する他のクライアントにブロードキャストできます。

カメラインスタンスは、横長の縦横比でビデオをキャプチャします。携帯電話など、画面の方向を変更できるデバイスの場合、カメラにアタッチされている Video オブジェクトでは、横長の縦横比の方向に縦型のビデオのみが表示されます。したがって、モバイルアプリケーションでは、ビデオを表示するときに自動回転しないようにするときは横長の方向を使用する必要があります。

オートフォーカスカメラを備えたモバイルデバイス上で動作している場合、AIR 2.6 では、オートフォーカスが自動的に有効になります。カメラがコンティニュアスオートフォーカスに対応していない場合は(モバイルデバイス内蔵カメラの多くは非対応です)、Camera オブジェクトがビデオストリームに添付されているときに setMode() メソッドが呼び出されるとフォーカスが動作します。デスクトップコンピューターでは、オートフォーカスビヘイビアーはカメラのドライバーと設定に依存します。

Android および iOS 上の AIR アプリケーションでは、AIR アプリケーションがアクティブなフォアグラウンドアプリケーションでない場合、カメラによるビデオのキャプチャは実行されません。また、アプリケーションがバックグラウンドのときに、ストリーミング接続が切断される場合があります。iOS 上では、アプリケーションが GPU レンダリングモードを使用している場合、カメラのビデオは表示できません。ただし、この場合もカメラのビデオをサーバーにストリーミングすることは可能です。

モバイルブラウザーのサポート:このクラスはモバイルブラウザーではサポートされません。

AIR プロファイルのサポート:この機能はデスクトップオペレーティングシステムではサポートされますが、すべてのモバイルデバイスではサポートされませんまた、テレビ用 AIR デバイスではサポートされません。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

Camera.isSupported プロパティを使用すると、サポートされているかどうかを実行時にテストすることができます。ただし、テレビ用 AIR デバイスでは、Camera.isSupportedtrue ですが Camera.getCamera() の返す値は常に null です。

オーディオのキャプチャに関する詳細については、Microphone クラスのトピックを参照してください。

重要:ユーザーがカメラへのアクセスを許可するか拒否するかを選択できるように、Flash Player でプライバシーダイアログボックスが表示されます。アプリケーションウィンドウのサイズは 215 × 138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な最小サイズです。

Camera オブジェクトを作成または参照するには、getCamera() メソッドを使用します。

次の例では、セキュリティ警告を承認した後のカメラからのイメージを示しています。ステージは拡大 / 縮小されないように設定され、Flash Player のウィンドウの左上に揃えられます。activity イベントはセッションの開始時と終了時(存在する場合)に送出され、activityHandler() メソッドによって捕捉されます。このメソッドはイベントの情報を出力します。

注意:この例を正しく機能させるには、コンピューターにカメラを接続しておく必要があります。

package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; public class CameraExample extends Sprite { private var video:Video; public function CameraExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width * 2, camera.height * 2); video.attachCamera(camera); addChild(video); } else { trace("You need a camera."); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } } }
flash.media.MicrophoneCristophe Coenraets:Video Chat for Android in 30 Lines of CodeMichael Chaize:Android, AIR, and the Camerastatus カメラがそのステータスをレポートしたときに送出されます。flash.events.StatusEvent.STATUSflash.events.StatusEvent カメラがそのステータスをレポートしたときに送出されます。カメラにアクセスする前に、Flash Player にはプライバシーダイアログボックスが表示されて、ユーザーがカメラへのアクセスを許可または拒否することができます。code プロパティの値が "Camera.Muted" である場合、SWF ファイルのカメラへのアクセス許可を拒否したことになります。code プロパティの値が "Camera.Unmuted" の場合、SWF ファイルがユーザーのカメラにアクセスすることをユーザーが許可しています。 Camera.getCamera()activity カメラがセッションを開始または終了したときに送出されます。flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent カメラがセッションを開始または終了したときに送出されます。Camera.setMotionLevel() を呼び出して、activity イベントをトリガーするために必要なモーション量を指定するか(activating 値を true に設定)、activity イベントをトリガーする前に経過する必要があるアクティビティを実行しない時間を指定します(activating 値を false に設定)。 getCamera ビデオをキャプチャする Camera オブジェクトへの参照を返します。name パラメーターを指定しない場合は、デフォルトのカメラへの参照を返します。デフォルトのカメラが他のアプリケーションで使用されている場合は、使用できる最初のカメラへの参照を返します。複数のカメラがインストールされている場合、ユーザーは Flash Player 設定パネルの「カメラ」でデフォルトのカメラを指定できます。利用できるカメラがない場合、またはカメラがインストールされていない場合は、null を返します。 flash.media:CameranameStringnull取得するカメラを names プロパティで返される配列から決定します。多くのアプリケーションでは、パラメーターを省略してデフォルトのカメラを取得します。このパラメーターの値を指定するには、Camera.names 配列内の 0 ベースのインデックス位置のストリング表現を使用します。例えば、配列内の 3 番目のカメラを指定するには、Camera.getCamera("2") を使用します。 ビデオをキャプチャする Camera オブジェクトへの参照を返します。ビデオのキャプチャを開始するには、Camera オブジェクトを Video オブジェクトに関連付ける必要があります。詳細については、Video.attachCamera() のトピックを参照してください。ビデオを Flash Media Server に送信するには、NetStream.attachCamera() を呼び出して、Camera オブジェクトを NetStream オブジェクトに関連付けます。

getCamera() メソッドを複数回呼び出した場合は、同じカメラドライバーへの参照が返されます。したがって、firstCam:Camera = getCamera()secondCam:Camera = getCamera() のようなコードが含まれている場合、firstCamsecondCam はどちらも、ユーザーのデフォルトである同じカメラを参照します。

前方カメラと後方カメラを備えた iOS デバイスでは、一度に片方のカメラからしかビデオをキャプチャすることはできません。Android デバイスでは、後方カメラにのみアクセス可能です。

一般には、name パラメーターの値は指定せず、単に getCamera() を使用してデフォルトのカメラへの参照を取得します。ユーザーは、このセクションで後述する「カメラ」ボックスで、使用するデフォルトのカメラを指定できます。

ActionScript を使用してユーザーによるカメラへのアクセスの許可または拒否を設定することはできませんが、ユーザーによるカメラのアクセス許可の設定が可能な Adobe Flash Player 設定のカメラ設定ダイアログボックスを表示することができます。 attachCamera() メソッドを使用する SWF ファイルが getCamera() メソッドによって返されたカメラを Video オブジェクトまたは NetStream オブジェクトに接続しようとすると、Flash Player はカメラへのアクセスの許可または拒否をユーザーに選択させるダイアログボックスを表示します。アプリケーションウィンドウのサイズは必ず 215×138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な Flash Player の最小サイズです。ユーザーがカメラ設定のダイアログボックスに応答すると、Flash Player はユーザーの応答を示す status イベント内の情報オブジェクトを返します。 Camera.mutedCamera.Unmuted はそれぞれ、ユーザーによるカメラへのアクセスの拒否と許可を示します。 status イベントを使用せずにユーザーがカメラへのアクセスを拒否したか許可したかを判断するには、muted プロパティを使用します。

Flash Player で再生中の SWF ファイルを右クリック(Windows および Linux)または Control キーを押しながらクリック(Macintosh)し、設定を選択してプライバシーダイアログで「後で確認」を選択すると、ユーザーは特定のドメインに対する永続的なプライバシー設定を指定できます。ユーザーが「後で確認」を選択していた場合、SWF ファイルがこのドメインからカメラにアクセスすることを許可するか拒否するかを確認するメッセージは表示されません。

注意:ユーザーが Flash Player の設定ダイアログボックスで「後で確認」を選択して既にアクセスを拒否している場合、attachCamera() メソッドではカメラへのアクセスの許可または拒否を確認するダイアログボックスは表示されません。この場合、Security.showSettings(SecurityPanel.PRIVACY) を使用するユーザーに対して Adobe Flash Player 設定パネルの「プライバシー」を表示して許可または拒否の設定を変更するように要求することができます。

getCamera()null を返した場合、カメラは他のアプリケーションによって使用されているか、そのシステムにはカメラがインストールされていません。カメラがインストールされているかどうかを調べるには、names.length プロパティを使用します。Flash Player 設定パネルの「カメラ」を表示して、getCamera() が参照するカメラをユーザーが選択できるようにするには、Security.showSettings(SecurityPanel.CAMERA) を使用します。

カメラのハードウェアスキャンには時間がかかります。ランタイムによってカメラが 1 つでも見つかると、その Flash Player インスタンスの存続中は、ハードウェアが再びスキャンされることはありません。しかし、カメラが見つからなかった場合は、getCamera が呼び出されるたびにハードウェアがスキャンされます。この動作は、カメラは存在するのに無効になっている場合に便利です。getCamera を呼び出すための「再試行」ボタンを SWF ファイルに用意すると、ユーザーが SWF ファイルを再起動しなくてもカメラを見つけることができます。

次の例では、ユーザーがカメラへのアクセスを許可した場合、接続されたカメラを使用してビデオイメージをキャプチャします。 ビデオストリームに関する情報(現在の 1 秒あたりのフレーム数など)も表示します。

Camera.getCamera() メソッドは、カメラオブジェクトへの参照を返します。利用できるカメラがない場合、またはカメラが取り付けられていない場合は、null を返します。カメラが見つかったかどうか、およびユーザーがカメラへのアクセスを許可したかどうかを if ステートメントでチェックします。 ユーザーがアクセスを拒否した場合、muted プロパティは true に設定されます。

通常は attachCamera() メソッドが呼び出されると、Flash Player によるカメラへのアクセスを許可するかどうかをユーザーに確認するダイアログボックスが表示されます。 ただし、ユーザーがアクセスを拒否し、「後で確認」オプションを選択した場合、ダイアログボックスなどは何も表示されません。 ユーザーがカメラへのアクセスを許可するオプションを使用できるように、Flash Player 設定ダイアログボックスを起動するためにテキストフィールドをクリックするようにという指示が myTextField テキストフィールドに表示されます。

clickHandler() メソッドは Security.showSettings() メソッドを呼び出します。これにより、設定ダイアログボックスのプライバシーパネルが表示されます。 ユーザーがアクセスを許可した場合、StatusEvent.STATUS イベントが送出され、イベントの code プロパティの値が Camera.Unmuted に設定されます。 (同時にカメラオブジェクトの mute プロパティが false に設定されます。)

ユーザーがアクセスを許可した場合、ユーザーの設定のステータス変更をリスニングするために追加された statusHandler() メソッドにより、connectCamera() メソッドが呼び出されます。 connectCamera() メソッドは、キャプチャされたストリームの幅と高さを使用してビデオオブジェクトをインスタンス化します。カメラでキャプチャされたビデオを表示するため、ビデオストリームへの参照をビデオオブジェクトに関連付けて、ビデオオブジェクトを表示リストに追加します。

さらに、Timer オブジェクトを開始します。1 秒ごとに Timer オブジェクトのタイマーイベントが送出され、timerHandler() メソッドが呼び出されます。timerHandler() メソッドが表示され、Camera オブジェクトのいくつかのプロパティが更新されます。

注意:この例では、変更されるプロパティは currentFPS プロパティのみです。

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.system.SecurityPanel; import flash.system.Security; public class Camera_getCameraExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_getCameraExample() { myTextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; if (Camera.isSupported) { cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; } else if (cam.muted) { myTextField.text = "To enable the use of the camera,\n" + "please click on this text field.\n" + "When the Flash Player Settings dialog appears,\n" + "make sure to select the Allow radio button\n" + "to grant access to your camera."; myTextField.addEventListener(MouseEvent.CLICK, clickHandler); }else { myTextField.text = "Connecting"; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); }else { myTextField.text = "The Camera class is not supported on this device."; } } private function clickHandler(e:MouseEvent):void { Security.showSettings(SecurityPanel.PRIVACY); cam.addEventListener(StatusEvent.STATUS, statusHandler); myTextField.removeEventListener(MouseEvent.CLICK, clickHandler); } private function statusHandler(event:StatusEvent):void { if (event.code == "Camera.Unmuted") { connectCamera(); cam.removeEventListener(StatusEvent.STATUS, statusHandler); } } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); t.start(); } private function timerHandler(event:TimerEvent):void { myTextField.y = cam.height + 20; myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } } }
indexmutednamessetMode()statusVideo.attachCamera()statusflash.events:StatusEventカメラがそのステータスをレポートしたときに送出されます。カメラにアクセスする前に、Flash Player にはプライバシーダイアログボックスが表示されて、ユーザーがカメラへのアクセスを許可または拒否することができます。code プロパティの値が "Camera.muted" である場合、SWF ファイルのカメラへのアクセス許可を拒否したことになります。code プロパティの値が "Camera.Unmuted" の場合、SWF ファイルがユーザーのカメラにアクセスすることをユーザーが許可しています。 カメラがそのステータスをレポートしたときに送出されます。
setKeyFrameInterval ビデオ圧縮アルゴリズムによって補間されずに完全に送信されるビデオフレーム (キーフレームと呼ばれる) を指定します。keyFrameIntervalintビデオ圧縮アルゴリズムによって補間されるのではなく、(キーフレームとして)完全送信されるビデオフレームを指定する値です。1 を指定すると、すべてのフレームがキーフレームになり、3 を指定すると、3 つのフレームごとにフレームがキーフレームになります(以下同様)。有効な値は、1 ~ 48 です。 ビデオ圧縮アルゴリズムによって補間されるのではなく、(キーフレームと呼ばれる)完全送信されるビデオフレームを指定します。このメソッドは、Flash Media Server を使用してビデオを送信している場合にだけ使用できます。

Flash Video 圧縮アルゴリズムでは、ビデオの最後のフレームからの変更のみを送信して、ビデオを圧縮します。これらの変更部分が補間フレームと見なされます。ビデオのフレームは、前のフレームの内容に応じて補間されます。ただし、キーフレームは完全なビデオフレームであるため、前のフレームから補間されることはありません。

keyFrameInterval パラメーターの値を設定する方法を判別するには、帯域幅の使用量とビデオ再生アクセシビリティの両方を検討します。例えば、keyFrameInterval に対して大きい値を指定すると(キーフレームの送信が少なくなる)、帯域幅の使用量が減少します。ただし、これはビデオの特定のポイントで再生ヘッドの位置を指定する際に要する時間を増やすことになります。つまり、ビデオを再開する際、より多くの先行ビデオフレームを補間しなければならない場合があります。

逆に、keyFrameInterval に対して小さい値を指定すると(キーフレームの送信が多くなる)、ビデオフレーム全体の送信が多くなるため、帯域幅の使用量が増加しますが、録画済みのビデオ内で特定のビデオフレームをシークする際に要する時間は減ります。

keyFrameInterval
setLoopback カメラのローカルビューに対して圧縮したビデオストリームを使用するかどうかを指定します。compressBooleanfalseカメラが受け取るローカルビューに対して、圧縮したビデオストリーム(true)を使用するか、または圧縮されていないストリーム(false)を使用するかを指定します。 カメラのローカルビューに対して圧縮したビデオストリームを使用するかどうかを指定します。このメソッドは、Flash Media Server を使用してビデオを送信している場合にだけ使用できます。compresstrue に設定すると、リアルタイムで表示したときの、ユーザーに対するビデオの表示状態をより正確に確認できます。

圧縮したストリームは、ビデオの品質設定のプレビューなど、テスト目的で使用する場合には役立ちますが、ローカルビューは単に圧縮されるだけではないので、非常に処理コストがかかります。ローカルビューは圧縮された後、ライブ接続で送信する場合と同じように編集され、さらにローカルで表示するために解凍されます。

compresstrue に設定した場合に使用する圧縮率を設定するには、Camera.setQuality() を使用します。

setQuality()
setMode カメラのキャプチャモードを指定の要件に最も近いネイティブモードに設定します。widthint要求されたキャプチャの幅(ピクセル単位)です。デフォルト値は 160 です。 heightint要求されたキャプチャの高さ(ピクセル単位)です。デフォルト値は 120 です。 fpsNumber要求されたデータキャプチャレート(1 秒あたりのフレーム数)です。デフォルト値は 15 です。 favorAreaBooleantrue指定要件に合うネイティブモードがカメラにない場合に、幅、高さ、フレームレートをどのように操作するかを指定します。デフォルト値は true で、キャプチャサイズを維持することを示します。このパラメーターを使用すると、width 値と height 値に最も近いモードが選択されます。ただし、これによりフレームレートが低下し、パフォーマンスに悪影響を及ぼすことがあります。カメラの高さと幅よりも最大フレームレートを優先するには、falsefavorArea パラメーターに指定します。 カメラのキャプチャモードを指定の要件に最も近いネイティブモードに設定します。指定したすべてのパラメーターに一致するネイティブモードがカメラにない場合は、要求したモードに最も近いキャプチャモードが選択されます。これにより、画像の一部が切り取られたり、フレームが削除される可能性があります。

デフォルトでは、画像のサイズを維持するために、必要に応じてフレームが削除されます。削除されるフレームの数を最小限に抑えるには、falsefavorArea パラメーターで渡します。ただし、これによって画像のサイズは小さくなります。

ネイティブモードを選択した場合は、指定した縦横比ができる限り維持されます。例えば、myCam.setMode(400, 400, 30) コマンドを実行し、そのカメラで利用できる最大の幅と高さが 320 および 288 である場合は、幅と高さがともに 288 に設定されます。幅と高さを同じ値に設定することで、要求された 1:1 の縦横比が維持されます。

要求した値に最も近いモードが選択された後に、割り当てられた幅、高さ、ビデオキャプチャレートを調べるには、widthheight、および fps の各プロパティを使用します。

Flash Media Server を使用する場合は、単一のフレームのキャプチャまたはコマ撮り写真の作成もできます。詳細については、NetStream.attachCamera() のトピックを参照してください。

次の例では、ユーザーがステージをクリックするとビデオのサイズが変更され、キャプチャレート(1 秒あたりのフレーム数)が新しい値に設定されます。

ステージは拡大 / 縮小されないように設定されます。Camera.getCamera() メソッドは、カメラオブジェクトへの参照を返します。利用できるカメラがない場合、またはカメラが取り付けられていない場合は、null を返します。カメラが存在する場合は、connectCamera() メソッドが呼び出されます。connectCamera() メソッドは、ビデオオブジェクトをインスタンス化します。カメラでキャプチャされたビデオを表示するため、ビデオストリームへの参照をビデオオブジェクトに関連付けて、ビデオオブジェクトを表示リストに追加します。MouseEvent.CLICK イベントのイベントリスナーも設定します。ユーザーがステージをクリックすると、clickHandler() メソッドが呼び出されます。 このメソッドはキャプチャされたビデオの幅を確認し、カメラキャプチャモードの幅、高さおよび必要なキャプチャレート(1 秒あたりのフレーム数)を設定します。これらの設定を有効にするために、ビデオオブジェクトを削除して再作成する必要があります。また、ビデオの幅と高さをカメラオブジェクトの幅と高さに設定する必要があります。

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.display.StageScaleMode; public class Camera_setModeExample extends Sprite { private var cam:Camera; private var vid:Video; public function Camera_setModeExample() { stage.scaleMode = StageScaleMode.NO_SCALE; cam = Camera.getCamera(); if (!cam) { trace("No camera is installed."); }else { connectCamera(); } } private function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); stage.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e:MouseEvent):void { switch (cam.width) { case 160: cam.setMode(320, 240, 10); break; case 320: cam.setMode(640, 480, 5); break; default: cam.setMode(160, 120, 15); break; } removeChild(vid); connectCamera(); } } }
fpsheightwidthflash.net.NetStream.attachCamera()
setMotionLevel activity イベントを送出するために必要なモーションの量を指定します。motionLevelintactivity イベントを送出するために必要なモーションの量を指定します。使用可能な値の範囲は 0 ~ 100 です。デフォルト値は 50 です。 timeoutint2000アクティビティがない場合に、アクティビティが停止したと判定して activity イベントを送出するまでの経過時間をミリ秒単位で指定します。デフォルト値は 2000 ミリ秒(2 秒)です。 activity イベントを送出するために必要なモーションの量を指定します。アクティビティがない場合に、モーションが停止したと判定してイベントを送出するまでの時間をミリ秒単位で設定することもできます。

注意:ビデオは motionLevel パラメーターの値に関係なく表示できます。このパラメーターは、ビデオを実際にキャプチャまたは表示するかどうかではなく、イベントを送出するタイミングと状況のみを決定します。

カメラがモーションをまったく検知しないようにするには、motionLevel パラメーターに 100 を指定します。この場合、activity イベントは送出されません。この値は、通常はテスト目的にのみ使用します。例えば、イベントが送出されたときに通常トリガーされるハンドラーを一時的に無効にする場合などに使用します。

カメラが現在検知しているモーションの量を調べるには、activityLevel プロパティを使用します。モーションの精度(sensitivity)の値がアクティビティの値に直接対応します。モーションがまったく存在しない場合、アクティビティ値は 0 です。継続的にモーションが発生している場合、アクティビティ値は 100 です。移動していない場合、アクティビティ値はモーション精度値よりも低くなります。移動している場合、アクティビティ値は頻繁にモーション精度値を超えます。

このメソッドの目的は Microphone.setSilenceLevel() メソッドに似ています。どちらのメソッドも、activity イベントの送出方法を指定するために使用します。ただし、パブリッシュするストリームに対する影響という点では、この 2 つのメソッドは大きく異なります。

  • Microphone.setSilenceLevel() は帯域幅を最適化するように設計されています。オーディオストリームが無音と考えられる場合には、オーディオデータは送信されません。代わりに、無音状態が始まったことを示すメッセージが送信されます。
  • Camera.setMotionLevel() はモーションを検知し、使用する帯域幅には影響しないように設計されています。ビデオストリームでモーションが検知されない間も、ビデオは送信されます。
次の例では、ユーザーのカメラをモニターまたは監視カメラとして使用します。カメラがモーションを検知すると、テキストフィールドにアクティビティレベルが表示されます。この例を拡張して、アラームを鳴らしたり、Web サービスを通じて他のアプリケーションにメッセージを送信したりすることも可能です。

Camera.getCamera() メソッドは、カメラオブジェクトへの参照を返します。利用できるカメラがない場合、またはカメラが取り付けられていない場合は、null を返します。if ステートメントでカメラが利用できるかどうかをチェックし、利用できる場合は connectCamera() メソッドを呼び出します。connectCamera() メソッドは、キャプチャされたストリームの幅と高さを使用してビデオオブジェクトをインスタンス化します。カメラでキャプチャされたビデオを表示するため、ビデオストリームへの参照をビデオオブジェクトに関連付けて、ビデオオブジェクトを表示リストに追加します。通常は attachCamera() メソッドが呼び出されると、Flash Player によるカメラへのアクセスを許可するかどうかをユーザーに確認するダイアログボックスが表示されます。 ただし、ユーザーがアクセスを拒否し、「後で確認」オプションを選択した場合、ダイアログボックスは表示されず、何も表示されません。 ユーザーがカメラへのアクセスを許可するオプションを確実に設定できるようにするため、system.Security.showSettings() メソッドを使用して Flash Player 設定ダイアログボックスを表示します。

アクティビティイベントが呼び出される前に、setMotionLevel() メソッドによってアクティビティのレベル(モーションの量)を 5(わずかな動きも検出する)に設定します。カメラがモーション検知を停止してからアクティビティイベントが呼び出されるまでの時間を 1 秒(1000 ミリ秒)に設定します。アクティビティなしの状態で 1 秒が経過するか、またはアクティビティのレベルが 5 に達すると、ActivityEvent.ACTIVITY イベントが送出され、activityHandler() メソッドが呼び出されます。アクティビティのレベルによってイベントがトリガーされた場合、activating プロパティが true に設定され、Timer オブジェクトが開始されます。1 秒ごとに Timer オブジェクトのタイマーイベントが送出され、timerHandler() メソッドが呼び出され、現在のアクティビティレベルが表示されます。(5 以上のレベルによりタイマーがトリガーされますが、表示される現在のアクティビティのレベルはそれより小さい数値になる場合があります。)

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.ActivityEvent; public class Camera_setMotionLevelExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_setMotionLevelExample() { myTextField = new TextField(); myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; }else { myTextField.text = "Waiting to connect."; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); cam.setMotionLevel(5, 1000); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); } private function activityHandler(e:ActivityEvent):void { if (e.activating == true) { t.start(); } else { myTextField.text = "Everything is quiet."; t.stop(); } } private function timerHandler(event:TimerEvent):void { myTextField.x = 10; myTextField.y = cam.height + 20; myTextField.text = "There is some activity. Level: " + cam.activityLevel; } } }
motionLevelmotionTimeoutMicrophone.setSilenceLevel()
setQuality 現在の送信ビデオフィードの 1 秒あたりの最大帯域幅、または必要な画質を設定します。bandwidthint現在の送信ビデオフィードで使用できる最大帯域幅(1 秒あたりのバイト数)を指定します。quality の値を維持するために必要な帯域幅を Flash Player のビデオが使用できるように指定するには、bandwidth で 0 を渡します。デフォルト値は 16384 です。 qualityint必要な画質レベルを指定する整数です。各ビデオフレームに適用される圧縮率によって決まります。指定できる値は 1(最低品質、最大圧縮率)から 100(最高品質、圧縮なし)までです。帯域幅を超過するのを避けるために必要に応じて画質を変更するには、quality に 0 を指定します。 現在の送信ビデオフィードの 1 秒あたりの最大帯域幅、または必要な画質を設定します。一般に、このメソッドは、Flash Media Server を使用してビデオを送信している場合にだけ使用します。

このメソッドを使用して、送信ビデオフィードの要素として帯域幅と画質のどちらがそのアプリケーションにとって重要かを指定します。

  • 帯域幅の使用量を優先する場合は、bandwidth に数値を、quality に 0 を指定します。こうすると、指定した帯域幅内で最高品質のビデオが送信されます。必要であれば、指定の帯域幅を超えるのを防ぐために、画質が下げられます。一般には、モーションが増えるほど、画質は下がります。
  • 画質を優先する場合は、bandwidth に 0 を、quality に数値を指定します。こうすると、指定した画質を維持するために必要なだけの帯域幅が使われます。必要であれば、画質を維持するためにフレームレートが下げられます。一般には、モーションが増えるほど、使用する帯域幅も増加します。
  • 帯域幅と品質の両方の重要性が同程度である場合は、両方のパラメーターに数値を指定します。指定の品質を達成でき、指定の帯域幅を超えない範囲のビデオが送信されます。必要であれば、指定の帯域幅を超えることなく画質を維持するために、フレームレートが下げられます。
getCamera()quality
activityLevel カメラが検知しているモーション量です。Number カメラが検知しているモーション量です。0(モーションは検知されていない)から 100(大量のモーションが検知されている)までの値が設定されます。このプロパティの値は、setMotionLevel() メソッドに設定を渡す必要があるかどうかを判断するのに役立ちます。

Video.attachCamera() メソッドが呼び出されていないため、使用可能なカメラがまだ使用されていない場合は、このプロパティが -1 に設定されます。

圧縮されていないローカルビデオだけをストリーミングする場合、このプロパティはイベントハンドラーに関数を割り当て済みであるときに限り設定されます。それ以外の場合は undefined になります。

motionLevelsetMotionLevel()
bandwidth 現在の送信ビデオフィードで使用できる最大帯域幅(バイト単位)です。int 現在の送信ビデオフィードで使用できる最大帯域幅(バイト単位)です。値 0 は、ビデオのフレーム品質を維持するために必要な帯域幅をフィードで使用できることを示します。

このプロパティの値を設定するには、setQuality() メソッドを使用します。

setQuality()
currentFPS 現在のデータキャプチャレート(1 秒あたりのフレーム数)です。Number 現在のデータキャプチャレート(1 秒あたりのフレーム数)です。このプロパティを設定することはできません。ただし、setMode() メソッドを使用すると、これに関係する fps プロパティを設定することができます。このプロパティは、データをキャプチャする際の希望最大フレームレートを指定します。 setMode()fps カメラの最大データキャプチャレート(1 秒あたりのフレーム数)です。Number カメラの最大データキャプチャレート(1 秒あたりのフレーム数)です。最大データキャプチャレートは、カメラの性能によって異なります。このフレームレートを実現できない場合があります。
  • このプロパティに必要な値を設定するには、setMode() メソッドを使用します。
  • 現在のデータキャプチャレートを調べるには、currentFPS プロパティを使用します。
currentFPSsetMode()
height 現在のキャプチャの高さ(ピクセル単位)です。int 現在のキャプチャの高さ(ピクセル単位)です。このプロパティに値を設定するには、setMode() メソッドを使用します。 widthsetMode()index カメラのインデックスを指定するゼロから始まる整数です。これは、names プロパティから返される配列のインデックスと同じです。int カメラのインデックスを指定するゼロから始まる整数です。これは、names プロパティから返される配列のインデックスと同じです。 namesgetCamera()isSupported 現在のプラットフォームで Camera クラスがサポートされている場合、isSupported プロパティは true に設定されます。サポートされていない場合は、false に設定されます。Boolean 現在のプラットフォームで Camera クラスがサポートされている場合、isSupported プロパティは true に設定されます。サポートされていない場合は、false に設定されます。 keyFrameInterval ビデオ圧縮アルゴリズムによって補間されるのではなく、完全送信されるビデオフレーム(キーフレームと呼ばれる)の数です。int ビデオ圧縮アルゴリズムによって補間されるのではなく、完全送信されるビデオフレーム(キーフレームと呼ばれる)の数です。デフォルト値は 15 で、15 のフレームごとにフレームがキーフレームになります。1 はすべてのフレームがキーフレームであることを意味します。設定できる値は、1 ~ 48 です。 setKeyFrameInterval()loopback カメラがキャプチャするローカルビューを、Flash Media Server を使用したライブ送信で使用されるように圧縮および解凍する(true)か、または圧縮されていない状態にする(false)かを示します。Boolean カメラがキャプチャするローカルビューを、Flash Media Server を使用したライブ送信で使用されるように圧縮および解凍する(true)か、または圧縮されていない状態にする(false)かを示します。デフォルト値は false です。

圧縮したストリームは、ビデオの品質設定のプレビューなど、テスト目的で使用する場合には役立ちますが、非常に処理コストがかかります。ローカルビューは圧縮され、送信するためにライブ接続で使用されるように編集され、さらにローカルで表示するために解凍されます。

この値を設定するには、Camera.setLoopback() を使用します。このプロパティが true である場合に使用する圧縮率を設定するには、Camera.setQuality() を使用します。

setLoopback()setQuality()
motionLevel activity イベントを送出するために必要なモーションの量です。int activity イベントを送出するために必要なモーションの量です。使用可能な値の範囲は 0 ~ 100 です。デフォルト値は 50 です。

ビデオは motionLevel プロパティの値に関係なく表示できます。詳細については、setMotionLevel()を参照してください。

setMotionLevel()
motionTimeout カメラがモーション検知を停止してから、activity イベントが呼び出されるまでの時間(ミリ秒単位)です。int カメラがモーション検知を停止してから、activity イベントが呼び出されるまでの時間(ミリ秒単位)です。デフォルト値は 2000(2 秒)です。

この値を設定するには、setMotionLevel() を使用します。

setMotionLevel()
muted ユーザーが Flash Player のプライバシーダイアログボックスでカメラへのアクセスを拒否した(true)か、許可した(false)かを示すブール値です。Boolean ユーザーが Flash Player のプライバシーダイアログボックスでカメラへのアクセスを拒否した(true)か、許可した(false)かを示すブール値です。この値が変わると、status イベントが送出されます。 getCamera()statusname カメラのハードウェアから返される、現在のカメラの名前です。String カメラのハードウェアから返される、現在のカメラの名前です。 namesgetCamera()names Adobe Flash Player 設定パネルの「プライバシー」を表示せずに、使用できるすべてのカメラの名前を示すストリング配列です。Array Adobe Flash Player 設定パネルの「プライバシー」を表示せずに、使用できるすべてのカメラの名前を示すストリング配列です。この配列は ActionScript の他の配列と同じように動作します。この配列を使用して、それぞれのカメラの 0 から始まるインデックスと、システム上のカメラの数(names.length)を調べることができます。詳細については、Array クラスの names を参照してください。

names プロパティを呼び出すと、ハードウェアを広範囲にわたって調べる必要があります。ほとんどの場合は、デフォルトのカメラを使用できます。

Android では、デバイスに複数のカメラデバイスが搭載されている場合でも、1 台のカメラのみがサポートされます。カメラの名前は常に「Default」です。

getCamera()indexname
quality 必要な画質レベルです。各ビデオフレームに適用される圧縮率によって決まります。int 必要な画質レベルです。各ビデオフレームに適用される圧縮率によって決まります。指定できる品質値は 1(最低品質、最大圧縮率)~ 100(最高品質、圧縮なし)です。デフォルト値は 0 です。これは、使用できる帯域幅を超えることがないように、画質が必要に応じて変更されることを示します。

このプロパティの値を設定するには、setQuality() メソッドを使用します。

setQuality()
width 現在のキャプチャの幅(ピクセル単位)です。int 現在のキャプチャの幅(ピクセル単位)です。このプロパティに必要な値を設定するには、setMode() メソッドを使用します。 setMode()
SoundTransform SoundTransform クラスにはボリュームとパンのプロパティが含まれます。Object SoundTransform クラスにはボリュームとパンのプロパティが含まれます。 次の例では、MP3 ファイルをロードして再生します。MP3 ファイルの再生中に、マウスまたはその他の入力デバイスを動かします。ステージ上でユーザー入力デバイスを動かすにつれて、ボリュームとパンが変わります。この例を実行するには、MySound.mp3 ファイルを SWF ファイルと同じディレクトリに配置します。 package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.Timer; public class SoundTransformExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundTransformExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.load(request); channel = soundFactory.play(); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function setPan(pan:Number):void { trace("setPan: " + pan.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.pan = pan; channel.soundTransform = transform; } private function setVolume(volume:Number):void { trace("setVolume: " + volume.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.volume = volume; channel.soundTransform = transform; } private function mouseMoveHandler(event:MouseEvent):void { var halfStage:uint = Math.floor(stage.stageWidth / 2); var xPos:uint = event.stageX; var yPos:uint = event.stageY; var value:Number; var pan:Number; if (xPos > halfStage) { value = xPos / halfStage; pan = value - 1; } else if (xPos < halfStage) { value = (xPos - halfStage) / halfStage; pan = value; } else { pan = 0; } var volume:Number = 1 - (yPos / stage.stageHeight); setVolume(volume); setPan(pan); } } } flash.display.SimpleButton.soundTransformflash.display.Sprite.soundTransformflash.media.Microphone.soundTransformflash.media.SoundChannel.soundTransformflash.media.SoundMixer.soundTransformflash.net.NetStream.soundTransformSoundTransform SoundTransform オブジェクトを作成します。volNumber1ボリュームです。範囲は 0(無音)~ 1(フルボリューム)です。 panningNumber0サウンドの左から右へのパンです。範囲は -1(完全に左へパン)~ 1(完全に右へパン)です。0 はパンなし(中央)を表します。 SoundTransform オブジェクトを作成します。 次の例では、サウンドは右チャンネルからのみ再生され、ボリュームは 50 %に設定されます。

コンストラクターで、サウンドがロードされ、サウンドチャンネル(channel)に割り当てられます。 SoundTranform オジェクト(transform)も作成されます。最初の引数では、ボリュームが 50% に設定されます(範囲は 0.0 ~ 1.0)。2 番目の引数では、パンが設定されます。この例では、パンは 1.0 に設定され、サウンドが右スピーカーからのみ再生されることを意味します。これらの設定を有効にするために、transform SoundTranform オブジェクトを、サウンドチャンネルの souundTransform プロパティに割り当てます。

注意:この例には、限定されたエラー処理が記述されています。

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.events.IOErrorEvent; public class SoundTransform_constructorExample extends Sprite { public function SoundTransform_constructorExample() { var mySound:Sound = new Sound(); var url:URLRequest = new URLRequest("mySound.mp3"); var channel:SoundChannel; var transform:SoundTransform = new SoundTransform(0.5, 1.0); mySound.load(url); channel = mySound.play(); channel.soundTransform = transform; mySound.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
leftToLeft 左スピーカーで再生する左入力データの量を指定する値 0(なし)~ 1(すべて)です。Number 左スピーカーで再生する左入力データの量を指定する値 0(なし)~ 1(すべて)です。 leftToRight 右スピーカーで再生する左入力データの量を指定する値 0(なし)~ 1(すべて)です。Number 右スピーカーで再生する左入力データの量を指定する値 0(なし)~ 1(すべて)です。 pan サウンドの左から右へのパンです。範囲は -1(完全に左へパン)~ 1(完全に右へパン)です。Number サウンドの左から右へのパンです。範囲は -1(完全に左へパン)~ 1(完全に右へパン)です。0 はパンなし(左右のバランスをとった中央)を表します。 rightToLeft 左スピーカーで再生する右入力データの量を指定する値 0(なし)~ 1(すべて)です。Number 左スピーカーで再生する右入力データの量を指定する値 0(なし)~ 1(すべて)です。 rightToRight 右スピーカーで再生する右入力データの量を指定する値 0(なし)~ 1(すべて)です。Number 右スピーカーで再生する右入力データの量を指定する値 0(なし)~ 1(すべて)です。 volume ボリュームです。範囲は 0(無音)~ 1(フルボリューム)です。Number ボリュームです。範囲は 0(無音)~ 1(フルボリューム)です。
StageVideoAvailability このクラスは、ステージビデオが現在使用可能かどうかを示す列挙を定義します。ステージビデオが現在使用可能かどうかを示す列挙。 Object このクラスは、ステージビデオが現在使用可能かどうかを示す列挙を定義します。 flash.events.StageVideoAvailabilityEventAVAILABLE ステージビデオは現在使用可能です。availableStringステージビデオは現在使用可能です。 ステージビデオは現在使用可能です。 UNAVAILABLE ステージビデオは現在使用できません。unavailableStringステージビデオは現在使用できません。 ステージビデオは現在使用できません。 StageWebView StageWebView クラスを使用すると、ステージビューポートに HTML コンテンツが表示されます。flash.events:EventDispatcher StageWebView クラスを使用すると、ステージビューポートに HTML コンテンツが表示されます。

StageWebView クラスを使用すると、HTMLLoader クラスがサポートされていないデバイスでも簡単に HTML コンテンツを表示できます。このクラスでは、StageWebView クラス自体のメソッドとプロパティを除いて、ActionScript と HTML コンテンツの間にやり取りはありません。例えば、ActionScript と JavaScipt の間で値を渡したり、関数を呼び出したりする方法はありません。

AIR プロファイルのサポート:この機能はすべてのデスクトップオペレーティングシステムおよびモバイルデバイスでサポートされますが、テレビ用 AIR デバイスではサポートされません。StageWebView.isSupported プロパティを使用すると、サポートされているかどうかを実行時にテストすることができます。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

デバイスのモバイルプロファイルおよび拡張モバイルプロファイルでは、StageWebView はデバイスのオペレーティングシステムに用意されているシステム Web コントロールを使用します。したがって、使用できる機能とレンダリングされる外観はデバイスによって異なる可能性があります。デスクトップコンピューター(デスクトッププロファイルおよび拡張デスクトッププロファイル)では、StageWebView は内部 AIR WebKit エンジンを使用します。使用できる機能とレンダリングされる外観は、HTMLLoader クラスの機能および外観と同じです(HTMLLoader インスタンスが提供する ActionScript および JavaScipt の間で密接な統合およびスクリプトブリッジがない場合)。現在のデバイスでこのクラスがサポートされているかどうかを判断するには、StageWebView クラスの isSupported プロパティをテストします。

StageWebView クラスは表示オブジェクトではないため、Flash 表示リストに追加できません。代わりに stage プロパティを使用してステージに直接アタッチすることで、StageWebView オブジェクトを表示します。ステージにアタッチされている StageWebView インスタンスは、Flash 表示オブジェクトの上に表示されます。viewPort プロパティで、レンダリング領域のサイズと位置を制御します。複数の StageWebView オブジェクトの深度の順序を制御する方法はありません。重複する 2 つのインスタンスは推奨されません。

StageWebView オブジェクト内のコンテンツにフォーカスがない場合、キーボードの入力を処理する最初の機会は StageWebView オブジェクトにあります。StageWebView オブジェクトをアタッチするステージは、処理されないキーボード入力を送出します。StageWebView インスタンスは表示リストの一部ではないため、通常のイベントキャプチャ/バブルサイクルはこの場合に適用されません。

Android 3.0 以降では、AIR アプリケーション識別子の Android manifestAdditions 要素内でハードウェアアクセラレーションを有効にして、StageWebView オブジェクトでプラグインコンテンツを表示する必要があります。

次の例では、ステージを塗るために StageWebView オブジェクトを設定します。この例では、loadURL() メソッドを使用して Web サイトをロードし、履歴の移動に、デバイスの「戻る」および「検索」ソフトキーを使用します。 package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.desktop.NativeApplication; public class StageWebViewExample extends MovieClip{ private var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" ); stage.addEventListener( KeyboardEvent.KEY_DOWN, onKey ); } private function onKey( event:KeyboardEvent ):void { if( event.keyCode == Keyboard.BACK && webView.isHistoryBackEnabled ) { trace("Back."); webView.historyBack(); event.preventDefault(); } if( event.keyCode == Keyboard.SEARCH && webView.isHistoryForwardEnabled ) { trace("Forward."); webView.historyForward(); } } } }
HTMLLoader クラスMark Doherty:AIR on Android: TweetrAppMark Doherty:OAuth SupportStageWebView オブジェクトで Flash Player プラグインおよびその他のプラグインを有効にするfocusOut StageWebView がフォーカスを放すときに送出されます。flash.events.FocusEvent StageWebView がフォーカスを放すときに送出されます。 focusIn この StageWebView オブジェクトがフォーカスを受け取るときに送出されます。flash.events.FocusEvent この StageWebView オブジェクトがフォーカスを受け取るときに送出されます。 error エラーが発生したことを通知します。flash.events.ErrorEvent エラーが発生したことを通知します。 complete loadString() または loadURL() メソッドによって要求された最後のロード処理が完了したことを通知します。flash.events.Event.COMPLETEflash.events.EventloadString() または load() メソッドによって要求された最後のロード処理が完了したことを通知します。 loadString() または loadURL() メソッドによって要求された最後のロード処理が完了したことを通知します。 locationChanging StageWebView オブジェクトの location プロパティが変更されることを通知します。flash.events.LocationChangeEvent.LOCATION_CHANGINGflash.events.LocationChangeEventStageWebView オブジェクトの location プロパティが変更されることを通知します。 StageWebView オブジェクトの location プロパティが変更されることを通知します。

locationChanging イベントが送出されるのは、HTML コンテンツ、またはユーザーがリンクをクリックしたときなどに StageWebView オブジェクト内で実行されるコードから、位置の変更が開始されるときのみです。デフォルトで、新しい場所はこの StageWebView オブジェクトに表示されます。デフォルトの動作をキャンセルするには、イベントオブジェクトの preventDefault() メソッドを呼び出します。例えば、イベントオブジェクトの location プロパティに基づいて、システムブラウザーのページを開くには、flash.net.navigateToURL() 関数を使用します

次のメソッドで位置を変更した場合、locationChanging イベントは送出されません。

  • historyBack()
  • historyForward()
  • historyGo()
  • loadString()
  • loadURL()
  • reload()
locationChange StageWebView オブジェクトの location プロパティが変更されたことを通知します。flash.events.LocationChangeEvent.LOCATION_CHANGEflash.events.LocationChangeEventStageWebView オブジェクトの location プロパティが変更されたことを通知します。 StageWebView オブジェクトの location プロパティが変更されたことを通知します。

イベントはキャンセルできません。

StageWebView StageWebView オブジェクトを作成します。 StageWebView オブジェクトを作成します。

オブジェクトがステージにアタッチされるまで、および viewPort が設定されるまで、オブジェクトは非表示です。

assignFocus この StageWebView オブジェクト内のコンテンツにフォーカスを割り当てます。directionStringnone表示されるコンテンツの最初または最後のフォーカス可能なオブジェクトが、フォーカスを受け取るかどうかを指定します。 この StageWebView オブジェクト内のコンテンツにフォーカスを割り当てます。

Direction 値は FocusDirection クラスに定義され、"bottom"、"none" および "top" を含みます。

FocusDirection
dispose この StageWebView オブジェクトを破棄します。 この StageWebView オブジェクトを破棄します。

dispose() の呼び出しはオプションです。この StageWebView インスタンスへの参照を維持しない場合、ガベージコレクションの対象になります。dispose() の呼び出しによって、ガベージコレクションを早期に、または都合のよいタイミングで実行できます。

drawViewPortToBitmapData StageWebView のビューポートをビットマップに描画します。 ビットマップの幅または高さは、ビューポートの幅または高さとは異なります。 ArgumentErrorArgumentErrorビットマップが null です。 ErrorErrorbitmapflash.display:BitmapDataStageWebView のビューポートの可視部分を描画する対象の BitmapData オブジェクト。 StageWebView のビューポートをビットマップに描画します。

StageWebView オブジェクトの上にコンテンツを表示するためにビットマップをキャプチャしてステージを null に設定します。

次の例では、google と facebook の 2 つのラベルを表示します。ラベル上をクリックすると、対応する Web ページがキャプチャされ、ステージ上のスナップショットとして表示されます。 package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.*; import flash.geom.Rectangle; import flash.media.StageWebView; import flash.net.*; import flash.text.TextField; public class stagewebview1 extends Sprite { public var webView:StageWebView = new StageWebView(); public var textGoogle:TextField=new TextField(); public var textFacebook:TextField=new TextField(); public function stagewebview() { textGoogle.htmlText="<b>Google</b>"; textGoogle.x=300; textGoogle.y=-80; addChild(textGoogle); textFacebook.htmlText="<b>Facebook</b>"; textFacebook.x=0; textFacebook.y=-80; addChild(textFacebook); textGoogle.addEventListener(MouseEvent.CLICK,goGoogle); textFacebook.addEventListener(MouseEvent.CLICK,goFaceBook); webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); } public function goGoogle(e:Event):void { webView.loadURL("http://www.google.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function goFaceBook(e:Event):void { webView.loadURL("http://www.facebook.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function handleLoad(e:Event):void { var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); webView.drawViewPortToBitmapData(bitmapData); var webViewBitmap:Bitmap=new Bitmap(bitmapData); addChild(webViewBitmap); } } }
historyBack 参照履歴の前のページに移動します。 参照履歴の前のページに移動します。 historyForward 参照履歴の次のページに移動します。 参照履歴の次のページに移動します。 loadString 指定した HTML 文字列を読み込み、表示します。textString表示する HTML または XHTML コンテンツの文字列。 mimeTypeStringtext/htmlコンテンツの MIME タイプ("text/html" または "application/xhtml+xml")。 指定した HTML 文字列を読み込み、表示します。

loadString() メソッドを使用すると、location は "about:blank" とレポートされます。HTML 文字列内の URL には、標準の URI スキームのみを使用できます。AIR URI スキームの "app:" と "app-storage:" は使用できません。

HTML コンテンツに、画像ファイルなどのローカルリソースを読み込むことはできません。XMLHttpRequests は使用できません。

"text/html" および "application/xhtml+xml" MIME タイプのみがサポートされます。

次の例では、ステージを塗るために StageWebView オブジェクトを設定します。この例では、loadString() メソッドを使用して HTML ページをロードします。 var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); var htmlString:String = "<!DOCTYPE HTML>" + "<html>" + "<body>" + "<h1>Example</h1>" + "<p>King Phillip cut open five green snakes.</p>" + "</body>" + "</html>"; webView.loadString( htmlString, "text/html" );
loadURL 指定した URL のページを読み込みます。urlString 指定した URL のページを読み込みます。

URL に使用できる URL スキームは、http:、https:、file:、data: および javascript: です。file: スキームで読み込まれるコンテンツは、他のローカルリソースを読み込むことができます。

次の例では、ステージを塗るために StageWebView オブジェクトを設定します。この例では、loadURL() メソッドを使用して Web サイトをロードします。

注意:Android では、リモート URL をロードするために、AIR アプリケーション記述子で INTERNET 権限を指定する必要があります。

var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" );
reload 現在のページを再読み込みします。 現在のページを再読み込みします。 stop 現在の読み込み操作を中止します。 現在の読み込み操作を中止します。 isHistoryBackEnabled 参照履歴に前のページがあるかどうかをレポートします。Boolean 参照履歴に前のページがあるかどうかをレポートします。 isHistoryForwardEnabled 参照履歴に次のページがあるかどうかをレポートします。Boolean 参照履歴に次のページがあるかどうかをレポートします。 isSupported 現在のデバイスで StageWebView クラスがサポートされているかどうかをレポートします。Boolean 現在のデバイスで StageWebView クラスがサポートされているかどうかをレポートします。 location 現在の場所の URL。String 現在の場所の URL。 stage この StageWebView オブジェクトを表示するステージ。flash.display:Stage この StageWebView オブジェクトを表示するステージ。

この StageWebView オブジェクトを非表示にするには、stagenull に設定します。

title HTML タイトル値。String HTML タイトル値。 viewPort StageWebView オブジェクトを表示するステージの領域。flash.geom:RectangleRectangle 値が無効です。 RangeErrorRangeError StageWebView オブジェクトを表示するステージの領域。
VideoStatus このクラスは、ビデオで可能なデコードレベルを説明する列挙を定義します。ビデオで可能なデコードレベルを説明する列挙。 Object このクラスは、ビデオで可能なデコードレベルを説明する列挙を定義します。 ACCELERATED ハードウェアアクセラレーションによる(GPU)ビデオデコードを示します。acceleratedStringハードウェアアクセラレーションによる(GPU)ビデオデコードを示します。 ハードウェアアクセラレーションによる(GPU)ビデオデコードを示します。 SOFTWARE ソフトウェアビデオデコードを示します。softwareStringソフトウェアビデオデコードを示します。 ソフトウェアビデオデコードを示します。 UNAVAILABLE ビデオデコードがサポートされていません。unavailableStringビデオがサポートされていません。 ビデオデコードがサポートされていません。 MediaPromise MediaPromise クラスは、メディアオブジェクトを配信するプロミスを示します。flash.desktop:IFilePromiseflash.events:EventDispatcher MediaPromise クラスは、メディアオブジェクトを配信するプロミスを示します。

MediaEvent オブジェクトの data プロパティは MediaPromise インスタンスです。MediaPromise メソッドを使用して、プロミス済みメディアオブジェクトにアクセスできます。ただし、サポートされるメディアフォーマットには画像とビデオが含まれます。

MediaPromise オブジェクトを作成できません。new MediaPromise() を呼び出すとランタイムエラーが発生します。

MediaEventIFilePromiseLoader.LoadFilePromise()IDataInputCameraRoll.browseForImage()CameraUIcomplete MediaPromise オブジェクトは、すべてのデータが読み込まれたときに、complete イベントを送出します。flash.events.Event.COMPLETEflash.events.Event MediaPromise オブジェクトは、すべてのデータが読み込まれたときに、complete イベントを送出します。このイベントは、基礎となるストリームで使用できるデータがなくなったことを示します。

complete イベントは、同期データソースから送出されません。

progress データが使用できるようになると、MediaPromise オブジェクトは progress イベントを送出します。flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent データが使用できるようになると、MediaPromise オブジェクトは progress イベントを送出します。

最後を除くすべての progress イベントの bytesTotal プロパティ値は 0 です。すべてのデータを即時に使用できる場合、progress イベントは送出されません。同期データソースから progress イベントは送出されません。

ioError 基礎となるデータストリームを読み取るときにエラーが発生する場合、MediaPromise オブジェクトは ioError イベントを送出します。flash.events.IOErrorEvent.IOERRORflash.events.IOErrorEvent 基礎となるデータストリームを読み取るときにエラーが発生する場合、MediaPromise オブジェクトは ioError イベントを送出します。このイベントの送出後は、データを読み取ることはできません。 close 基礎となるデータストリームが閉じられると、MediaPromise オブジェクトは close イベントを送出します。flash.events.Event.CLOSEflash.events.Event 基礎となるデータストリームが閉じられると、MediaPromise オブジェクトは close イベントを送出します。 close データソースを閉じます。 データソースを閉じます。 open 基礎となるデータソースを開くと、IDataInput インスタンスが読み取り可能になります。flash.utils:IDataInput 基礎となるデータソースを開くと、IDataInput インスタンスが読み取り可能になります。

基礎となるデータソースが非同期の場合、MediaPromise オブジェクトは progress および complete イベントを送出し、データが読み取り可能かどうかを示します。データソースが同期している場合、すべてのデータは即時に使用可能なので、これらのイベントは送出されません。

注意:データを手動で読み取る代わりに、Loader クラスの loadFilePromise() メソッドを使用して、MediaPromise オブジェクトを読み込むことができます。

Loader.loadFilePromise()
reportError エラーをレポートするためにランタイムで使用されます。eflash.events:ErrorEvent送出するエラーイベント。 エラーをレポートするためにランタイムで使用されます。

アプリケーションコードでこのメソッドを呼び出さないでください。

file メディアオブジェクトを示す File インスタンス(存在する場合)。flash.filesystem:File メディアオブジェクトを示す File インスタンス(存在する場合)。

基礎となるデータソースがファイルベースで、ファイルからアプリケーションにアクセス可能な場合、このプロパティは File オブジェクトを表します。それ以外の場合、プロパティは null です。

isAsync 基礎となるデータソースが非同期か同期しているかをレポートします。Boolean 基礎となるデータソースが非同期か同期しているかをレポートします。

mediaType メディアの一般的なタイプ(画像またはビデオ)。String メディアの一般的なタイプ(画像またはビデオ)。

MediaType クラスの定数で、このプロパティに指定できる値を定義します。

  • MediaType.IMAGE
  • MediaType.VIDEO
MediaType
relativePath メディアオブジェクトのファイル名(存在する場合)。String メディアオブジェクトのファイル名(存在する場合)。

ファイル名を使用できるのは、基礎となるデータソースがファイルベースで、ファイルからアプリケーションにアクセス可能な場合です。それ以外の場合、プロパティは null です。

SoundLoaderContext SoundLoaderContext クラスはサウンドをロードするファイルのセキュリティチェックを提供します。Object SoundLoaderContext クラスはサウンドをロードするファイルのセキュリティチェックを提供します。SoundLoaderContext オブジェクトは、コンストラクターと Sound クラスの load() メソッドにパラメーターとして渡されます。

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

  • 呼び出し元ファイルがネットワークサンドボックスにあり、ロードするサウンドファイルがローカルにある場合、サウンドのロードおよび再生はできません。
  • 呼び出し元がローカルにあり、リモートサウンドのロードおよび再生を試行する場合、デフォルトでは、サウンドのロードや再生ができません。これを行うには、ユーザーが明示的な許可を与える必要があります。
  • サウンドを処理する特定の操作が制限されます。ロードされたサウンドのデータには、URL ポリシーファイルを実装していない限り、別のドメインに存在する ファイルからアクセスできないことに注意してください。この制限の対象となるサウンド関連の API は Sound.id3 プロパティおよび SoundMixer.computeSpectrum() メソッド、SoundMixer.bufferTime メソッド、SoundTransform() メソッドです。

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

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

SoundLoaderContext 新しいサウンドローダーコンテキストオブジェクトを作成します。bufferTimeNumber1000サウンドのストリーミングを開始するまでに、バッファーにストリーミングサウンドをプリロードする秒数です。 checkPolicyFileBooleanfalseオブジェクトのロード時に URL ポリシーファイルの存在を確認するかどうかを指定します(確認する場合は true)。 新しいサウンドローダーコンテキストオブジェクトを作成します。 次の例では、ロードされるサウンドのバッファーが 3 秒に設定されます。

SoundLoaderContext オブジェクトの 1 つ目のパラメーター(context)を使用して、バッファーのデフォルト値(1 秒)を 3 秒に増やしています。 値はミリ秒単位です。SoundLoaderContext オブジェクトの 2 つ目のパラメーターが true に設定されている場合、オブジェクトのロード時にクロスドメインポリシーファイルが調べられます。ここでは、デフォルト値の false に設定されているため、ポリシーファイルは調べられません。 サウンドオブジェクトの load() メソッドによってコンテキスト設定が使用され、サウンドがストリームを開始する前に、バッファーにストリーミングサウンドをプリロードするために 3 秒間待機します。アドビ システムズ社のポッドキャストである URLRequest オブジェクトによってファイルの位置が決定されます。サウンドファイルのロード中に IOErrorEvent.IO_ERROR エラーが発生すると、errorHandler() メソッドが呼び出されます。

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.events.IOErrorEvent; public class SoundLoaderContextExample extends Sprite { public function SoundLoaderContextExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); var context:SoundLoaderContext = new SoundLoaderContext(3000, false); snd.load(req, context); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
bufferTime サウンドのストリーミングを開始するまでに、バッファーにストリーミングサウンドをプリロードするミリ秒数です。1000Number サウンドのストリーミングを開始するまでに、バッファーにストリーミングサウンドをプリロードするミリ秒数です。

SoundLoaderContext.bufferTime の値を、グローバル SoundMixer.bufferTime プロパティを設定してオーバーライドすることはできません。SoundMixer.bufferTime プロパティは SWF ファイルに埋め込まれたストリーミングサウンドのバッファー時間には影響しますが、動的に作成される Sound オブジェクト(ActionScript で作成される Sound オブジェクト)には影響しません。

checkPolicyFile サウンドのロードを開始する前に、アプリケーションが、ロードされるサウンドのサーバーからの URL ポリシーファイルのダウンロードを試行するかどうかを指定します。falseBoolean サウンドのロードを開始する前に、アプリケーションが、ロードされるサウンドのサーバーからの URL ポリシーファイルのダウンロードを試行するかどうかを指定します。このプロパティは、呼び出し元のファイル自体のドメインの外部から Sound.load() メソッドを使用してロードされたサウンドに適用されます。

呼び出し元のファイル自体のドメインの外部からサウンドをロードし、呼び出し元のファイルのコードがサウンドのデータに低レベルアクセスを必要とする場合は、このプロパティを true に設定します。サウンドデータへの低レベルアクセスの例です。ID3Info オブジェクトを取得するための Sound.id3 プロパティへの参照、またはロードされたサウンドからサウンドサンプリングを取得する SoundMixer.computeSpectrum() メソッドの呼び出しが含まれます。ロード時に checkPolicyFile プロパティを true に設定せずにサウンドデータにアクセスしようとした場合、必要なポリシーファイルがダウンロードされていないために SecurityError 例外を受け取る場合があります。

ロードするサウンドデータへの低レベルのアクセスを必要としない場合は、checkPolicyFiletrue に設定しないでください。ポリシーファイルの確認はネットワーク帯域幅を消費し、ダウンロードの開始が遅れる場合があるため、必要な場合にのみ行ってください。

Sound.load() を呼び出すときに SoundLoaderContext.checkPolicyFiletrue に設定すると、Flash Player または AIR は、関連する URL ポリシーファイルを正常にダウンロードするか、指定されたサウンドのダウンロードを開始する前に、そのようなポリシーファイルが存在しないことを判別する必要があります。ポリシーファイルの存在を確認するため、Flash Player または AIR は次のアクションをこの順番で実行します。

  • Flash Player または AIR は、既にダウンロードされているポリシーファイルを考慮します。
  • Flash Player または AIR は、Security.loadPolicyFile() の呼び出しで指定された保留されているポリシーファイルのダウンロードを試行します。
  • Flash Player または AIR は、サウンドの URL に対応するデフォルトの場所、/crossdomain.xmlURLRequest.url と同じサーバー)からポリシーファイルをダウンロードしようとします。 サウンドの URL は URLRequest オブジェクトの url プロパティで指定します。URLRequest オブジェクトは Sound.load() または Sound() コンストラクター関数に渡されます。

どのような場合でも、Flash Player または AIR では、適切なポリシーファイルがサウンドのサーバー上に存在していること、ポリシーファイルの場所に基づいて URLRequest.url にあるサウンドファイルへのアクセスが可能であること、およびポリシーファイルの <allow-access-from> タグによって呼び出し元ファイルのドメインによるサウンドへのアクセスが許可されていることが必要となります。

checkPolicyFiletrue に設定した場合、Flash Player または AIR は、ポリシーファイルが検証されるまで待機してからサウンドをロードします。 サウンドデータに対する低レベルの操作(Sound.id3 の呼び出しまたは SoundMixer.computeSpectrum() の呼び出しなど)は、Sound オブジェクトから progress イベントおよび complete イベントが送出されるまで待つ必要があります。

checkPolicyFiletrue に設定していて、適切なポリシーファイルが見つからない場合は、ポリシーファイルを必要とする操作を実行するまでエラーは表示されません。ポリシーファイルが必要になると、Flash Player または AIR は SecurityError 例外をスローします。 complete イベントを受け取ると、Sound.id3 の値(try ブロック内)を取得して SecurityError がスローされたかどうかを確認し、関連するポリシーファイルが見つかったかどうかをテストできます。

サーバーサイド HTTP リダイレクトを使用する URL からサウンドをダウンロードする場合は、checkPolicyFile に注意してください。Flash Player または AIR は、URLRequest オブジェクトの url プロパティに対応するポリシーファイルを取得しようとします。URLRequest オブジェクトは Sound.load() に渡されます。 最終的なサウンドファイルが HTTP リダイレクトによって別の URL から取得される場合、最初にダウンロードされたポリシーファイルはサウンドの最終的な URL(セキュリティ判定においてはこの URL が重要となります)に適用できないことがあります。

このような状況になった場合の解決方法が 1 つあります。progress イベントまたは complete イベントを受け取った後、Sound.url プロパティの値を調べることができます。ここには、サウンドの最終的な URL が格納されています。次に、サウンドの最終的な URL に基づいて算出したポリシーファイルの URL で Security.loadPolicyFile() メソッドを呼び出します。最後に、例外がスローされなくなるまで Sound.id3 の値をポーリングします。

これは、AIR アプリケーションサンドボックス内のコンテンツには適用されません。アプリケーションサンドボックス内のコンテンツは、起点に関係なく、常にプログラムによってサウンドコンテンツにアクセスします。

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

flash.media.Sound.load()flash.media.Sound.id3flash.media.SoundMixer.computeSpectrum()flash.media.Sound.urlflash.system.Security.loadPolicyFile()
SoundChannel SoundChannel クラスはアプリケーション内でサウンドを制御します。flash.events:EventDispatcher SoundChannel クラスはアプリケーション内でサウンドを制御します。サウンドはすべてサウンドチャンネルに割り当てられます。アプリケーションでは、複数のチャンネルを組み合わせて使用することができます。 SoundChannel クラスには、stop() メソッド、チャンネルの振幅(ボリューム)を監視するためのプロパティ、および SoundTransform オブジェクトをチャンネルに割り当てるためのプロパティがあります。 次の例では MP3 ファイルがロードされて再生され、それによって発生するサウンドイベントに関する情報が表示されます。Timer オブジェクトによって、再生ヘッドの位置に関する更新情報が、50 ミリ秒ごとに提供されます。この例を実行するには、MySound.mp3 ファイルを SWF ファイルと同じディレクトリに配置します。 package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.utils.Timer; public class SoundChannelExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundChannelExample() { var request:URLRequest = new URLRequest(url); soundFactory = 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); channel = soundFactory.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); positionTimer = new Timer(50); positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler); positionTimer.start(); } private function positionTimerHandler(event:TimerEvent):void { trace("positionTimerHandler: " + channel.position.toFixed(2)); } 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); positionTimer.stop(); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } private function soundCompleteHandler(event:Event):void { trace("soundCompleteHandler: " + event); positionTimer.stop(); } } } SoundSoundTransformsoundComplete サウンドの再生が終了したときに送出されます。flash.events.Event.SOUND_COMPLETEflash.events.Event サウンドの再生が終了したときに送出されます。 次の例では、ユーザーが再生リストから曲を選択し、「再生」を選択して、選択した順序で曲を再生します。

コンストラクターには、テキストフィールドが定義され、曲リスト、および再生を選択するための行が保持されます。(通常、曲の再生にはボタンが使用され、曲リストにはリストボックスが使用されます。)選択された曲の行の書式をイタリックに変更するテキストフォーマットオブジェクトが定義されます。ユーザーがテキストフィールドを選択すると、clickHandler() メソッドが呼び出されます。

clickHandler() メソッドでは、テキストフィールドオブジェクトの getLineIndexAtPoint() メソッドによってユーザーが選択した行のインデックスが返されます。 行のインデックスを使用して、getLineText() メソッドによってテキストの内容が取得されます。次に、if ステートメントで、ユーザーが曲の再生と再生リストへの追加のいずれを選択したかがチェックされます。 ユーザーが再生を選択し、曲が選択された場合、マウスのクリックに対するイベントリスナーが削除され、playNext() メソッドが呼び出されて、曲の再生が開始されます。ユーザーが曲のタイトルを選択した場合、行の内容が songList 配列に追加され、行の書式がイタリックに設定されます。

playNext() メソッドによって配列リストが反復処理され、各曲がロードおよび再生されます。曲のサウンドチャンネルへの割り当ても行われます。曲の再生が終了し、Event.SOUND_COMPLETE イベントが送出されるときに応答するために、そのサウンドチャンネルに対するイベントリスナーが追加されます。次に、soundCompleteHandler() メソッドによって playNext() メソッドが呼び出され、次の曲が再生されます。この処理は、配列にリストされたすべての曲の再生が完了するまで続行します。

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.text.TextFormat; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; public class SoundChannel_event_soundCompleteExample extends Sprite { private var channel:SoundChannel = new SoundChannel(); private var songList:Array = new Array(); private var listTextField:TextField = new TextField(); private var songFormat:TextFormat = new TextFormat(); private var arrayIndex:int = 0; private var songSelected:Boolean = false; public function SoundChannel_event_soundCompleteExample() { listTextField.autoSize = TextFieldAutoSize.LEFT; listTextField.border = true listTextField.background = true; listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY"; songFormat.italic = true; listTextField.addEventListener(MouseEvent.CLICK, clickHandler); addChild(listTextField); } private function clickHandler(e:MouseEvent):void { var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY); var line:String = listTextField.getLineText(index); var firstIndex:uint = listTextField.getLineOffset(index); var playLine:uint = listTextField.numLines - 1; if((index == playLine) && (songSelected == true)) { listTextField.removeEventListener(MouseEvent.CLICK, clickHandler); playNext(); } else if (index != playLine) { songList.push(line.substr(0, (line.length - 1))); listTextField.setTextFormat(songFormat, firstIndex, (firstIndex + listTextField.getLineLength(index))); songSelected = true; } } private function playNext():void { if(arrayIndex < songList.length) { var snd:Sound = new Sound(); snd.load(new URLRequest(songList[arrayIndex])); channel = snd.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); arrayIndex++; } else { songSelected = false; while(arrayIndex > 0) { songList.pop(); arrayIndex--; } } } private function soundCompleteHandler(e:Event):void { playNext(); } private function errorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
stop チャンネルで再生しているサウンドを停止します。 チャンネルで再生しているサウンドを停止します。 次の例では、ユーザーがサウンドファイルを一時停止および再生できます。

コンストラクターで、サウンドファイルがロードされます。(この例では、ファイルが SWF ファイルと同じディレクトリにあると想定しています。)ユーザーがサウンドの再生または一時停止を実行するボタンとして、テキストフィールドが使用されます。ユーザーが button テキストフィールドを選択すると、clickHandler() メソッドが呼び出されます。

clickHandler() メソッドで、ユーザーが初めてテキストフィールドを選択したときに、サウンドが再生するように設定され、サウンドチャンネルに割り当てられます。 次に、ユーザーが一時停止するテキストフィールドを選択すると、サウンドが再生を停止します。 サウンドチャンネルの position プロパティは、停止時のサウンドの位置を記録します。このプロパティを使用して、ユーザーがテキストフィールドを選択して再生を再開した後、その位置でサウンドが再開されます。 Sound.play() メソッドが呼び出されるたびに、新しい SoundChannel オブジェクトが作成され、channel 変数に割り当てられます。サウンドチャンネルの stop() メソッドを使用してサウンドを一時停止するためには、Sound オブジェクトを SoundChannel オブジェクトに割り当てる必要があります。

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLLoader; import flash.net.URLRequest; import flash.text.TextField; import flash.events.MouseEvent; import flash.text.TextFieldAutoSize; public class SoundChannel_stopExample extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var button:TextField = new TextField(); public function SoundChannel_stopExample() { var req:URLRequest = new URLRequest("MySound.mp3"); snd.load(req); button.x = 10; button.y = 10; button.text = "PLAY"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.CENTER; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { var pausePosition:int = channel.position; if(button.text == "PLAY") { channel = snd.play(pausePosition); button.text = "PAUSE"; } else { channel.stop(); button.text = "PLAY"; } } } }
leftPeak 左チャンネルの現在の振幅(ボリューム)、0(無音)~ 1(完全な振幅)です。Number 左チャンネルの現在の振幅(ボリューム)、0(無音)~ 1(完全な振幅)です。 position サウンドの再生中、position プロパティは、サウンドファイル内で再生されている現在のポイント(ミリ秒単位)を示します。Number サウンドの再生中、position プロパティは、サウンドファイル内で再生されている現在のポイント(ミリ秒単位)を示します。サウンドを停止または一時停止すると、position プロパティはサウンドファイル内で再生された最後のポイントを示します。

一般的な使用方法は、サウンドを停止したときに position プロパティの値を保存することです。その保存した位置からサウンドを再起動して、後でサウンドを再開できます。

サウンドをループしている場合、サウンド位置は各ループの最初に 0 にリセットされます。

rightPeak 右チャンネルの現在の振幅(ボリューム)、0(無音)~ 1(完全な振幅)です。Number 右チャンネルの現在の振幅(ボリューム)、0(無音)~ 1(完全な振幅)です。 soundTransform サウンドチャンネルに割り当てられた SoundTransform オブジェクトです。flash.media:SoundTransform サウンドチャンネルに割り当てられた SoundTransform オブジェクトです。SoundTransform オブジェクトには、ボリューム、パン、左スピーカーの割り当て、および右スピーカーの割り当てを設定するプロパティが含まれます。 SoundTransform
SoundMixer SoundMixer クラスには、静的プロパティやアプリケーションのグローバルサウンドコントロールのメソッドが含まれます。Object SoundMixer クラスには、静的プロパティやアプリケーションのグローバルサウンドコントロールのメソッドが含まれます。SoundMixer クラスは、アプリケーションに埋め込まれたストリーミングサウンドを制御します。動的に作成されるサウンド(つまり、sampleData イベントを送出する Sound オブジェクトに応答して生成されるサウンド)は制御しません。 areSoundsInaccessible セキュリティ上の制限のためにサウンドが使用できないかどうかを調べます。ブール値のストリング表現です。 Boolean セキュリティ上の制限のためにサウンドが使用できないかどうかを調べます。例えば、このメソッドの呼び出し元コンテンツのドメイン以外のドメインからロードされたサウンドは、そのサウンドのサーバー上に、該当するドメインから自ドメインへのアクセスを許可する URL ポリシーファイルが存在していなければ、アクセスできません。サウンドをロードしたり、再生することはできますが、アクセス不可のサウンドに対して、サウンドの ID3 メタデータの取得などの低レベルの操作は実行できません。

アプリケーションセキュリティサンドボックス内の AIR アプリケーションコンテンツでは、このメソッドを呼び出すと常に false が返されます。 すべてのサウンド(他のドメインからロードされたサウンドを含む)は、アプリケーションセキュリティサンドボックス内のコンテンツにアクセスできます。

computeSpectrum()
computeSpectrum 現在のサウンド波形からスナップショットを取得し、指定した ByteArray オブジェクトに配置します。outputArrayflash.utils:ByteArrayサウンドに関連する値を保持する ByteArray オブジェクトです。セキュリティ上の制限のためにサウンドが使用できない場合(areSoundsInaccessible == true)、outputArray オブジェクトは変更されません。すべてのサウンドが停止している場合、outputArray オブジェクトには 0 が詰められます。 FFTModeBooleanfalseサウンドデータに対して最初にフーリエ変換を実行するかどうかを示すブール値です。このパラメーターを true に設定すると、このメソッドは未処理のサウンド波形ではなく周波数スペクトルを返します。周波数スペクトルでは、低い周波数は左側に、高い周波数は右側に表されます。 stretchFactorint0サウンドサンプリングの解像度です。例えば、stretchFactor 値に 0 を設定した場合、データは 44.1 KHz でサンプリングされ、1 の場合は 22.05 KHz、2 の場合は 11.025 KHz となります。 現在のサウンド波形からスナップショットを取得し、指定した ByteArray オブジェクトに配置します。値の形式は正規化された浮動小数値で、範囲は -1.0 ~ 1.0 です。outputArray パラメーターに渡す ByteArray オブジェクトは、新しい値で上書きされます。作成される ByteArray オブジェクトのサイズは 512 に固定され(値は浮動小数値)、最初の 256 個は左チャンネルを表し、次の 256 個は右チャンネルを表します。

注意:このメソッドは、ローカルファイルのセキュリティ制限とドメイン間のデータロードに関する制限に従います。 ローカルファイルを操作する場合、または呼び出し元コンテンツとは異なるドメインに存在するサーバーからロードしたサウンドを操作する場合は、クロスドメインポリシーファイルを使用してサンドボックスの制限に対処しなければならないことがあります。 詳細については、Sound クラスの説明を参照してください。また、このメソッドは、RTMP サーバーと同じドメインに存在するコンテンツから呼び出された場合でも、RTMP ストリームからデータを抽出するために使用することはできません。

このメソッドは、Flash Player 9.0.115.0 以降と Adobe AIR の RTMP 上でサポートされています。サーバーサイドスクリプトで、Flash Media Server 上のストリームへのアクセスを制御することができます。詳細については、Client.audioSampleAccess プロパティおよび Client.videoSampleAccess プロパティのトピック(『Server-Side ActionScript Language Reference for Adobe Flash Media Server』)を参照してください。

次の例では、computeSpectrum() メソッドを使用して、サウンド波形データのグラフィック表現を生成します。

コンストラクターで、サウンドファイルがロードされ、再生に設定されます。この例では、エラー処理はありません。また、サウンドファイルが SWF ファイルと同じディレクトリにあると想定しています。この例では、サウンドの再生中に Event.ENTER_FRAME イベントを待機し、onEnterFrame() メソッドを繰り返しトリガーして、サウンドデータ値のグラフを描画します。サウンドの再生が終了すると、Event.ENTER_FRAME イベントのリスナーを削除することにより、onPlaybackComplete() メソッドによって描画処理が停止されます。

onEnterFrame() メソッドで、computeSpectrum() メソッドによって bytes バイト配列オブジェクトに生のサウンドが保存されます。データは 44.1 KHz でサンプリングされます。512 バイトのデータを含む各バイト配列には、-1 ~ 1 の浮動小数値が含まれます。前半の 256 バイトの値は左チャンネルを表し、後半の 256 バイトの値は右チャンネルを表します。1 つ目の for ループは、前半の 256 バイトのデータ値(左ステレオチャンネル)を読み取り、Graphics.lineTo() メソッドを使用して、各ポイントから次のポイントまでの間に線を描画します。サウンド波形のベクターグラフィック表示は、クラスの Sprite オブジェクトに直接記述されます。バイトストリームから 32 ビット浮動小数点数としてサウンドのバイトが読み取られ、グラフの垂直方向の範囲に適合するようにプロットの高さで乗算されます。幅はチャンネルの長さの 2 倍に設定されます。2 つ目の for ループは、後半の 256 バイトの値(右ステレオチャンネル)を読み取り、逆の順序で線を描画します。g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); メソッドおよび g.lineTo(0, PLOT_HEIGHT); メソッドにより波形のベースラインが描画されます。生成される波形プロットから、鏡像効果が生まれます。

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.text.TextField; public class SoundMixer_computeSpectrumExample extends Sprite { public function SoundMixer_computeSpectrumExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("Song1.mp3"); snd.load(req); var channel:SoundChannel; channel = snd.play(); addEventListener(Event.ENTER_FRAME, onEnterFrame); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); } private function onEnterFrame(event:Event):void { var bytes:ByteArray = new ByteArray(); const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; SoundMixer.computeSpectrum(bytes, false, 0); var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; for (var i:int = 0; i < CHANNEL_LENGTH; i++) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); g.endFill(); g.lineStyle(0, 0xCC0066); g.beginFill(0xCC0066, 0.5); g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); for (i = CHANNEL_LENGTH; i > 0; i--) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } private function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); } } }
areSoundsInaccessible()flash.utils.ByteArrayflash.media.Soundflash.media.SoundLoaderContext.checkPolicyFile
stopAll 再生中のサウンドをすべて停止します。 再生中のサウンドをすべて停止します。

Flash Professional では、このメソッドで再生ヘッドが停止することはありません。ストリーミングするために設定されたサウンドは、そのサウンドが置かれているフレームに再生ヘッドが移動すると再生を再開します。

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

  • デフォルトでは、SoundMixer.stopAll() メソッドを呼び出すと、呼び出し元のオブジェクトと同じセキュリティサンドボックス内にあるサウンドのみを停止します。呼び出し元のオブジェクトと同じサンドボックスから再生を開始しなかったサウンドは、停止されません。
  • サウンドをロードするとき、Sound クラスの load() メソッドを使用すると、SoundLoaderContext オブジェクトである context パラメーターを指定できます。SoundLoaderContext オブジェクトの checkPolicyFile プロパティを true に設定した場合、Flash Player または Adobe AIR は、サウンドのロード元のサーバー上にクロスドメインポリシーファイルがあるかどうかをチェックします。 サーバーにクロスドメインポリシーファイルが存在しており、そのファイルで呼び出し元コンテンツのドメインが許可されている場合、SoundMixer.stopAll() メソッドを使用してロードされたサウンドを停止することができます。許可されていない場合は、停止できません。

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

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

次の例では、stopAll() メソッドを使用して、同時に再生される 2 つのサウンドをミュートします。

コンストラクターで、2 つの異なるサウンドファイルがロードされ、再生するように設定されます。1 つ目のサウンドは、ローカルにロードされ、サウンドチャンネルに割り当てられます。ファイルが SWF ファイルと同じディレクトリにあると想定しています。2 つ目のファイルは、アドビ システムズ社のサイトからロードされ、ストリームされます。SoundMixer.stopAll() メソッドを使用するには、すべてのサウンドがアクセス可能である必要があります。SoundLoaderContext オブジェクトを使用して、クロスドメインポリシーファイルをチェックできます。それぞれのサウンドには、サウンドファイルのロード中に IO エラーが発生した場合に呼び出されるイベントリスナーもあります。muteButton テキストフィールドも作成されます。クリックイベントを待機し、muteButtonClickHandler() メソッドを呼び出します。

muteButtonClickHandler() メソッドで、テキストフィールドの内容が "MUTE" の場合、areSoundsInaccessible() メソッドにより、サウンドミキサーがファイルにアクセスできるかどうかがチェックされます。ファイルがアクセス可能の場合、stopAll() メソッドによってサウンドが停止されます。テキストフィールドをもう一度選択すると、1 つ目のサウンドの再生が開始され、テキストフィールドの内容が再び "MUTE" に変わります。今度は、stopAll() メソッドによって、実行中の 1 つのサウンドがミュートされます。サウンドチャンネルの stop() メソッドを使用して、チャンネルに割り当てられた特定のサウンドを停止することもできます。チャンネルの機能を使用するには、play() メソッドを呼び出すたびに、サウンドをチャンネルに再割り当てする必要があります。

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.events.IOErrorEvent; public class SoundMixer_stopAllExample extends Sprite { private var firstSound:Sound = new Sound(); private var secondSound:Sound = new Sound(); private var muteButton:TextField = new TextField(); private var channel1:SoundChannel = new SoundChannel(); public function SoundMixer_stopAllExample() { firstSound.load(new URLRequest("mySound.mp3")); secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3")); firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler); secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler); channel1 = firstSound.play(); secondSound.play(); muteButton.autoSize = TextFieldAutoSize.LEFT; muteButton.border = true; muteButton.background = true; muteButton.text = "MUTE"; muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler); this.addChild(muteButton); } private function muteButtonClickHandler(event:MouseEvent):void { if(muteButton.text == "MUTE") { if(SoundMixer.areSoundsInaccessible() == false) { SoundMixer.stopAll(); muteButton.text = "click to play only one of sound."; } else { muteButton.text = "The sounds are not accessible."; } } else { firstSound.play(); muteButton.text = "MUTE"; } } private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
bufferTime サウンドのストリーミングを開始するまでに、埋め込まれたストリーミングサウンドをバッファーにプリロードする秒数です。int サウンドのストリーミングを開始するまでに、埋め込まれたストリーミングサウンドをバッファーにプリロードする秒数です。ロードされたサウンドのデータ(バッファー時間も含む)には、クロスドメインポリシーファイルを実装していない限り、別のドメインに存在する SWF ファイルからアクセスできません。セキュリティとサウンドの詳細については、Sound クラスの説明を参照してください。ロードされたサウンドのデータ(バッファー時間も含む)には、クロスドメインポリシーファイルを実装していない限り、別のドメインに存在するファイルのコードからはアクセスできません。ただし、AIR アプリケーションのアプリケーションサンドボックスでは、コードは任意のソースからのサウンドファイルにあるデータにアクセスできます。セキュリティとサウンドの詳細については、Sound クラスの説明を参照してください。

SoundMixer.bufferTime プロパティは SWF に埋め込まれたストリーミングサウンドのバッファー時間のみに影響し、動的に作成される Sound オブジェクト(ActionScript で作成される Sound オブジェクト)には影響しません。SoundMixer.bufferTime の値は、Sound.load() メソッドに渡される SoundLoaderContext オブジェクトで指定されたバッファー時間のデフォルト値に対して、オーバーライドや設定はできません。

Sound
soundTransform グローバルサウンドプロパティを制御する SoundTransform オブジェクトです。flash.media:SoundTransform グローバルサウンドプロパティを制御する SoundTransform オブジェクトです。SoundTransform オブジェクトには、ボリューム、パン、左スピーカーの割り当て、および右スピーカーの割り当てを設定するプロパティが含まれます。このプロパティで使用される SoundTransform オブジェクトは、個々のサウンド設定が適用された後にすべてのサウンドに適用される最終的なサウンド設定を提供します。 SoundTransform
CameraUI CameraUI クラスを使用すると、デバイスのデフォルトのカメラアプリケーションで静止画またはビデオをキャプチャできます。flash.events:EventDispatcher CameraUI クラスを使用すると、デバイスのデフォルトのカメラアプリケーションで静止画またはビデオをキャプチャできます。

launch() メソッドでは、デバイスがデフォルトのカメラアプリケーションを開く必要があります。キャプチャされる画像またはビデオは、complete イベントに対して送出される MediaEvent オブジェクトで使用できます。デフォルトのカメラアプリケーションは多様なフォーマットの画像またはビデオを保存できるため、返されるメディアオブジェクトを読み込んで AIR ランタイムで表示できる保証はありません。

一部のプラットフォームでは、カメラから返されるメディアオブジェクトに、ファイルベースのメディアプロミスとしてアクセスできます。そうでないプラットフォームでは、メディアプロミスがファイルベースではなく、MediaPromise オブジェクトの file および relativePath プロパティが null になっています。これらのプロパティは、複数種類のプラットフォームで実行されるコードでは使用しないようにしてください。

一部のプラットフォームでは、メディアオブジェクトは自動的にデバイスのメディアライブラリに保存されます。デフォルトのカメラアプリケーションで画像やビデオの保存が自動的に行われないプラットフォームでは、CameraRoll addBitmapData() 関数を使用することでメディアオブジェクトを保存できます。

Android では、外部ストレージカードが使用できない場合(ユーザーが USB 大容量ストレージデバイスとしてカードをマウントした場合など)、デフォルトのカメラアプリケーションは開きません。さらに、カメラを起動した AIR アプリケーションはフォーカスを失います。デバイスが少ないリソースで実行される場合、メディアのキャプチャが完了する前に、オペレーティングシステムによって AIR アプリケーションが停止される可能性があります。

AIR プロファイルのサポート:この機能はモバイルデバイスでサポートされますが、デスクトップオペレーティングシステムまたはテレビ用 AIR デバイスではサポートされません。CameraUI.isSupported プロパティを使用して、サポートされているかどうかを実行時にテストすることができます。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

次の例では、CameraUI クラスを使用して、デバイスのデフォルトのカメラアプリケーションを起動します。ユーザーが写真を撮ると、この例では表示リストに画像が配置されます。 package { import flash.desktop.NativeApplication; import flash.display.Loader; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MediaEvent; import flash.media.CameraUI; import flash.media.MediaPromise; import flash.media.MediaType; public class CameraUIStillImage extends MovieClip{ private var deviceCameraApp:CameraUI = new CameraUI(); private var imageLoader:Loader; public function CameraUIStillImage() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraUI.isSupported ) { trace( "Initializing camera..." ); deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured ); deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled ); deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError ); deviceCameraApp.launch( MediaType.IMAGE ); } else { trace( "Camera interface is not supported."); } } private function imageCaptured( event:MediaEvent ):void { trace( "Media captured..." ); var imagePromise:MediaPromise = event.data; if( imagePromise.isAsync ) { trace( "Asynchronous media promise." ); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded ); imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError ); imageLoader.loadFilePromise( imagePromise ); } else { trace( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); showMedia( imageLoader ); } } private function captureCanceled( event:Event ):void { trace( "Media capture canceled." ); NativeApplication.nativeApplication.exit(); } private function asyncImageLoaded( event:Event ):void { trace( "Media loaded in memory." ); showMedia( imageLoader ); } private function showMedia( loader:Loader ):void { this.addChild( loader ); } private function cameraError( error:ErrorEvent ):void { trace( "Error:" + error.text ); NativeApplication.nativeApplication.exit(); } } }
Michael Chaize:Android, AIR, and the Cameracancel ユーザーが画像またはビデオを保存せずに Camera UI を閉じると、cancel イベントが送出されます。flash.events.Event.CANCELflash.events.Event ユーザーが画像またはビデオを保存せずに Camera UI を閉じると、cancel イベントが送出されます。 error デフォルトのカメラを開くことができない場合、error イベントが送出されます。flash.events.ErrorEvent.ERRORflash.events.ErrorEvent デフォルトのカメラを開くことができない場合、error イベントが送出されます。 complete ユーザーが静止画像またはビデオを Camera UI でキャプチャすると、complete イベントが送出されます。flash.events.MediaEvent.COMPLETEflash.events.MediaEvent ユーザーが静止画像またはビデオを Camera UI でキャプチャすると、complete イベントが送出されます。 CameraUI CameraUI オブジェクトを作成します。 CameraUI オブジェクトを作成します。 launch デバイスでデフォルトのカメラアプリケーションを起動します。requestedMediaTypeStringキャプチャするメディアオブジェクトのタイプ。このパラメーターの有効な値は MediaType クラスで定義されています。
  • MediaType.IMAGE
  • MediaType.VIDEO
デバイスでデフォルトのカメラアプリケーションを起動します。

このクラスで静止画像またはビデオをキャプチャできます。ビデオキャプチャでは、デバイスの "Quality Low" camcorder プロファイルを使用します。

launch() メソッドを呼び出すと、デバイスのデフォルトのカメラアプリケーションが呼び出されます。AIR アプリケーションはフォーカスを失い、ユーザーが静止画像をキャプチャするまで、またはビデオのキャプチャが完了するまで待機します。ユーザーが目的のメディアをキャプチャすると、AIR アプリケーションがフォーカスを再取得し、この CameraUI オブジェクトは complete イベントを送出します。ユーザーが操作をキャンセルすると、この CameraUI オブジェクトは代わりに cancel イベントを送出します。

注意:ユーザーが画像またはビデオをキャプチャするまでバックグラウンドで待機しているときに、Android オペレーティングシステムによって AIR アプリケーションがシャットダウンされる可能性があります。この場合、ユーザーはアプリケーションを再起動する必要があります。AIR アプリケーションは、前の画像キャプチャに対して media イベントを送出しません。

complete イベントに対して送出された MediaEvent オブジェクトの data プロパティを使用して、キャプチャ済みメディアファイルにアクセスできます。プロパティは MediaPromise クラスのインスタンスであり、Loader クラスの loadFilePromise() メソッドを使用して、アプリケーションに読み込むことができます。デバイスカメラは多様なフォーマットでキャプチャ済みメディアを保存する可能性があります。この点について、ビデオは特に問題があります。キャプチャ済みメディアを AIR で表示できない場合があります。

MediaTypeMediaPromiseLoader.loadFilePromise()completeflash.events:MediaEventメディアオブジェクトがキャプチャされるときに送出されます。 メディアオブジェクトがキャプチャされるときに送出されます。cancelflash.events:Eventユーザーがメディアオブジェクトをキャプチャせずにネイティブカメラを終了するときに送出されます。 ユーザーがメディアオブジェクトをキャプチャせずにネイティブカメラを終了するときに送出されます。errorflash.events:ErrorEventデフォルトのカメラアプリケーションが使用中の場合に送出されます。 デフォルトのカメラアプリケーションが使用中の場合に送出されます。errorflash.events:ErrorEventAIR アプリケーションがこの関数を呼び出すときにバックグラウンドで実行されている場合に送出されます。 AIR アプリケーションがこの関数を呼び出すときにバックグラウンドで実行されている場合に送出されます。
isSupported 現在のデバイスで CameraUI クラスがサポートされているかどうかをレポートします。Boolean 現在のデバイスで CameraUI クラスがサポートされているかどうかをレポートします。
SoundCodec SoundCodec クラスは、Microphone クラスの codec プロパティの設定で使用される定数値の列挙です。Object SoundCodec クラスは、Microphone クラスの codec プロパティの設定で使用される定数値の列挙です。 NELLYMOSER Nellymoser コーデックをオーディオ圧縮に使用するように指定します。NellyMoserString Nellymoser コーデックをオーディオ圧縮に使用するように指定します。この定数は Microphone.codec プロパティのデフォルト値です。 SPEEX Speex コーデックをオーディオ圧縮に使用するように指定します。SpeexString Speex コーデックをオーディオ圧縮に使用するように指定します。 CameraRoll CameraRoll クラスを使用すると、システムメディアライブラリまたは "camera roll" の画像データにアクセスできます。AIR プロファイルのサポート:この機能はモバイルデバイスでサポートされますが、デスクトップオペレーティングシステムまたは AIR for TV デバイスではサポートされません。flash.events:EventDispatcher CameraRoll クラスを使用すると、システムメディアライブラリまたは "camera roll" の画像データにアクセスできます。

AIR プロファイルのサポート:この機能はモバイルデバイスでサポートされますが、デスクトップオペレーティングシステムまたはテレビ用 AIR デバイスではサポートされません。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

CameraRoll.addBitmapData() メソッドは、画像をデバイスの専用メディアライブラリに追加します。アプリケーションが CameraRoll.addBitmapData() メソッドをサポートしているかどうかを実行時に調べるには、CameraRoll.supportsAddBitmapData プロパティの値を確認します。

CameraRoll.browseForImage() メソッドは、ユーザーがメディアライブラリの画像を選択できる画像選択ダイアログを開きます。ユーザーが画像を選択すると、CameraRoll オブジェクトは select イベントを送出します。選択した画像にアクセスするには、このイベントに対して送出された MediaEvent オブジェクトを使用します。アプリケーションが CameraRoll.browseForImage() メソッドをサポートするかどうかをランタイムに確認するには、CameraRoll.supportsBrowseForImage プロパティを確認します。

cancel 画像を選択せずにユーザーが画像の参照操作をキャンセルすると送出されます。flash.events.Event.CANCELflash.events.Event 画像を選択せずにユーザーが画像の参照操作をキャンセルすると送出されます。 select ユーザーがデバイスメディアライブラリの画像を選択するときに送出されます。flash.events.MediaEvent.SELECTflash.events.MediaEvent ユーザーがデバイスメディアライブラリの画像を選択するときに送出されます。

このイベントに対して送出される MediaEvent オブジェクトで、選択したメディアにアクセスできます。

error エラーが発生したときに error イベントが送出されます。flash.events.ErrorEvent.ERRORflash.events.ErrorEvent エラーが発生したときに error イベントが送出されます。

次のようなエラーの原因があります。

  • 画像ブラウザーを開くことができません。
  • 画像ブラウザーが使用中です。
  • AIR アプリケーションがバックグラウンドで実行されている場合、画像の参照が試行されます。
  • 画像をメディアライブラリに追加できません。
  • デバイスでサポートされないメソッドが呼び出されました。
complete addBitmapData() 操作が正常に完了したことを通知します。flash.events.Event.COMPLETEflash.events.Event addBitmapData() 操作が正常に完了したことを通知します。 CameraRoll CameraRoll オブジェクトを作成します。 CameraRoll オブジェクトを作成します。

ActionScript でサポートされるメディアライブラリは 1 つのみです。すべての CameraRoll オブジェクトは同じ画像リポジトリに保存されます。

addBitmapData デバイスカメラロールに画像を追加します。bitmapDataflash.display:BitmapDataカメラロールに転送する画像を含む BitmapData オブジェクト。 デバイスカメラロールに画像を追加します。

アプリケーションが CameraRoll.addBitmapData() メソッドをサポートしているかどうかを実行時に調べるには、CameraRoll.supportsAddBitmapData プロパティの値を確認します。

browseForImage ユーザーがデバイスカメラロールから既存のイメージを選択できるイメージブラウザーダイアログを開きます。 ユーザーがデバイスカメラロールから既存のイメージを選択できるイメージブラウザーダイアログを開きます。

ユーザーがイメージを選択すると、CameraRoll インスタンスは MediaEvent オブジェクトを含む select イベントを送出します。MediaEvent オブジェクトの data プロパティを使用して画像を読み込みます。data プロパティは MediaPromise オブジェクトであり、Loader クラスの loadFilePromise() メソッドを使用して読み込むことができます。

アプリケーションが CameraRoll.browseForImage() メソッドをサポートするかどうかをランタイムに確認するには、CameraRoll.supportsBrowseForImage プロパティを確認します。

package flash.media.examples { import flash.media.CameraRoll; import flash.media.MediaPromise; import flash.media.MediaType; import flash.events.MediaEvent; import flash.events.Event; import flash.display.Loader; import flash.display.Sprite; import flash.events.IOErrorEvent; import flash.display.StageAlign; import flash.display.StageScaleMode; public class CameraRollTest extends Sprite{ private var mediaSource:CameraRoll = new CameraRoll(); public function CameraRollTest() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraRoll.supportsBrowseForImage ) { log( "Browsing for image..." ); mediaSource.addEventListener( MediaEvent.SELECT, imageSelected ); mediaSource.addEventListener( Event.CANCEL, browseCanceled ); mediaSource.browseForImage(); } else { log( "Browsing in camera roll is not supported."); } } private var imageLoader:Loader; private function imageSelected( event:MediaEvent ):void { log( "Image selected..." ); var imagePromise:MediaPromise = event.data; imageLoader = new Loader(); if( imagePromise.isAsync ) { log( "Asynchronous media promise." ); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, imageLoaded ); imageLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, imageLoadFailed ); imageLoader.loadFilePromise( imagePromise ); } else { log( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); this.addChild( imageLoader ); } } private function browseCanceled( event:Event ):void { log( "Image browse canceled." ); } private function imageLoaded( event:Event ):void { log( "Image loaded asynchronously." ); this.addChild( imageLoader ); } private function imageLoadFailed( event:Event ):void { log( "Image load failed." ); } private function log( text:String ):void { trace( text ); } } }
MediaEventMediaPromiseLoader.loadFilePromise()selectflash.events:MediaEventユーザーが画像を選択すると送出されます。 ユーザーが画像を選択すると送出されます。cancelflash.events:Eventユーザーが参照操作をキャンセルすると送出されます。 ユーザーが参照操作をキャンセルすると送出されます。errorflash.events:ErrorEventデフォルトの画像ブラウザーアプリケーションが使用中の場合に送出されます。 デフォルトの画像ブラウザーアプリケーションが使用中の場合に送出されます。errorflash.events:ErrorEventAIR アプリケーションがこの関数を呼び出すときにバックグラウンドで実行されている場合に送出されます。 AIR アプリケーションがこの関数を呼び出すときにバックグラウンドで実行されている場合に送出されます。
supportsAddBitmapData CameraRoll.addBitmapData() メソッドがサポートされているかどうか。Boolean CameraRoll.addBitmapData() メソッドがサポートされているかどうか。現在のところ、この機能はモバイルデバイスの AIR アプリケーションでのみサポートされます。 supportsBrowseForImage CameraRoll.browseForImage() メソッドがサポートされるかどうかをレポートします。BooleanCameraRoll.browseForImage() メソッドがサポートされるかどうかをレポートします。 CameraRoll.browseForImage() メソッドがサポートされるかどうかをレポートします。現在のところ、この機能はモバイルデバイスの AIR アプリケーションでのみサポートされます。
Microphone Microphone クラスを使用すると、マイクからのオーディオを監視またはキャプチャできます。flash.events:EventDispatcher Microphone クラスを使用すると、マイクからのオーディオを監視またはキャプチャできます。

Microphone インスタンスへの参照を取得するには、Microphone.getMicrophone() メソッドまたは Microphone getEnhancedMicrophone() メソッドを使用します。拡張された Microphone インスタンスは、音声エコー除去機能を実行できます。ヘッドセットを必要としないリアルタイムオーディオ/ビデオアプリケーションを作成するには、音声エコー除去機能を使用します。

リアルタイムチャットアプリケーションの作成

リアルタイムチャットアプリケーションを作成するには、オーディをキャプチャして、Flash Media Server に送信します。NetConnection クラスと NetStream クラスを使用して、オーディオストリームを Flash Media Server に送信します。Flash Media Server はオーディオを他のクライアントにブロードキャストできます。ヘッドセットを必要としないチャットアプリケーションを作成するには、音声エコー除去機能を使用します。音声エコー除去機能によって、マイクから入ったオーディオがスピーカーに到達し出力され、もう一度マイクに入ってきた場合に発生するフィードバックループが防止されます。音声エコー除去機能を使用するには、Microphone.getEnhancedMicrophone() メソッドを呼び出して、Microphone インスタンスへの参照を取得します。MicrophoneEnhancedOptions クラスのインスタンスに Microp one.enhancedOptions を設定して、設定を構成します。

マイク音声のローカルでの再生

ローカルのコンピューターまたはデバイスの音声出力に対してマイク音声を直接ルーティングするには、setLoopback() メソッドを呼び出します。制御されていないオーディオフィードバックは危険な可能性があり、マイク入力で音声出力が取得できる場合は常に発生する可能性があります。setUseEchoSuppression() によってフィードバックの増幅のリスクは軽減されますが、なくなりません。

マイク音声のキャプチャ(ローカルでの記録または処理用)

マイク音声をキャプチャするには、Microphone インスタンスによって送出される sampleData イベントを監視します。このイベントに対して送出される SampleDataEvent オブジェクトには、音声データが含まれます。

ビデオのキャプチャについて詳しくは、Camera クラスのトピックを参照してください。

ランタイムマイクのサポート

Microphone クラスは、モバイルブラウザーで実行される Flash Player ではサポートされません。

AIR プロファイルのサポート:Microphone クラスはデスクトップオペレーティングシステムではサポートされますが、モバイルデバイスの種類によってはサポートされません。また、テレビ用 AIR デバイスではサポートされません。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

Microphone.isSupported プロパティを使用すると、サポートされているかどうかを実行時にテストすることができます。ただし、テレビ用 AIR デバイスでは、Microphone.isSupportedtrue ですが Microphone.getMicrophone() が返す値は常に null です。

プライバシーコントロール

ユーザーがマイクへのアクセスを許可するか拒否するかを選択できるように、Flash Player でプライバシーダイアログボックスが表示されます。アプリケーションのウィンドウサイズは 215 × 138 ピクセル(ダイアログボックスの表示に必要な最小サイズ)以上にする必要があります。そのサイズ未満では自動的に拒否されます。

AIR アプリケーションサンドボックスで実行されるコンテンツには、マイクにアクセスする権限が必要ないため、ダイアログは表示されません。アプリケーションサンドボックス以外で実行されている AIR コンテンツには権限が必要なので、Privacy ダイアログが表示されます。

次の例では、コンピューターのマイクへのアクセスを許可した後に、エコー抑制を使用してマイクからサウンドをキャプチャします。Security.showSettings() メソッドは、ユーザーのマイクにアクセス許可を要求する Flash Player ダイアログボックスを表示します。setLoopBack(true) を呼び出すと、入力をローカルスピーカーに切り替えるため、例を実行中にサウンドを聴くことができます。

2 つのリスナーは、activity および status のイベントを受け取ります。activity イベントはセッションの開始時と終了時(存在する場合)に送出され、activityHandler() メソッドによって捕捉されます。このメソッドはイベントの情報をトレースします。status イベントは、関連付けられた Microphone オブジェクトがステータス情報をレポートした場合に送出され、statusHandler() メソッドを使用して捕捉、トレースされます。

注意:この例を正しく機能させるには、コンピューターにマイクを接続しておく必要があります。

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.media.Cameraflash.media.MicrophoneEnhancedModeflash.media.MicrophoneEnhancedOptionsaYo Binitie:Implementing Acoustic Echo Suppression in Flash/Flex applicationsCristophe Coenraets:Voice Notes for AndroidMichael Chaize:AIR, Android, and the Microphonestatus マイクがそのステータスをレポートしたときに送出されます。flash.events.StatusEvent.STATUSflash.events.StatusEvent マイクがそのステータスをレポートしたときに送出されます。code プロパティの値が "Microphone.Muted" である場合、SWF ファイルのマイクへのアクセスをユーザーが拒否しています。code プロパティの値が "Microphone.Unmuted" である場合、SWF ファイルのマイクへのアクセスをユーザーが許可しています。

ステータスイベントは Adobe AIR アプリケーションで送出されません。マイクへのアクセスは動的に変更できません。ほとんどのプラットフォームでは、AIR アプリケーションから常にマイクにアクセスできます。Android では、アプリケーションでアプリケーション記述子に Android RECORD_AUDIO 権限を指定する必要があります。指定していない場合、Android はマイクへのアクセスも拒否します。

Microphone.getMicrophone()
sampleData マイクのバッファーにサウンドデータがある場合に送出されます。flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent マイクのバッファーにサウンドデータがある場合に送出されます。

Microphone.rate プロパティにより、秒単位で生成されるサンプル数が決まります。 イベント別のサンプル数は秒単位のサンプル数の倍数で、イベントコール間のレーテンシーです。

次の例ではデフォルトのマイクから 4 秒間の音声サンプルをキャプチャして再生します。マイクが接続されていることを確認してください。micSampleDataHandler() は Microphone オブジェクトの sampleData イベントのイベントリスナーです。micSampleDataHandler() メソッドはサンプルが利用可能になるとサンプルを取得し、その値を ByteArray オブジェクトに付加します。Timer オブジェクトは 4 秒間設定されます。Timer は、Microphone オブジェクトイベントリスナーの sampleData イベントを削除し、Sound オブジェクトを作成し、Sound オブジェクトの sampleData イベントリスナーを追加します。Sound オブジェクトの sampleData イベントリスナー、playbackSampleHandler() メソッドは Sound オブジェクトで再生する音声サンプルを提供します。これらの音声サンプルは、Microphone サンプルを保存した ByteArray オブジェクトから取得されます。Microphone サンプルはモノラルサウンドで録音され、Sound オブジェクトはステレオペアのサンプルを要求するので、サンプルは Sound オブジェクトで 2 回書き込まれます。Microphone オブジェクトの rate プロパティは、Sound オブジェクトで使用される 44-kHz サンプルレートに一致するように 44 に設定されます。 const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); var timer:Timer = new Timer(DELAY_LENGTH); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); var soundBytes:ByteArray = new ByteArray(); function micSampleDataHandler(event:SampleDataEvent):void { while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); } } function timerHandler(event:TimerEvent):void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); timer.stop(); soundBytes.position = 0; var sound:Sound = new Sound(); sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler); sound.play(); } function playbackSampleHandler(event:SampleDataEvent):void { for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) { var sample:Number = soundBytes.readFloat(); event.data.writeFloat(sample); event.data.writeFloat(sample); } } 次の例では、コンピューターのマイクへのアクセスを許可した後に、エコー抑制を使用してマイクからサウンドをキャプチャします。Security.showSettings() メソッドは、ユーザーのマイクにアクセス許可を要求する Flash Player ダイアログボックスを表示します。setLoopBack(true) を呼び出すと、入力をローカルスピーカーに切り替えるため、例を実行中にサウンドを聴くことができます。

2 つのリスナーは、activity および status のイベントを受け取ります。activity イベントはセッションの開始時と終了時(存在する場合)に送出され、activityHandler() メソッドによって捕捉されます。このメソッドはイベントの情報をトレースします。status イベントは、関連付けられた Microphone オブジェクトがステータス情報をレポートした場合に送出され、statusHandler() メソッドを使用して捕捉、トレースされます。

注意:この例を正しく機能させるには、コンピューターにマイクを接続しておく必要があります。

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.events.SampleDataEvent
activity マイクの録音が開始されたとき、または無音が検出されたために録音が停止されたときに送出されます。flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent マイクの録音が開始されたとき、または無音が検出されたために録音が停止されたときに送出されます。

activating プロパティを true に設定して、このイベントをトリガーするために必要な音量を指定するか、activating プロパティを false に設定して、このイベントをトリガーするためにサウンドなしで経過する必要がある時間を指定するには、Microphone.setSilenceLevel() を使用します。

activity イベントを送信する Microphone オブジェクトの場合、setLoopback( true ) を呼び出すか、sampleData イベントを監視するか、マイクを NetStream オブジェクトにアタッチして、アプリケーションで入力を監視する必要があります。

setSilenceLevel()
getEnhancedMicrophone 音声エコー除去機能を実行できる拡張された Microphone オブジェクトへの参照を返します。オーディオをキャプチャする Microphone オブジェクトの参照です。拡張オーディオが初期化に失敗すると、null が返されます。 flash.media:Microphoneindexint-1マイクのインデックス値です。 音声エコー除去機能を実行できる拡張された Microphone オブジェクトへの参照を返します。ヘッドセットを必要としないオーディオ/ビデオチャットアプリケーションを作成するには、音声エコー除去機能を使用します。

Microphone.getEnhancedMicrophone() メソッドおよび Microphone.getMicrophone() メソッドの index パラメーターは同様に動作します。

重要:どの時点においても、存在できる拡張マイクデバイスのインスタンスは 1 つのみです。その他すべての Microphone インスタンスでは、オーディオデータの供給が停止され、code プロパティが Microphone.UnavailableStatusEvent が発生します。拡張オーディオが初期化に失敗すると、このメソッドの呼び出しに null が返され、Microphone.enhancedOptions の値の設定は効果を持たず、既存の Microphone インスタンスはすべて従来と同様に機能します。

拡張された Microphone オブジェクトを設定するには、Microphone.enhancedOptions プロパティを設定します。次のコードでは、拡張された Microphone オブジェクトと、全二重の音声エコー除去機能をローカルテストで使用します。

	     var mic:Microphone = Microphone.getEnhancedMicrophone();
	     var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
	     options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
	     mic.enhancedOptions = options;
	     mic.setLoopBack(true);
	 

setUseEchoSuppression() メソッドは、音声エコー除去機能を使用する場合は無視されます。

SWF ファイルで Microphone.getEnhancedMicrophone() メソッドから返されたマイクにアクセスしようとすると(NetStream.attachAudio() を呼び出すなど)プライバシーダイアログボックスが表示され、そのマイクへのアクセスを許可するか拒否するかをユーザーが選択できます。ステージのサイズは必ず 215 × 138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な最小サイズです。

Microphone.getMicrophone()Microphone.enhancedOptionsMicrophone.status
getMicrophone オーディオをキャプチャする Microphone オブジェクトの参照を返します。オーディオをキャプチャする Microphone オブジェクトの参照です。 flash.media:Microphoneindexint-1マイクのインデックス値です。 オーディオをキャプチャする Microphone オブジェクトの参照を返します。オーディオのキャプチャを開始するには、Microphone オブジェクトを NetStream オブジェクトに接続する必要があります。NetStream.attachAudio() のトピックを参照してください。

Microphone.getMicrophone() を複数回呼び出すと、同じマイクが参照されます。したがって、コードに mic1 = Microphone.getMicrophone() および mic2 = Microphone.getMicrophone() という行が含まれている場合、mic1mic2 は両方とも同じデフォルトのマイクを参照します。

通常は、index の値を渡さないでください。デフォルトのマイクを参照するには、単に air.Microphone.getMicrophone() を呼び出します。Flash Player 設定パネルの「マイク」セクションを使用して、アプリケーションで使用するデフォルトのマイクを指定できます。 (Flash Player 設定パネルには、Web ブラウザーで実行している Flash Player コンテンツを右クリックしてアクセスします。)index で値を渡すと、ユーザーが使用するのとは異なるマイクが参照される可能性があります。index を使用できるのは、アプリケーションで 2 つのマイクから同時にオーディオをキャプチャする場合など、特殊な場合です。Adobe AIR で実行されるコンテンツも Flash Player のデフォルトのマイクの設定を使用します。

現在の Microphone オブジェクトのインデックス値を取得するには、Microphone.index プロパティを使用します。次に、Microphone クラスの他のメソッドにこの値を渡します。

SWF ファイルで Microphone.getMicrophone() メソッドから返されたマイクにアクセスしようとすると(NetStream.attachAudio() を呼び出すなど)、プライバシーダイアログボックスが表示され、そのマイクへのアクセスを許可するか拒否するかをユーザーが選択できます。ステージのサイズは必ず 215 × 138 ピクセル以上に設定してください。これは、ダイアログボックスを表示するために必要な最小サイズです。

ユーザーがこのダイアログボックスに応答すると、ユーザーの応答を示す status イベントが送出されます。Microphone.muted プロパティを確認して、ユーザーがマイクへのアクセスを許可したか、拒否したかを判別することもできます。

Microphone.getMicrophone()null を返した場合は、マイクが別のアプリケーションで使用されているか、そのシステムにマイクがインストールされていません。マイクがインストールされているかどうかを調べるには、Microphones.names.length を使用します。Flash Player の [マイク] パネルを表示して、Microphone.getMicrophone で参照するマイクをユーザーが選択できるようにするには、Security.showSettings() を使用します。

次の例は、静的 Microphone.getMicrophone() メソッドを使用し、ステータスイベントを待機して、ユーザーのマイクへのアクセスを要求する方法を示しています。ActionScriptExamples.com で作成された例。 var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(); mic.addEventListener(StatusEvent.STATUS, mic_status); var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "Detecting microphone..."; addChild(tf); function mic_status(evt:StatusEvent):void { tf.text = "Microphone is muted?: " + mic.muted; switch (evt.code) { case "Microphone.Unmuted": tf.appendText("\n" + "Microphone access was allowed."); break; case "Microphone.Muted": tf.appendText("\n" + "Microphone access was denied."); break; } }
Microphone.statusflash.net.NetStream.attachAudio()flash.system.Security.showSettings()statusflash.events:StatusEventマイクがそのステータスをレポートしたときに送出されます。code プロパティの値が "Microphone.Muted" である場合、SWF ファイルのマイクへのアクセスをユーザーが拒否しています。code プロパティの値が "Microphone.Unmuted" である場合、SWF ファイルのマイクへのアクセスをユーザーが許可しています。 マイクがそのステータスをレポートしたときに送出されます。
setLoopBack マイクによってキャプチャされたオーディオをローカルスピーカーに転送します。stateBooleantrue マイクによってキャプチャされたオーディオをローカルスピーカーに転送します。 setSilenceLevel サウンドと見なす最小入力レベルと、実際に無音状態が始まったと見なすまでの無音時間の長さを設定します。後者は省略可能です。silenceLevelNumberマイクを有効化したり、activity イベントを送出するために必要な音量です。使用可能な値の範囲は 0 ~ 100 です。 timeoutint-1アクティビティがない場合に、サウンドが停止したと Flash Player または Adobe AIR が判定し dispatch イベントを送出するまでの時間(ミリ秒単位)です。 デフォルト値は 2000(2 秒)です。(注意:シグネチャで示されたデフォルト値(-1)は、2000 を使用することを Flash Player または Adobe AIR に伝える内部値です。) サウンドと見なす最小入力レベルと、実際に無音状態が始まったと見なすまでの無音時間の長さを設定します。後者は省略可能です。
  • マイクがサウンドをまったく検知しないようにするには、silenceLevel に値 100 を渡します。こうすると、activity イベントが送出されることはありません。
  • マイクが現在検知している音量を調べるには、Microphone.activityLevel を使用します。

Speex には Voice Activity Detection(VAD)が搭載されており、音声が検出されない場合は自動的に帯域幅を減らします。Speex コーデックを使用する場合は、サイレンスレベルを 0 に設定することをお勧めします。

アクティビティ検知とは、人が話していることをオーディオレベルに基づいて検知する機能のことです。誰も話していないときは、関連付けられているオーディオストリームを送信する必要がないので、帯域幅を節約できます。この情報を利用して、ユーザー(または他の誰か)が話していないことを視覚的なフィードバックとして示すこともできます。

サイレンス値はアクティビティ値に直接対応します。完全なサイレンスのアクティビティ値は 0 です。継続的な大音量(現在のゲイン設定に基づく最大の音量)のアクティビティ値は 100 です。ゲイン(増幅率)を適切に調整すると、話していないときにはアクティビティ値がサイレンス値よりも小さくなります。話しているときには、アクティビティ値はサイレンス値よりも大きくなります。

このメソッドは Camera.setMotionLevel() に似ています。どちらのメソッドも、activity イベントの送出タイミングを指定するために使用します。ただし、パブリッシュするストリームに対する影響という点では、この 2 つのメソッドは大きく異なります。

  • Camera.setMotionLevel() はモーションを検知し、使用する帯域幅には影響しないように設計されています。ビデオストリームでモーションが検知されない間も、ビデオは送信されます。
  • Microphone.setSilenceLevel() は帯域幅を最適化するように設計されています。オーディオストリームが無音と考えられる場合には、オーディオデータは送信されません。代わりに、無音状態が始まったことを示すメッセージが送信されます。
flash.media.Camera.setMotionLevel()flash.media.Microphone.activityLevelflash.media.Microphone.activityflash.media.Microphone.gainflash.media.Microphone.silenceLevelflash.media.Microphone.silenceTimeout
setUseEchoSuppression オーディオコーデックのエコー抑制機能を使用するかどうかを指定します。useEchoSuppressionBooleanエコー抑制を使用するか(true)、使用しないか(false)を示すブール値。 オーディオコーデックのエコー抑制機能を使用するかどうかを指定します。Flash Player 設定パネルの「マイク」でユーザーが「エコーを減らす」を選択していない限り、デフォルト値は false です。

エコー抑制とは、スピーカーから出たサウンドが同じシステムのマイクによって拾われるオーディオフィードバックの影響を減らす機能のことです。(これは、フィードバックを完全に除去する音声エコー除去機能とは異なります。setUseEchoSuppression() メソッドは、getEnhancedMicrophone() メソッドを呼び出して音声エコー除去機能を使用する場合は無視されます)。

一般に、キャプチャするサウンドをヘッドセットではなくスピーカーで再生する場合には、エコー抑制機能を使用することが推奨されます。サウンド出力デバイスをユーザーが選択できるようにした SWF ファイルでは、ユーザーがスピーカーを選択し、マイクも使用する場合に Microphone.setUseEchoSuppression(true) を呼び出すことをお勧めします。

ユーザーは、Flash Player 設定パネルの「マイク」でこれらの設定を調整することもできます。

flash.media.Microphone.setUseEchoSuppression()flash.media.Microphone.useEchoSuppression
activityLevel マイクが検知している音量です。Number マイクが検知している音量です。値の範囲は 0(サウンドが検知されていない)~ 100(非常に大音量が検知されている)です。このプロパティ値に基づいて、Microphone.setSilenceLevel() メソッドに渡す適切な値を判断できます。

マイクの muted プロパティが true の場合、このプロパティの値は常に -1 です。

flash.media.Microphone.getMicrophone()flash.media.Microphone.setSilenceLevel()flash.media.Microphone.gain
codec 音声を圧縮するために使用するコーデックです。String 音声を圧縮するために使用するコーデックです。使用できるコーデックは、Nellymoser(デフォルト)と Speex です。列挙クラス SoundCodec は、codec プロパティに対して有効な各値を含みます。

Nellymoser コーデックを使用する場合、Microphone.rate() を使用してサンプルレートを設定できます。Speex コーデックを使用する場合、サンプルレートは 16 kHz に設定されます。

Speex には Voice Activity Detection(VAD)が搭載されており、音声が検出されない場合は自動的に帯域幅を減らします。Speex コーデックを使用する場合は、サイレンスレベルを 0 に設定することをお勧めします。サイレンスレベルを設定するには、Microphone.setSilenceLevel() メソッドを使用します。

setSilenceLevel()
enableVAD Speex の音声アクティビティ検知機能を有効にします。Boolean Speex の音声アクティビティ検知機能を有効にします。 encodeQuality Speex コーデックを使用する場合の、エンコードされた音質です。int Speex コーデックを使用する場合の、エンコードされた音質です。指定できる値は、0 ~ 10 です。デフォルト値は 6 です。次の表に示すとおり、値が大きいほど質は高くなりますが、必要な帯域幅も増えます。リストされたビットレートの値はネットのビットレートを表し、パケットのオーバーヘッドは含まれません。

質の値必要なビットレート(1 秒あたりのキロビット数)0 3.9515.7527.7539.80412.8516.8620.6723.8827.8934.21042.2

コーデック
enhancedOptions 拡張マイクのオプションを制御します。flash.media:MicrophoneEnhancedOptions 拡張マイクのオプションを制御します。詳しくは、MicrophoneEnhancedOptions クラスを参照してください。このプロパティは、拡張された Microphone インスタンスに対してではない場合、無視されます。 flash.media.MicrophoneEnhancedOptionsframesPerPacket 1 パケット(メッセージ)で送信される Speex 音声フレームの数です。int 1 パケット(メッセージ)で送信される Speex 音声フレームの数です。各フレームの長さは 20 ミリ秒です。デフォルト値は、1 パケットあたり 2 フレームです。

メッセージ内の Speex フレームが増えるほど、必要な帯域幅は減りますが、メッセージの送信が遅れます。Speex フレームが少ないほど、必要な帯域幅は増えますが、遅延が軽減されます。

gain マイクが信号を増強する量です。Number マイクが信号を増強する量です。指定できる値は 0 ~ 100 です。デフォルト値は 50 です。 flash.media.Microphone.gainindex マイクのインデックスです。これは、Microphone.names から返される配列のインデックスと同じです。int マイクのインデックスです。これは、Microphone.names から返される配列のインデックスと同じです。 flash.media.Microphone.getMicrophone()flash.media.Microphone.namesisSupported 現在のプラットフォームで Microphone クラスがサポートされている場合、isSupported プロパティは true に設定されます。サポートされていない場合は、false に設定されます。Boolean 現在のプラットフォームで Microphone クラスがサポートされている場合、isSupported プロパティは true に設定されます。サポートされていない場合は、false に設定されます。 muted ユーザーがマイクへのアクセスを拒否している(true)か、許可している(false)かを指定します。Boolean ユーザーがマイクへのアクセスを拒否しているか(true)、許可しているか(false)を指定します。この値が変わると、status イベントが送出されます。詳細については、Microphone.getMicrophone() を参照してください。 flash.media.Microphone.getMicrophone()flash.media.Microphone.statusname サウンドキャプチャハードウェアから返される現在のサウンドキャプチャデバイスの名前です。String サウンドキャプチャハードウェアから返される現在のサウンドキャプチャデバイスの名前です。 flash.media.Microphone.getMicrophone()flash.media.Microphone.namesnames 使用可能なすべてのサウンドキャプチャデバイスの名前を含むストリングの配列です。Array 使用可能なすべてのサウンドキャプチャデバイスの名前を含むストリングの配列です。この名前は、ユーザーに Flash Player 設定パネルの「プライバシー」を表示せずに返されます。この配列により、各サウンドキャプチャデバイスの 0 から始まるインデックスと、システム上の各サウンドキャプチャデバイスの数(Microphone.names.length プロパティ)を調べることができます。詳細については、Array クラスのエントリを参照してください。

Microphone.names プロパティを呼び出すと、ハードウェアを広範囲にわたって調べる必要があり、配列を作成するまでに数秒間かかることがあります。ほとんどの場合は、デフォルトのマイクをそのまま使用できます。

注意:現在のマイクの名前を調べるには、name プロパティを使用します。

Arrayflash.media.Microphone.nameflash.media.Microphone.getMicrophone()
noiseSuppressionLevel Speex エンコーダーで使用されるノイズの最大減衰(dB (負数))です。int Speex エンコーダーで使用されるノイズの最大減衰(dB (負数))です。有効になっている場合、Speex 圧縮の前に Microphone からキャプチャされるサウンドにノイズ抑制が適用されます。ノイズ抑制を無効にするには、0 に設定します。ノイズ抑制は、デフォルトでは -30 dB の最大減衰で有効になっています。 Nellymoser コーデックが選択されると無視されます。 rate マイクがサウンドをキャプチャしているレート(kHz)です。int マイクがサウンドをキャプチャしているレート(kHz)です。使用できる値は 5、8、11、22、および 44 です。デフォルト値は 8 kHz ですが、サウンドキャプチャデバイスがこの値に対応している必要があります。対応していない場合、デフォルト値はそのサウンドキャプチャデバイスが対応している 8 kHz よりも高いレートのうち、8 kHz に最も近い値になります。通常は 11 kHz です。

注意: 実際のレートは次の表に記載されているように rate 値とは少し異なります。

rate実際の周波数4444,100 Hz2222,050 Hz1111,025 Hz88,000 Hz55,512 Hz
flash.media.Microphone.rate
silenceLevel マイクを有効化したり、activity イベントを送出するために必要な音量です。Number マイクを有効化したり、activity イベントを送出するために必要な音量です。デフォルト値は 10 です。 flash.media.Microphone.gainflash.media.Microphone.setSilenceLevel()silenceTimeout マイクがサウンド検知を停止してから activity イベントが送出されるまでの時間(ミリ秒単位)です。int マイクがサウンド検知を停止してから、activity イベントが送出されるまでの時間(ミリ秒単位)です。デフォルト値は 2000(2 秒)です。

この値を設定するには、Microphone.setSilenceLevel() メソッドを使用します。

flash.media.Microphone.setSilenceLevel()
soundTransform loopback モードになっているとき、この microphone オブジェクトのサウンドを制御します。flash.media:SoundTransform loopback モードになっているとき、この microphone オブジェクトのサウンドを制御します。 useEchoSuppression エコー抑制が有効になっている場合は true、それ以外の場合は false に設定します。Boolean エコー抑制が有効になっている場合は true、それ以外の場合は false に設定します。Flash Player 設定パネルの「マイク」でユーザーが「エコーを減らす」を選択していない限り、デフォルト値は false です。 flash.media.Microphone.setUseEchoSuppression()
StageVideo ライブビデオまたは録画されたビデオをアプリケーション内に表示するとき、StageVideo オブジェクトでは、デバイスのハードウェアアクセラレーション機能が使用可能な場合は使用されます。flash.events:EventDispatcher ライブビデオまたは録画されたビデオをアプリケーション内に表示するとき、StageVideo オブジェクトでは、デバイスのハードウェアアクセラレーション機能が使用可能な場合は使用されます。ハードウェアアクセラレーション機能は大半のデバイスに搭載されています。StageVideo オブジェクトは Video オブジェクトと同じビデオ形式をサポートしています。これらの形式について詳しくは、flash.net.NetStream クラスを参照してください。

AIR プロファイルのサポート:AIR 2.5 では、この機能はテレビ用 AIR を実行するデバイスでのみサポートされています。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。

StageVideo オブジェクトによるビデオは、常に、どの Flash 表示リストオブジェクトよりも背面にある長方形の領域に表示されます。これにより StageVideo オブジェクトでは、ハードウェアアクセラレーションを利用しつつ、ビデオの最も一般的な表示方法(ビデオコントロールがオーバーレイ表示される長方形の表示領域)をサポートすることができます。

Video オブジェクトではなく StageVideo オブジェクトを使用することには次のようなメリットがあります。

  • ハードウェアアクセラレーションを使用することでビデオ再生のパフォーマンスが最適化されます。
  • プロセッサーおよび電力の使用量が減少します。
  • ビデオコントロールなどを StageVideo オブジェクトの前面に表示できるので、より柔軟でクリエイティブなコンテンツ開発ができます。

StageVideo オブジェクトはデバイスハードウェアの機能を使用するので、StageVideo オブジェクトには、Video オブジェクトと比較して次の制限があります。

  • ビデオ表示領域の形は長方形のみです。楕円形や不規則な形などの複雑な領域に表示することはできません。
  • StageVideo オブジェクトは回転できません。
  • StageVideo オブジェクトはビットマップキャッシュできません。
  • BitmapData を使用してビデオデータにアクセスすることはできません。
  • SWF ファイルにビデオを埋め込めません。StageVideo オブジェクトは NetStream オブジェクトと共に使用する場合のみ使用できます。
  • StageVideo オブジェクトにはフィルター、ブレンドモードまたはアルファ値を適用できません。
  • StageVideo オブジェクトにはカラー変換、3D 変形またはマトリックス変換を適用できません。
  • StageVideo オブジェクトにはマスクまたは scale9Grid を適用できません。
  • StageVideo オブジェクトの前面にある表示オブジェクトに適用したブレンドモードは、StageVideo オブジェクトに対しては適用されません。
  • StageVideo オブジェクトを配置できる位置は、フルピクセル境界のみです。
  • 各 SWF ファイルについて、同時にビデオを表示できる StageVideo オブジェクトの数は、Flash Player により 4 に制限されています。ただし、デバイスのハードウェアリソースによっては、実際のオブジェクト数がより少ない数に制限される場合があります。テレビ用 AIR デバイスでは、一度に 1 つの StageVideo オブジェクトでのみビデオを再生できます。
  • ビデオのタイミングが、ランタイムにより表示される Flash コンテンツのタイミングと同期しません。
  • 指定されたデバイスハードウェアにおいて、ビデオ表示は最も適した手段ではありますが、デバイス間で完全なピクセル整合性が保たれているわけではありません。ドライバーやハードウェアにより、些細な不整合が発生する場合があります。
  • デバイスの中には、必要なすべてのカラースペースをサポートしていないものもあります。たとえば、H.264 標準の BT.709 をサポートしていないデバイスもいくつかあります。このような場合には、表示速度を速めるため、BT.601 を使用することができます。
  • ステージビデオを normalopaquetransparent などの WMODE 設定と共に使用することはできません。フルスクリーンモードにない場合、ステージビデオでサポートされているのは WMODE=direct のみです。WMODE は、Safari 4 またはそれ以降、IE 9 またはそれ以降、テレビ用 AIR では何の影響もありません。

StageVideo オブジェクトを使用してビデオを再生する手順の要約を次に示します。

  1. Stage.stageVideos ベクターが変更されたタイミングを知るために、StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY イベントをリッスンします(テレビ用 AIR 2.5 ではサポートされません)。
  2. StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY イベントによりステージビデオが使用可能であることがレポートされると、そのイベントハンドラー内の Stage.stageVideos ベクターオブジェクトを使用して StageVideo オブジェクトにアクセスします。テレビ用 AIR 2.5 では、最初の SWF フレームがレンダリングされた後、Stage.stageVideos にアクセスします。注意:StageVideo オブジェクトを作成することはできません。
  3. StageVideo.attachNetStream() を使用して NetStream オブジェクトを添付します。
  4. NetStream.play() を使用してビデオを再生します。
  5. ビデオ再生のステータスを知るために、StageVideo オブジェクト上の StageVideoEvent.RENDER_STATE イベントをリッスンします。また、このイベントの受領は、ビデオの width および height プロパティが初期化または変更されたことも示します。
  6. Video オブジェクト上の VideoEvent.RENDER_STATE イベントをリッスンします。このイベントは、StageVideoEvent.RENDER_STATE と同じステータスを提供します。したがって、このイベントを使用して GPU アクセラレーションが使用可能かどうかを判断することができます。また、このイベントの受領は、ビデオの width および height プロパティが初期化または変更されたことも示します(テレビ用 AIR 2.5 ではサポートされません)。

ビデオを再生できないことが StageVideoEvent.RENDER_STATE イベントによって示された場合は、StageVideo オブジェクトではなく Video オブジェクトを使用する従来の方法に切り替えることもできます。このイベントは、ビデオが NetStream オブジェクトにアタッチされ、再生された後に送出されます。また、プラットフォームによっては、再生ステータスに何らかの変化が生じるたびにこのイベントが送出されることもあります。StageVideoEvent.RENDER_STATE イベントを使用して、アプリケーションのビデオが確実に再生されるよう、または再生されないようにします。

ビデオの実行がステージビデオをサポートしていない WMODE からフルスクリーンモードに移行すると、ステージビデオが使用できるようになります。同様に、ユーザーがフルスクリーンモードを終了すると、ステージビデオは使用できなくなります。このような場合、Stage.stageVideos ベクターが変更されます。この変更の通知を取得するには、StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABITY イベントをリッスンします。注意:この通知は、テレビ用 AIR 2.5 では使用できません。

flash.events.StageVideoEventflash.events.StageVideoAvailabilityEventflash.events.VideoEventflash.display.Stage.stageVideosflash.media.Videoflash.net.NetStreamStageVideo クラスを使用してハードウェアアクセラレーションによるレンダリングを実行する方法renderState StageVideo オブジェクトのレンダリング状態が変化したときに、StageVideo オブジェクトによって送出されます。flash.events.StageVideoEvent.RENDER_STATEflash.events.StageVideoEvent StageVideo オブジェクトのレンダリング状態が変化したときに、StageVideo オブジェクトによって送出されます。 attachNetStream アプリケーション内の StageVideo オブジェクトの境界内に表示するビデオストリームを指定します。netStreamflash.net:NetStreamNetStream オブジェクトです。StageVideo オブジェクトへの接続を閉じるには、null を渡します。 アプリケーション内の StageVideo オブジェクトの境界内に表示するビデオストリームを指定します。ビデオストリームは、NetStream.play() で再生されるビデオファイルか、または null です。ビデオファイルはローカルファイルシステムまたは Flash Media Server に保存できます。netStream 引数の値に null を指定すると、StageVideo オブジェクト内でビデオが再生されなくなります。

再度 attachNetStream() を呼び出す場合は、その前に、現在添付されている NetStream オブジェクトの close() メソッドを呼び出してください。close() を呼び出すと、そのビデオの再生に関係するハードウェアデコーダーなどのリソースがすべて解放されます。これで、別の NetStream オブジェクトまたは null を指定して attachNetStream() を呼び出せるようになります。

ビデオファイルにオーディオしか含まれない場合、このメソッドを使用する必要はありません。ビデオファイルのオーディオ部分は、NetStream.play() を呼び出すと自動的に再生されます。ビデオファイルに関連付けられたオーディオを制御するには、ビデオファイルを再生する NetStream オブジェクトの soundTransform プロパティを使用します。

colorSpaces そのビデオ画面に使用できるカラースペースの名前のリストを返します。 そのビデオ画面に使用できるカラースペースの名前のリストを返します。普通、このリストには「BT.601」と「BT.709」が含まれていますが、構成によっては「BT.601」のみサポートされていることがあります。その場合、ビデオが正しいカラースペースでレンダリングされない可能性があります。

注意:テレビ用 AIR デバイスでは、「BT.601」の値はソフトウェア再生を、「BT.709」の値はハードウェア再生を示します。

depth その StageVideo オブジェクトが配置された深さレベルを、他の StageVideo オブジェクトとの相対値で示します。intその StageVideo オブジェクトの深さを示す他の StageVideo オブジェクトとの相対値。 その StageVideo オブジェクトが配置された深さレベルを、他の StageVideo オブジェクトとの相対値で示します。

StageVideo オブジェクトは常にステージ上の他のオブジェクトの背面に表示されます。プラットフォームが複数の StageVideo オブジェクトをサポートしている場合、depth プロパティは StageVideo オブジェクトの深さレベルを表します。最背面にある StageVideo オブジェクトの depth プロパティが最も小さい値になります。複数の StageVideo オブジェクトに同じ深さが設定されている場合、それらのオブジェクトの相対的な順序は、stageVideos Vector オブジェクト内に配置されている順序によって決まります。

注意:テレビ用 AIR デバイスでサポートされる StageVideo オブジェクトの数は 1 つだけです。したがって、このプロパティはテレビ用 AIR デバイスでは使用できません。他のデバイスでの将来のサポートに備えたプレースホルダーになっています。

flash.display.Stage.stageVideos
pan Point オブジェクトの座標として指定される、ビデオ表示のパン設定です。flash.geom:PointPoint 値が無効です。 RangeErrorRangeErrorズームされたビデオのどの長方形が表示されているかを判別します。 Point オブジェクトの座標として指定される、ビデオ表示のパン設定です。

デフォルトでは、pan の値は (0,0) です。このデフォルトの状態では、StageVideo.viewPort で指定される長方形の中央にビデオが表示されます。

pan 値は、zoom プロパティにデフォルトの (1.0, 1.0) 以外の値が設定されている場合にのみ意味を持ちます。デフォルトの zoom 値を使用して StageVideo.viewPort 長方形内にビデオを表示すると、ビデオのサイズは、その長方形にちょうど合うように調整されます。したがって、ビデオの画像全体が表示されます。ズーム値を指定するとビデオの画像全体は表示されません。その場合に pan 値を設定すると、どの部分を StageVideo.viewPort の長方形領域に表示するかを指定できます。

pan プロパティに設定できる有効な値の範囲は、(-1.0, -1.0)(1.0, 1.0) です。設定値には次のような意味があります。

  • pan 値が (-1.0, -1.0) の場合は、ビデオの左上隅ピクセルが StageVideo.viewPort 領域の左上隅に表示されます。
  • pan 値が (1.0, 1.0) の場合は、ビデオの右下隅ピクセルが StageVideo.viewPort 領域の右下隅に表示されます。
  • pan 値が (1.0, -1.0) の場合は、ビデオの右上隅ピクセルが StageVideo.viewPort 領域の右上隅に表示されます。
  • pan 値が (-1.0, 1.0) の場合は、ビデオの左下隅ピクセルが StageVideo.viewPort 領域の左下隅に表示されます。

-1.0 と 1.0 の間の値を指定すると、拡大率に応じて表示がパンされます。

pan プロパティに有効範囲外の値を設定すると、RangeError 例外がスローされます。値はその前に設定されていた有効な値に戻されます。

また、StageVideo オブジェクトの使用時には Stage.stageVideos Vector オブジェクトの要素を StageVideo 変数に代入して使用しているという点も考慮する必要があります。StageVideo 変数の pan プロパティを設定すると、該当する Stage.stageVideos Vector オブジェクトの要素も変更されます。後で、別の StageVideo 変数に同じ要素を代入してビデオを再生する場合には、pan プロパティを設定し直す必要があります。

zoom
videoHeight ビデオストリームの高さをピクセル単位で指定する整数です。int ビデオストリームの高さをピクセル単位で指定する整数です。

このプロパティは、StageVideo.viewPort の長方形領域のサイズとは関係なく、キャプチャしたのと同じ高さでユーザーに対してビデオを表示する場合などに使用します。

videoWidth ビデオストリームの幅をピクセル単位で指定する整数です。int ビデオストリームの幅をピクセル単位で指定する整数です。

このプロパティは、StageVideo.viewPort の長方形領域のサイズとは関係なく、キャプチャしたのと同じ幅でユーザーに対してビデオを表示する場合などに使用します。

viewPort ビデオ表示領域の絶対位置とサイズ(ピクセル単位)です。flash.geom:RectangleRectangle 値が無効です。 RangeErrorRangeError ビデオ表示領域の絶対位置とサイズ(ピクセル単位)です。

ビデオの位置は、ステージの左上隅を基準とする相対位置です。

viewPort Rectangle オブジェクトの x および y プロパティに設定できる値の有効範囲は -8192 ~ 8191 です。つまり、ビデオの一部または全体をステージの外に出すこともできます。また、viewPort プロパティの width および height プロパティをステージよりも大きくすれば、ビデオのサイズをステージよりも大きくすることができます。

zoom Point オブジェクトとして指定される、ビデオのズーム設定です。flash.geom:PointPoint 値が無効です。 RangeErrorRangeErrorビデオのズーム設定です。 Point オブジェクトとして指定される、ビデオのズーム設定です。

ズームの Point オブジェクトが拡大倍率を表します。デフォルトでは、zoom の値は (1.0, 1.0) です。このデフォルトの状態では、StageVideo.viewPort 長方形領域にビデオの画像全体が表示されます。

zoom プロパティに設定できる有効な値の範囲は、(1.0, 1.0)(16.0, 16.0) です。ズームの Point オブジェクトの x プロパティによって水平方向ピクセルのズーム値を指定し、y プロパティによって垂直方向ピクセルのズーム値を指定します。

例えば、zoom 値が (2.0, 2.0) の場合は、水平ピクセルの半数と垂直ピクセルの半数だけが StageVideo.viewPort の長方形領域内に表示されます。StageVideo.viewPort 領域全体がビデオで占められますが、ビデオの半分だけが見える 2 倍ズーム表示になります。同じように、zoom 値が (16.0, 16.0) の場合は、水平ピクセルの 1/16 と垂直ピクセルの 1/16 だけが StageVideo.viewPort の長方形領域内に表示され、最大倍率である 16 倍ズーム表示になります。

zoom プロパティを設定する場合は、ビデオ内の適切な部分が StageVideo.viewPort 領域内に表示されるように pan プロパティを設定してください。

ここで、zoom Point オブジェクトの x および y プロパティに異なる値を設定することが有用な場合の例を挙げます。デフォルトの zoom 値を使用して StageVideo.viewPort 長方形内にビデオを表示すると、ビデオのサイズは、その長方形にちょうど合うように調整されます。ビデオの長方形が StageVideo.viewPort の長方形に合わせて拡大されないと、ビデオの表示がゆがむ場合があります。つまり、ビデオのアスペクト比が StageVideo.viewPort と異なる場合には、ビデオの表示がゆがむ可能性があります。例えば、StageVideo.viewPort プロパティに正方形のサイズを指定して、幅と高さが異なるビデオを再生するような場合が該当します。こうした状況で表示のゆがみを解消するには、zoom Point オブジェクトの x および y プロパティに異なる値を設定します。さらに、ビデオ内の適切な部分が StageVideo.viewPort 領域内に表示されるように pan プロパティを設定します。

zoom プロパティに有効範囲外の値を設定すると、RangeError 例外がスローされます。値はその前に設定されていた有効な値に戻されます。

また、StageVideo オブジェクトの使用時には Stage.stageVideos Vector オブジェクトの要素を StageVideo 変数に代入して使用しているという点も考慮する必要があります。StageVideo 変数の zoom プロパティを設定すると、該当する Stage.stageVideos Vector オブジェクトの要素も変更されます。後で、別の StageVideo 変数に同じ要素を代入してビデオを再生する場合には、zoom プロパティを設定し直す必要があります。

pan
MicrophoneEnhancedOptions MicrophoneEnhancedOptions クラスは、拡張オーディオの設定オプション(音声エコー除去機能)を提供します。Object MicrophoneEnhancedOptions クラスは、拡張オーディオの設定オプション(音声エコー除去機能)を提供します。音声エコー除去機能を使用すると、ヘッドセットを使用しないで、複数のユーザーがオーディオ/ビデオチャットアプリケーションで通信できます。

音声エコー除去機能を使用するには、Microphone.getEnhancedMicrophone() を呼び出して、拡張された Microphone オブジェクトへの参照を取得します。MicrophoneEnhancedOptions クラスのインスタンスに Microphone.enhancedOptions プロパティを設定します。

flash.media.Microphone.enhancedOptionsflash.media.Microphone.getEnhancedMicrophone()autoGain 自動ゲイン制御を有効にします。Boolean 自動ゲイン制御を有効にします。時間領域の自動ゲイン制御アルゴリズムがノイズゲートと組み合わせて使用されます。デフォルト値はオフです。 echoPath 音声エコー除去機能に対して使用されるエコーパス(ミリ秒単位)を指定します。int 音声エコー除去機能に対して使用されるエコーパス(ミリ秒単位)を指定します。エコーパスを長くするほど、エコー除去で良い結果が得られます。また、エコーパスは長くするほど遅延が大きくなり、複雑な計算処理が必要となります。デフォルト値は 128(推奨値)です。このほかに設定できる値は 256 です。 isVoiceDetected マイク入力で音声が検出されたかどうかを示します。int マイク入力で音声が検出されたかどうかを示します。

取りうる値は、-1(無効)、0(音声を未検出)、1(音声を検出)です。

mode 拡張マイクモードを制御します。String 拡張マイクモードを制御します。USB 以外のすべてのマイクのデフォルト値は、FULL_DUPLEX です。USB マイクのデフォルト値は、HALF_DUPLEX です。設定できる値とその説明については、MicrophoneEnhancedMode を参照してください。 flash.media.MicrophoneEnhancedModenonLinearProcessing ノンリニア処理を有効にします。Boolean ノンリニア処理を有効にします。ノンリニア処理は、1 人の話者が話す状況で残余エコーを低減します。時間領域のノンリニア処理テクニックが使用されます。音楽ソースの場合、ノンリニア処理を無効にします。デフォルト値は true で、ノンリニア処理は有効になります。
Sound Sound クラスを使用すると、アプリケーション内のサウンドを処理することができます。flash.events:EventDispatcher Sound クラスを使用すると、アプリケーション内のサウンドを処理することができます。Sound クラスを使用すると、Sound オブジェクトの作成や、外部 MP3 ファイルのオブジェクトへのロードと再生ができます。また、サウンドストリームを閉じたり、サウンド関連のデータ(ストリームおよび ID3 メタデータのバイト数などの情報)にアクセスしたりできます。サウンドのサウンドソース(SoundChannel オブジェクトまたは Microphone オブジェクト)と、コンピューターのスピーカーへのサウンド出力を制御する SoundTransform クラスのプロパティを使用して、サウンドを詳細に制御できます。

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

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

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

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

  • 呼び出し元ファイルがネットワークサンドボックスにあり、ロードするサウンドファイルがローカルにある場合、サウンドのロードおよび再生はできません。
  • 呼び出し元 ファイルがローカルにあり、リモートサウンドのロードおよび再生を試行する場合、デフォルトでは、サウンドのロードや再生ができません。この種のアクセスを許可するには、ユーザーが明示的な許可を与える必要があります。
  • サウンドを処理する特定の操作が制限されます。ロードされたサウンドのデータには、クロスドメインポリシーファイルを実装していない限り、別のドメインに存在するファイルからアクセスできないことに注意してください。この制限の対象となるサウンド関連の API は、Sound.id3SoundMixer.computeSpectrum()SoundMixer.bufferTime、および SoundTransform クラスです。

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

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

次の例では、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); } } }
flash.net.NetStreamMicrophoneSoundChannelSoundMixerSoundTransformprogress ロード処理の実行中にデータを受信したときに送出されます。flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent ロード処理の実行中にデータを受信したときに送出されます。 load()open ロード操作が開始したときに送出されます。flash.events.Event.OPENflash.events.Event ロード操作が開始したときに送出されます。 load()ioError 入出力エラーが発生してロード操作が失敗したときに送出されます。flash.events.IOErrorEvent.IO_ERRORflash.events.IOErrorEvent 入出力エラーが発生してロード操作が失敗したときに送出されます。 load()id3 MP3 サウンドで ID3 データを使用できる場合に、Sound オブジェクトによって送出されます。flash.events.Event.ID3flash.events.Event MP3 サウンドで ID3 データを使用できる場合に、Sound オブジェクトによって送出されます。 Sound.id3complete データが正常にロードされたときに送出されます。flash.events.Event.COMPLETEflash.events.Event データが正常にロードされたときに送出されます。 load()sampleData ランタイムが新しいオーディオデータを要求するときに送出されます。flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent ランタイムが新しいオーディオデータを要求するときに送出されます。 次の例は、単純な正弦波を再生します。 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(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play(); extract()play()flash.events.SampleDataEventSound 新しい Sound オブジェクトを作成します。streamflash.net:URLRequestnull 外部の MP3 ファイルを指定する URL です。 contextflash.media:SoundLoaderContextnull オプションの SoundLoader コンテクストオブジェクト。バッファー時間(Sound オブジェクトのバッファー内に保持する MP3 データの最小ミリ秒数)を定義でき、サウンドをロードする前にクロスドメインポリシーファイルをチェックするかどうかを指定できます。 新しい Sound オブジェクトを作成します。Sound コンストラクターに有効な URLRequest オブジェクトを渡すと、コンストラクターは自動的に Sound オブジェクトの load() 関数を呼び出します。Sound コンストラクターに有効な URLRequest オブジェクトを渡さない場合は、ユーザー自身が Sound オブジェクトの load() 関数を呼び出す必要があります。呼び出さないと、ストリームがロードされません。

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

Flash Player 10 以降と AIR 1.5 以降では、load() の代わりに sampleData イベントハンドラーを使用して、サウンドを Sound オブジェクトに動的にロードできます。
close ストリームを閉じて、データのダウンロードを中止します。ストリームを閉じることができないか、またはストリームが開いていません。 IOErrorflash.errors:IOError ストリームを閉じて、データのダウンロードを中止します。close() メソッドの呼び出し後は、ストリームからデータを読み込みません。 次の例では、ユーザーが「停止」ボタンをクリックしたときに、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 Sound オブジェクトから生のサウンドデータを抽出します。target パラメーターに指定されている ByteArray に書き込まれるサンプルの数です。 Numbertargetflash.utils:ByteArray抽出されるサウンドサンプリングの配置先の ByteArray オブジェクトです。 lengthNumber抽出するサウンドサンプリングの数です。サンプルには、2 つの 32 ビット浮動小数点数を意味する左チャンネルと右チャンネルがあります。 startPositionNumber-1抽出を開始するサンプルです。値を指定しない場合、Sound.extract() の最初の呼び出しはサウンドの先頭から開始され、startPosition の値が設定されていない後続の呼び出しでは、ファイル全体が順に処理されます。 Sound オブジェクトから生のサウンドデータを抽出します。

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

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

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

mp3 データは sourceSnd Sound オブジェクト内にロードされます。アプリケーションが mp3 データをロードすると、loaded() 関数が呼び出されます。この関数は、sourceSnd オブジェクトの complete イベントのイベントハンドラーです。2 番目の Sound オブジェクト outputSound を使用して、変更されたオーディオが再生されます。outputSound オブジェクトには sampleData イベントリスナーがあり、オブジェクトの play() メソッドを呼び出すと、この sampleData イベントが定期的に送出されます。upOctave() メソッドは、ソースのオーディオデータに基づいて、変更されたオーディオデータのバイト配列を返します。ソースデータのオーディオサンプルを 1 つおきにスキップすることにより、1 オクターブ高いオーディオが返されます。sampleData イベントのイベントハンドラーによって、返されたバイト配列が outoputSound オブジェクトの data プロパティに書き込まれます。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; }
play()sampleData
load 指定した URL から外部 MP3 ファイルのロードを開始します。このロードの失敗原因であるネットワークエラーです。 IOErrorflash.errors:IOError信頼されていないローカルファイルはインターネットへの接続を許可されません。この問題は、このファイルを local-with-networking または trusted として分類し直すことで回避できます。 SecurityErrorSecurityError一般的な予約ポートには接続できません。遮断されたポートの詳しいリストについては、『ActionScript 3.0 開発ガイド』の「ネットワーク API の制限」を参照してください。 SecurityErrorSecurityErrorstream オブジェクトの digest プロパティが null ではありません。URLRequest オブジェクトの digest プロパティを設定できるのは、URLLoader.load() メソッドを呼び出して SWZ ファイル(Adobe プラットフォームコンポーネント)を読み込む場合のみです。 IOErrorflash.errors:IOErrorstreamflash.net:URLRequest 外部の MP3 ファイルを指定する URL です。 contextflash.media:SoundLoaderContextnull オプションの SoundLoader コンテクストオブジェクト。バッファー時間(Sound オブジェクトのバッファー内に保持する MP3 データの最小ミリ秒数)を定義でき、サウンドをロードする前にクロスドメインポリシーファイルをチェックするかどうかを指定できます。 指定した URL から外部 MP3 ファイルのロードを開始します。Sound コンストラクターに有効な URLRequest オブジェクトを渡すと、コンストラクターは Sound.load() を呼び出します。ユーザー自身で Sound.load() を呼び出す必要があるのは、Sound コンストラクターに有効な URLRequest オブジェクトを渡さない場合、または null 値を渡す場合のみです。

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

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

  • 呼び出し元ファイルが local-with-file-system サンドボックスにあり、サウンドがネットワークサンドボックスにある場合、Sound.load() を呼び出すことはできません。
  • 信頼できるローカルのサンドボックスまたはネットワーク接続したローカルのサンドボックスからアクセスするには、URL ポリシーファイルを使用して Web サイトで許可する必要があります。
  • 一般的な予約ポートには接続できません。遮断されたポートの詳しいリストについては、『ActionScript 3.0 開発ガイド』の「ネットワーク API の制限」を参照してください。
  • SWF ファイルがこのメソッドを使用しないようにするには、allowNetworking パラメーター(SWF コンテンツを含んでいる HTML ページの object タグおよび embed タグのパラメーター)を設定します。

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

  • POST 処理は、マウスのクリックやキーの押下などのユーザーが開始したアクションに応答して実行する必要があります。
  • POST 処理がクロスドメインである(POST ターゲットが、POST 要求を送信中の SWF ファイルと同じサーバー上にない)場合は、クロスドメインアクセスを許可する URL ポリシーファイルをターゲットサーバーが提供する必要があります。

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

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

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

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

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

progressHandler() メソッドによって、ProgressEvent オブジェクトで渡される bytesLoaded 値が 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 サウンドを再生する SoundChannel オブジェクトを新しく作成します。サウンドの制御に使用する SoundChannel オブジェクトです。このメソッドは、サウンドカードがない場合、または使用できるサウンドチャンネルが不足した場合は null を返します。一度に使用できるサウンドチャンネルの最大数は 32 チャネルです。 flash.media:SoundChannelstartTimeNumber0再生を開始する初期位置(ミリ秒単位)です。 loopsint0サウンドチャネルの再生が停止するまで startTime 値に戻ってサウンドの再生を繰り返す回数を定義します。 sndTransformflash.media:SoundTransformnullサウンドチャンネルに割り当てられた初期 SoundTransform オブジェクトです。 サウンドを再生する SoundChannel オブジェクトを新しく作成します。このメソッドは SoundChannel オブジェクトを返します。このオブジェクトにアクセスして、サウンドの停止、およびボリュームの監視を行います。ボリュームの制御、パン、バランスの設定を行うには、サウンドチャンネルに割り当てられた SoundTransform オブジェクトにアクセスします。 次の例では、ファイルがロードされると、グラフィックバーを使用するユーザーは、サウンドファイルの開始位置(開始時点)を選択できます。

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

enterFrameHandler() メソッドによって、ProgressEvent オブジェクトで渡される bytesLoaded 値が 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); } } }
SoundChannel.stop()SoundMixer.stopAll()
bytesLoaded この Sound オブジェクトで現在利用できるデータのバイト数を返します。uint この Sound オブジェクトで現在利用できるデータのバイト数を返します。このプロパティは、通常、外部から読み込むファイルのみに使用します。 bytesTotal この Sound オブジェクトの合計バイト数を返します。int この Sound オブジェクトの合計バイト数を返します。 id3 MP3 ファイルの一部であるメタデータに対するアクセスを提供します。flash.media:ID3Info MP3 ファイルの一部であるメタデータに対するアクセスを提供します。

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

Flash Player 9 以降および AIR では 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.commentTALBSound.id3.album TCONSound.id3.genreTIT2Sound.id3.songName TPE1Sound.id3.artistTRCKSound.id3.track TYERSound.id3.year

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

プロパティ説明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エンコードに使用したソフトウェア/ハードウェアと設定TYERWXXXURL リンクフレーム

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

  • Sound オブジェクトの id3 プロパティは、サウンドファイルと同じセキュリティサンドボックス内にある SWF ファイルで常に使用できます。他のサンドボックス内のファイルには、セキュリティチェックがあります。
  • サウンドをロードするとき、Sound クラスの load() メソッドを使用すると、SoundLoaderContext オブジェクトである context パラメーターを指定できます。SoundLoaderContext オブジェクトの checkPolicyFile プロパティを true に設定した場合、Flash Player は、サウンドがロードされるサーバー上に URL ポリシーファイルがあるかどうかをチェックします。ポリシーファイルが存在しており、そのファイルでロード元 SWF ファイルのドメインからのアクセスが許可されている場合、Sound オブジェクトの id3 プロパティにアクセスできます。それ以外の場合は、アクセスできません。

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

セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。

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

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

id3Handler() メソッドで、ファイルの ID3 タグが ID3Info クラスのオブジェクトである id3 に保存されます。テキストフィールドがインスタンス化され、ID3 タグの一覧が表示されます。for ループによってすべての ID3 2.0 タグが繰り返し処理され、テキストフィールドの内容に名前と値が追加されます。ID3 info(ID3Info)プロパティを使用して、アーティスト、曲名、およびアルバムも追加されます。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 が読み込まれます。ID3 1.0 タグだけが使用できる場合、id3.songname などと記述して、ID3 info プロパティを介して情報にアクセスできます。ID3 2.0 では、新しいタグ(TITS)を使用して id3.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); } } }
SoundLoaderContext.checkPolicyFile
isBuffering 外部 MP3 ファイルのバッファリング状態を返します。Boolean 外部 MP3 ファイルのバッファリング状態を返します。値が true の場合、再生は現在中断され、オブジェクトがデータを待機しています。 isURLInaccessible Sound.url プロパティが切り詰められているかどうかを示します。Boolean Sound.url プロパティが切り詰められているかどうかを示します。isURLInaccessible の値が true の場合、Sound.url の値は、サウンドのロード元となる最終的な URL のドメイン部分のみになります。例えば、サウンドが http://www.adobe.com/assets/hello.mp3 からロードされ、Sound.url プロパティの値が http://www.adobe.com の場合、このプロパティは切り詰められています。isURLInaccessible の値は、以下の値もすべて true の場合のみ true になります。
  • サウンドファイルのロード中に HTTP リダイレクトが発生しました。
  • Sound.load() の呼び出し元の SWF ファイルが、サウンドファイルの最終的な URL とは別のドメインからのファイルです。
  • Sound.load() の呼び出し元の SWF ファイルに、サウンドファイルにアクセスする許可がありません。サウンドファイルへのアクセス許可は、Sound.id3 プロパティへアクセスする場合と同じ方法で許可されます。つまり、ポリシーファイルを作成して、SoundLoaderContext.checkPolicyFile プロパティを使用します。

注意:isURLInaccessible プロパティは Flash Player 10.1 および AIR 2.0 用に追加されました。ただし、Flash ランタイムでサポートされている場合、このプロパティはすべてのバージョンの SWF ファイルで使用できます。このため、オーサリングツールを「strict モード」で使用するとコンパイルエラーが発生します。このエラーを回避するには、間接構文 mySound["isURLInaccessible"] を使用するか、strict モードを無効にします。Flash Professional CS5 または Flex SDK 4.1 を使用している場合、Flash Player 10.1 および AIR 2 以前にリリースされたランタイム向けに、この API を使用してコンパイルすることができます。

AIR のアプリケーションコンテンツの場合、このプロパティの値は常に false です。

urlid3flash.media.SoundLoaderContext.checkPolicyFile
length 現在のサウンドの継続時間を示すミリ秒数です。Number 現在のサウンドの継続時間を示すミリ秒数です。 url サウンドがロードされる URL です。String サウンドがロードされる 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 を表します。また、元の URL 要求が HTTP サーバーによってリダイレクトされると、url プロパティの値はサウンドファイルが実際にダウンロードされた URL を示します。この最終的な絶対 URL の報告は、LoaderInfo.url の動作と同じです。

場合によっては、url プロパティの値が切り詰められていることがあります。詳しくは、isURLInaccessible プロパティを参照してください。

load()flash.display.LoaderInfo.urlisURLInaccessible
MicrophoneEnhancedMode MicrophoneEnhancedMode クラスは、MicrophoneEnhancedOptions クラスの mode プロパティの設定で使用される定数値の列挙です。Object MicrophoneEnhancedMode クラスは、MicrophoneEnhancedOptions クラスの mode プロパティの設定で使用される定数値の列挙です。 flash.media.MicrophoneEnhancedOptionsFULL_DUPLEX このモードを使用すると、両方の話者が同時に話すことができます。fullDuplexString このモードを使用すると、両方の話者が同時に話すことができます。音声エコー除去機能は全二重モードで動作します。全二重モードは、最高品質のエコー除去を実現します。このモードでは、高品質のマイクとスピーカーが必要とされ、処理負荷が最も大きくなります。USB マイクではこのモードを使用しないでください。 HALF_DUPLEX 旧式で高品質ではないスピーカーとマイクには、このモードを使用します。halfDuplexString 旧式で高品質ではないスピーカーとマイクには、このモードを使用します。音声エコー除去機能が半二重モードで動作します。半二重モードでは、一度に一方の話者のみが話すことができます。半二重モードの処理は全二重モードに比べて簡単です。USB マイクデバイスでは、半二重モードがデフォルトのモードです。

アプリケーションがデフォルトの enhancedOptions 設定と USB マイクを使用している場合は、Flash Player によって自動的に halfDuplex モードに切り替えられます。アプリケーションがデフォルトの enhancedOptions 設定と内蔵マイクを使用している場合は、Flash Player では fullDuplex モードが使用されます。

HEADSET 両方の話者がヘッドセットを使用している場合は、このモードを使用します。headsetString 両方の話者がヘッドセットを使用している場合は、このモードを使用します。音声エコー除去機能は低エコーモードで動作します。このモードでは、処理負荷が最も小さくなります。 OFF 拡張オーディオ機能はすべて無効になります。offString 拡張オーディオ機能はすべて無効になります。 SPEAKER_MUTE スピーカーをミュートにしている場合は、このモードを使用します。speakerMuteString スピーカーをミュートにしている場合は、このモードを使用します。音声エコー除去機能は無効になります。拡張オーディオでは、ノイズ低減または自動ゲイン制御が実行されます(有効に設定されている場合)。 flash.media.MicrophoneEnhancedOptions.autoGain
Video Video クラスは、ビデオを SWF ファイルに埋め込むことなく、ライブビデオまたは録画ビデオをアプリケーションに表示します。flash.display:DisplayObject Video クラスは、ビデオを SWF ファイルに埋め込むことなく、ライブビデオまたは録画ビデオをアプリケーションに表示します。このクラスは、サーバーまたはローカルに保存された録画済みビデオファイルを再生する Video オブジェクト、またはユーザーによってキャプチャされるライブビデオを再生する Video オブジェクトを作成します。Video オブジェクトは、アプリケーションの表示リスト上の表示オブジェクトであり、ユーザーインターフェイスで実行されるビデオのビジュアルスペースを表します。

Flash Media Server で使用する場合、Video オブジェクトにより、ユーザーがキャプチャしたライブビデオをサーバーに送信し、サーバーから他のユーザーにブロードキャストできるようになります。これらの機能を使用することで、単純なビデオプレーヤー、あるサーバーから別のサーバーへのマルチポイントパブリッシュ機能を持つビデオプレーヤー、ユーザーコミュニティ用のビデオ共有アプリケーションなどのメディアアプリケーションを開発できます。

Flash Player 9 以降では、Sorenson Spark または On2 VP6 コーデックでエンコーディングされた FLV ファイルのパブリッシュと再生をサポートし、アルファチャンネルもサポートしています。On2 VP6 ビデオコーデックは、古いテクノロジよりも少ない帯域幅を使用し、追加の非ブロックフィルターとリンギング除去フィルターを提供します。 ビデオの再生およびサポートされる形式について詳しくは、flash.net.NetStream クラスを参照してください。

Flash Player 9.0.115.0 以降では、実行時レンダリングの品質とパフォーマンスを最適化するミップマッピングがサポートされます。ビデオ再生では、Video オブジェクトの smoothing プロパティを true に設定すると、Flash Player がミップマッピング最適化を使用します。

表示リスト上の他の表示オブジェクトと同様に、Video オブジェクトの各種プロパティを制御できます。例えば、x プロパティおよび y プロパティを使用したステージ上での Video オブジェクトの移動、height プロパティおよび width プロパティを使用したサイズの変更などができます。

ビデオストリームを再生するには、attachCamera() または attachNetStream() を使用して、ビデオを Video オブジェクトに関連付けます。次に、addChild() を使用して、Video オブジェクトを表示リストに追加します。

Flash Professional を使用する場合は、addChild() を使用して追加するのではなく、次のようにステージに Video オブジェクトを配置することもできます。

  1. ライブラリパネルを表示していない場合は、ウィンドウ/ライブラリを選択して表示します。
  2. ライブラリパネルのタイトルバーの右側にある「オプション」メニューをクリックして「新規ビデオ」を選択し、埋め込み Video オブジェクトをライブラリに追加します。
  3. ビデオのプロパティダイアログボックスで、ライブラリで使用する埋め込み Video オブジェクトの名前を付け、「OK」をクリックします。
  4. Video オブジェクトをステージにドラッグし、プロパティインスペクターを使用して一意のインスタンス名(my_video など)を付けます。"Video" という名前にはしないでください。

デスクトップの AIR アプリケーションで、フルスクリーンモードでビデオを再生すると、節電機能とスクリーンセーバー機能は無効になります(オペレーティングシステムで許可されている場合)。

注意:Video クラスは InteractiveObject クラスのサブクラスではないため、マウスイベントを送出できません。ただし、Video オブジェクトを格納する表示オブジェクトコンテナで addEventListener() メソッドを呼び出すことができます。

次の例では、Video オブジェクトを NetConnection クラスおよび NetStream クラスと共に使用して、FLV ファイルをロードして再生します。この例を実行するには、videoURL に渡される変数と、ファイル名および場所が一致する FLV ファイルが必要です。この場合は、SWF ファイルと同じディレクトリにある Video.flv という名前の FLV ファイルです。

この例では、Video オブジェクトと NetStream オブジェクトを作成し、Video.attachNetStream() および NetStream.play() メソッドを呼び出すコードがハンドラー関数に配置されます。ハンドラーは、NetConnection オブジェクトへの接続が成功した場合にのみ呼び出されます。つまり、netStatus イベントが、成功したことを示す code プロパティと共に info オブジェクトを返す場合です。接続に成功するまで待ってから、NetStream.play() を呼び出すことをお勧めします。

package { import flash.display.Sprite; import flash.events.*; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class VideoExample extends Sprite { private var videoURL:String = "Video.flv"; private var connection:NetConnection; private var stream:NetStream; public function VideoExample() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Unable to locate video: " + videoURL); break; } } private function connectStream():void { stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); var video:Video = new Video(); video.attachNetStream(stream); stream.play(videoURL); addChild(video); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function asyncErrorHandler(event:AsyncErrorEvent):void { // ignore AsyncErrorEvent events. } } }
attachCamera()attachNetStream()flash.media.Camera.getCamera()flash.net.NetConnectionflash.net.NetStreamflash.display.DisplayObjectContainer.addChild()flash.display.Stage.addChild()ビデオの操作Video 新しい Video インスタンスを作成します。widthint320ビデオの幅(ピクセル単位)です。 heightint240ビデオの高さ(ピクセル単位)です。 新しい Video インスタンスを作成します。width パラメーターと height パラメーターの値が指定されていない場合は、デフォルト値が使用されます。Video オブジェクトの初期構築後に、Video.widthVideo.height を使用して幅と高さのプロパティを設定することもできます。新しい Video オブジェクトを作成する際に、幅または高さに 0 は設定できません。0 を渡すと、デフォルト値が適用されます。

Video オブジェクトの作成後、DisplayObjectContainer.addChild() メソッドまたは DisplayObjectContainer.addChildAt() メソッドを呼び出して、親 DisplayObjectContainer オブジェクトに Video オブジェクトを追加できます。

次の例は、外部 FLV ファイルをロードする方法を示しています。 var MyVideo:Video = new Video(); addChild(MyVideo); var MyNC:NetConnection = new NetConnection(); MyNC.connect(null); var MyNS:NetStream = new NetStream(MyNC); MyNS.play("http://www.helpexamples.com/flash/video/clouds.flv"); MyVideo.attachNetStream(MyNS); //the clouds.flv video has metadata we're not using, so create //an error handler to ignore the message generated by the runtime //about the metadata MyNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); function asyncErrorHandler(event:AsyncErrorEvent):void { //ignore metadata error message }
attachCamera アプリケーション内の Video オブジェクトの境界内に表示するカメラからのビデオストリームを指定します。cameraflash.media:Cameraビデオデータをキャプチャする Camera オブジェクトです。Video オブジェクトへの接続を閉じるには、null を渡します。 アプリケーション内の Video オブジェクトの境界内に表示するカメラからのビデオストリームを指定します。

このメソッドは、ユーザーがキャプチャしたライブビデオを Video オブジェクトに添付するために使用します。ライブビデオをキャプチャした同じコンピューターまたはデバイスで、ローカルにライブビデオを再生することも、Flash Media Server に送信し、サーバーを使用して、他のユーザーにストリームすることもできます。

注意:iOS AIR アプリケーションでは、アプリケーションが GPU レンダリングモードを使用している際にはカメラビデオは表示されません。

このメソッドの使用方法について詳しくは、Camera.getCamera() メソッドの例を参照してください。
Video.attachNetStream()flash.media.Camera
attachNetStream アプリケーション内の Video オブジェクトの境界内に表示するビデオストリームを指定します。netStreamflash.net:NetStreamNetStream オブジェクトです。Video オブジェクトへの接続を閉じるには、null を渡します。 アプリケーション内の Video オブジェクトの境界内に表示するビデオストリームを指定します。ビデオストリームは、NetStream.play() で再生されるビデオファイル、Camera オブジェクト、または null です。ビデオファイルを使用する場合、ファイルはローカルファイルシステムまたは Flash Media Server に保存できます。netStream 引数の値に null を指定すると、Video オブジェクト内でビデオが再生されなくなります。

ビデオファイルにオーディオしか含まれない場合、このメソッドを使用する必要はありません。ビデオファイルのオーディオ部分は、NetStream.play() を呼び出すと自動的に再生されます。ビデオファイルに関連付けられたオーディオを制御するには、ビデオファイルを再生する NetStream オブジェクトの soundTransform プロパティを使用します。

このメソッドの使用方法の詳細については、このクラスの末尾の例を参照してください。
Video.attachCamera()flash.net.NetStream.soundTransformflash.net.NetStream.play()SoundTransform
clear Video オブジェクトに現在表示されているイメージ(ビデオストリームではない)をクリアします。 Video オブジェクトに現在表示されているイメージ(ビデオストリームではない)をクリアします。このメソッドは、現在のイメージを処理する場合に便利です。例えば、最後のイメージをクリアしたり、Video オブジェクトを非表示にせずにスタンバイ情報を表示したりできます。 Video.attachCamera()deblocking 事後処理中に、デコードされたビデオに適用されるフィルターのタイプを示します。int 事後処理中に、デコードされたビデオに適用されるフィルターのタイプを示します。デフォルト値の 0 に設定すると、ビデオコンプレッサは必要に応じて非ブロックフィルターを適用します。

ビデオの圧縮によって、好ましくない生成結果となる場合があります。deblocking プロパティを使用して、ブロッキングと、On2 コーデックを使用して圧縮されたビデオのリンギングを低減するフィルターを設定できます。

ブロッキングとは、各ビデオフレームを構成するブロックの境界と境界の間に見られる不具合のことです。リンギングとは、ビデオイメージ内の要素の周囲が歪曲することです。

次の 2 つの非ブロックフィルターを使用できます。1 つは Sorenson コーデックにあり、もう 1 つは On2 VP6 コーデックにあります。さらに、On2 VP6 コーデックを使用する際にはリンギング除去フィルターを使用できます。フィルターを設定するには、次のいずれかの値を使用します。

  • 0 - ビデオコンプレッサは必要に応じて非ブロックフィルターを適用します。
  • 1 - 非ブロックフィルターを使用しません。
  • 2 - Sorenson 非ブロックフィルターを使用します。
  • 3 - On2 ビデオにのみ、On2 非ブロックフィルターを使用し、リンギング除去フィルターは使用しません。
  • 4 - On2 ビデオにのみ、On2 非ブロックフィルターとリンギング除去フィルターを使用します。
  • 5 - On2 ビデオにのみ、On2 非ブロックフィルターとパフォーマンスが向上した On2 リンギング除去フィルターを使用します。

Sorenson コーデックの使用時にビデオに 2 より大きい値を選択すると、Sorenson デコーダはデフォルトで 2 になります。

非ブロックフィルターを使用すると、全体的な再生のパフォーマンスに影響します。高帯域幅のビデオには、通常は必要ありません。非ブロックフィルターを有効にしたビデオは、処理能力の低いシステムでは再生が困難なことがあります。

smoothing ビデオを拡大 / 縮小する際にスムージング(補間)するかどうかを指定します。Boolean ビデオを拡大 / 縮小する際にスムージング(補間)するかどうかを指定します。スムージングを行うには、ランタイムが高品質モード(デフォルト)である必要があります。デフォルト値は false(スムージングなし)です。

Flash Player 9.0.115.0 以降のバージョンを使用するビデオ再生では、このプロパティを true に設定して、ミップマッピングイメージ最適化を利用します。

videoHeight ビデオストリームの高さをピクセル単位で指定する整数です。int ビデオストリームの高さをピクセル単位で指定する整数です。ライブストリームの場合、この値はビデオストリームをキャプチャしている Camera オブジェクトの Camera.height プロパティと同じです。録画済みビデオファイルの場合、この値はビデオの高さです。

このプロパティは、ステージ上の実際の Video オブジェクトのサイズとは関係なく、キャプチャしたのと同じサイズでユーザーに対してビデオを表示する場合などに使用します。

flash.media.Camera.height
videoWidth ビデオストリームの幅をピクセル単位で指定する整数です。int ビデオストリームの幅をピクセル単位で指定する整数です。ライブストリームの場合、この値はビデオストリームをキャプチャしている Camera オブジェクトの Camera.width プロパティと同じです。録画済みビデオファイルの場合、この値はビデオの幅です。

このプロパティは、ステージ上の実際の Video オブジェクトのサイズとは関係なく、キャプチャしたのと同じサイズでユーザーに対してビデオを表示する場合などに使用します。

flash.media.Camera.width