OSDN Git Service

Version 0.6.218, Fix the bug of X.Net & X.Audio.
[pettanr/clientJs.git] / 0.6.x / js / 07_audio / 10_XAudioSprite.js
index f0183bc..dc4ec65 100644 (file)
@@ -28,7 +28,7 @@ var X_AudioSprite_shouldUse         = X_HTMLAudio && ( X_UA[ 'iOS' ] || X_UA[ 'A
                bgmName     : '',\r
                bgmLooped   : false,\r
                bgmPlaying  : false,\r
-               event       : null\r
+               tmpEvent    : null\r
        },\r
        X_AudioSprite,\r
        X_AudioSprite_numTracks,\r
@@ -93,7 +93,7 @@ X[ 'AudioSprite' ] = function( setting ){
        \r
        X_Audio_startDetectionBackend(\r
                X_Audio_BACKENDS[ 0 ],\r
-               X_AudioSprite,\r
+               X_AudioSprite, // dispatcher として\r
                X_Array_copy( urls ),\r
                {\r
                        'volume'    : 0 <= volume && volume <= 1 ? volume : 1,\r
@@ -369,7 +369,7 @@ function X_AudioSprite_backendHandler( e ){
                                // HTMLAudio\r
                                ( e[ 'needTouchForLoad' ] && ( _e[ 'needTouchForLoad' ] = true ) )\r
                        ){\r
-                               X_AudioSprite_TEMP.event = _e;\r
+                               X_AudioSprite_TEMP.tmpEvent = _e;\r
                                last[ 'listenOnce' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler );\r
                        } else {\r
                                X_AudioSprite[ 'asyncDispatch' ]( _e );\r
@@ -388,8 +388,8 @@ function X_AudioSprite_backendHandler( e ){
                \r
                case X_EVENT_MEDIA_WAIT_FOR_TOUCH :\r
                        // TODO 全ての track の MEDIA_WAIT_FOR_TOUCH で!\r
-                       X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.event );\r
-                       delete X_AudioSprite_TEMP.event;\r
+                       X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.tmpEvent );\r
+                       delete X_AudioSprite_TEMP.tmpEvent;\r
                        break;\r
                \r
                case X_EVENT_PROGRESS :\r
@@ -398,6 +398,21 @@ function X_AudioSprite_backendHandler( e ){
                \r
                case X_EVENT_READY :\r
                        console.log( 'X.AudioSprite - Ready!' );\r
+                       \r
+                       if( X_AudioSprite_TEMP.tmpEvent ){\r
+                               // このタイミングで tmpEvent が存在する場合は、タッチをスキップして Web Audio が再生可能になった\r
+                               // つまり他の Web Audio インスタンスでタッチによる再生が開始され、自身も再生可能になった\r
+                               \r
+                               _e = X_AudioSprite_TEMP.tmpEvent;\r
+                               _e[ 'needTouchForPlay' ] = false;\r
+                               \r
+                               X_AudioSprite\r
+                                       [ 'unlisten' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler )\r
+                                       [ 'asyncDispatch' ]( _e );\r
+                               \r
+                               delete X_AudioSprite_TEMP.tmpEvent;\r
+                       };                      \r
+                       \r
                        for( i = 0; i < X_AudioSprite_numTracks; ++i ){\r
                                track = X_AudioSprite_TEMP.tracks[ i ];\r
                                ( track.autoplay || track._playReserved ) && track.actualPlay();\r