X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F07_audio%2F00_XAudio.js;h=017f79e376787fcfe7d980e52bad6cd1fc00385d;hb=1bfbfbb850a390a1c46546d445961966e4cdf063;hp=e923109aa33bf4b677c3e15da9c22c02d7233b9c;hpb=2956150a7c2798e60639b36d69b0c13f6b20a62a;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/07_audio/00_XAudio.js b/0.6.x/js/07_audio/00_XAudio.js index e923109..017f79e 100644 --- a/0.6.x/js/07_audio/00_XAudio.js +++ b/0.6.x/js/07_audio/00_XAudio.js @@ -12,32 +12,56 @@ var X_Audio_BACKENDS = []; // Array. -/* - * X_EVENT_BACKEND_READY - * X_EVENT_BACKEND_NONE - * - * X_EVENT_READY 再生可能、実際の状態は canplay から loadeddata まで様々、、、 - * X_EVENT_ERROR - * 1 : ユーザーによってメディアの取得が中断された - * 2 : ネットワークエラー - * 3 : メディアのデコードエラー - * 4 : メディアがサポートされていない +/** + *

複数のバックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。 + *

HTMLAudio の動作・機能がブラウザ毎にバラバラなのに業を煮やし、メソッドやイベントは独自に定義しています。 + *

バックエンドの種類

+ *

HTMLAudio, WebAudio, Silverlight + *

イベント

+ *
+ *
X.Event.BACKEND_READY
音声(src リスト)を再生可能なバックエンドが見つかった。 + *
X.Event.BACKEND_NONE
音声を再生可能なバックエンドが見つからなかった。 + *
X.Event.READY
再生可能、実際の状態は canplay から loadeddata まで様々、、、 + *
X.Event.ERROR
    + *
  • 1 : ユーザーによってメディアの取得が中断された + *
  • 2 : ネットワークエラー + *
  • 3 : メディアのデコードエラー + *
  • 4 : メディアがサポートされていない + *
+ *
X.Event.MEDIA_PLAYING
再生中に1秒以下のタイミングで発生.currentTime が取れる? + *
X.Event.MEDIA_LOOP
ループ直前に発生、キャンセル可能 + *
X.Event.MEDIA_LOOPED
ループ時に発生 + *
X.Event.MEDIA_ENDED
再生位置の(音声の)最後についた + *
X.Event.MEDIA_PAUSED
ポーズした + *
X.Event.MEDIA_WAITING
再生中に音声が待機状態に。間もなく X.Event.MEDIA_PLAYING に移行。 + *
X.Event.MEDIA_SEEKING
シーク中に音声が待機状態に。間もなく X.Event.MEDIA_PLAYING に移行。 + *
* - * X_EVENT_MEDIA_PLAYING 再生中に1秒以下のタイミングで発生.currentTime が取れる? - * X_EVENT_MEDIA_LOOP ループ直前に発生、キャンセル可能 - * X_EVENT_MEDIA_LOOPED ループ時に発生 - * X_EVENT_MEDIA_ENDED 再生位置の(音声の)最後についた - * X_EVENT_MEDIA_PAUSED ポーズした - * X_EVENT_MEDIA_WAITING 再生中に音声が待機状態に。間もなく X_EVENT_MEDIA_PLAYING に移行。 - * X_EVENT_MEDIA_SEEKING シーク中に音声が待機状態に。間もなく X_EVENT_MEDIA_PLAYING に移行。 + * @alias X.Audio + * @class 各種オーディオ機能をラップしインターフェイスを共通化する。 + * @constructs Audio + * @extends {EventDispatcher} + * @param {array|string} sourceList + * @param {object=} opt_option + * @example // + * var audio = X.Audio( [ 'etc/special.mp3', 'etc/special.ogg', 'etc/special.wav' ] ) + .listenOnce( X.Event.READY, onReady ); */ - -// TODO この内容は、AudioBackend の Abstract クラスにする。AudioSprite は Audio ではなく AudioBackend をマネージする X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( 'X.Audio', X_Class.POOL_OBJECT, { + /** + * 音声の url。X.Event.BACKEND_READY で設定される。 + * @alias Audio.prototype.source + * @type {string} + */ 'source' : '', + /** + * 音声再生バックエンドの名前。X.Event.BACKEND_READY で設定される。 + * @alias Audio.prototype.backendName + * @type {string} + */ 'backendName' : '', 'Constructor' : function( sourceList, opt_option ){ @@ -48,24 +72,37 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( this[ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE, X_EVENT_KILL_INSTANCE ], X_Audio_handleEvent ); }, + /** + * 再生。開始位置・終了位置、ループの有無、ループ以降の開始位置、ループ以降の終了位置 + * @alias Audio.prototype.play + */ 'play' : function( startTime, endTime, loop, loopStartTime, loopEndTime ){ var pair = X_Pair_get( this ); pair && pair.play( startTime, endTime, loop, loopStartTime, loopEndTime ); return this; }, - + /** + * シーク + * @alias Audio.prototype.seek + */ 'seek' : function( seekTime ){ var pair = X_Pair_get( this ); pair && pair.seek( seekTime ); return this; }, - + /** + * ポーズ + * @alias Audio.prototype.pause + */ 'pause' : function(){ var pair = X_Pair_get( this ); pair && pair.pause(); return this; }, - + /** + * 状態の getter と setter + * @alias Audio.prototype.state + */ 'state' : function( obj ){ var pair = X_Pair_get( this ); if( obj === undefined ){ @@ -87,25 +124,37 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( pair && pair.setState( obj ); return this; }, - + /** + * ループの getter と setter + * @alias Audio.prototype.loop + */ 'loop' : function( v ){ var pair = X_Pair_get( this ); pair && pair.loop( v ); return this; }, - + /** + * ボリュームの getter と setter 実装不十分! + * @alias Audio.prototype.volume + */ 'volume' : function( v ){ var pair = X_Pair_get( this ); pair && pair.volume( v ); return this; }, - + /** + * 再生位置。 + * @alias Audio.prototype.currentTime + */ 'currentTime' : function( v ){ var pair = X_Pair_get( this ); pair && pair.currentTime( v ); return this; }, - + /** + * 再生中か? + * @alias Audio.prototype.isPlaying + */ 'isPlaying' : function(){ var pair = X_Pair_get( this ); return pair && pair.playing; @@ -114,6 +163,9 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( } ); +// TODO +X[ 'Audio' ][ 'canPlay' ] = {}; + function X_Audio_handleEvent( e ){ var backend; @@ -164,7 +216,6 @@ function X_Audio_onEndedDetection( e, xaudio, sourceList, option, source, ext, s var i = X_Audio_BACKENDS.indexOf( this ), backend; if( e.canPlay ){ - xaudio._backend = i; xaudio[ 'asyncDispatch' ]( { type : X_EVENT_BACKEND_READY, 'option' : option,