OSDN Git Service

Version 0.6.170, X.Audio is working ADVANCED_OPTIMIZATIONS.
[pettanr/clientJs.git] / 0.6.x / js / 07_audio / 10_XAudioSprite.js
index 45790ae..ac5b19e 100644 (file)
@@ -5,10 +5,10 @@
  * iframe 内で生成して、Audio Sprite の preset で再生できないか?\r
  */\r
 var X_Audio_Sprite_shouldUse        = window.HTMLAudioElement && ( X_UA[ 'iOS' ] || X_UA[ 'AndroidBrowser' ] || X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ), // Flash がない\r
-       X_Audio_Sprite_useVideoForMulti = 4 <= X_UA[ 'AndroidBrowser' ] && 534.3 < X_UA[ 'AndroidBrowserWebkit' ], // ドスパラパッドはビデオのインライン再生が不可 \r
+       X_Audio_Sprite_useVideoForMulti = 4 <= X_UA[ 'AndroidBrowser' ] && 534.3 < X_UA[ 'AndroidWebkit' ], // ドスパラパッドはビデオのインライン再生が不可 \r
        X_Audio_Sprite_needTouchAndroid = X_Audio_Sprite_useVideoForMulti,      \r
        X_Audio_Sprite_needTouchFirst   = X_UA[ 'iOS' ] || X_Audio_Sprite_needTouchAndroid || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
-       X_Audio_Sprite_enableMultiTrack = !( X_UA[ 'iOS' ] && !X_Audio_WebAudio_context ) && !( X_UA[ 'AndroidBrowser4' ] && X_UA[ 'AndroidBrowserWebkit' ] <= 534.3 ),\r
+       X_Audio_Sprite_enableMultiTrack = !( X_UA[ 'iOS' ] && !X_Audio_WebAudio_context ) && !( X_UA[ 'AndroidBrowser4' ] && X_UA[ 'AndroidWebkit' ] <= 534.3 ) && !( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
        X_Audio_Sprite_enableVolume     = window.HTMLAudioElement && ( !X_UA[ 'iOS' ] && !X_UA[ 'AndroidBrowser' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ), // TODO fennec は 25以上\r
        X_Audio_Sprite_maxTracks        = !X_Audio_Sprite_enableMultiTrack ? 1 : X_Audio_Sprite_useVideoForMulti ? 2 : 9,\r
        X_Audio_Sprite_lengthSilence    = 10000, // 一番最初の無音部分の長さ\r
@@ -47,9 +47,7 @@ X[ 'AudioSprite' ] = function( setting ){
                },\r
                k, i, v, track; \r
        \r
-       if( X_Audio_Sprite_instance ){\r
-               X_Audio_Sprite_instance[ 'kill' ]();\r
-       } else {\r
+       if( !X_Audio_Sprite_instance ){\r
                X_Audio_Sprite_instance = X_Class_override( X_EventDispatcher(), X_Audio_Sprite_members );\r
                X_ViewPort[ 'listen' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE ], X_Audio_Sprite_instance, X_Audio_Sprite_handleEvent );\r
        };\r
@@ -59,7 +57,7 @@ X[ 'AudioSprite' ] = function( setting ){
        for( k in setting ){\r
                v = setting[ k ];\r
                if( X_Type_isArray( v ) && v !== urls ){\r
-                       v = X_Object_cloneArray( v );\r
+                       v = X_Array_copy( v );\r
                        for( i = v.length; i; ){\r
                                --i;\r
                                if( i !== 2 ) v[ i ] = X_AudioWrapper_timeStringToNumber( v[ i ] );\r
@@ -69,7 +67,7 @@ X[ 'AudioSprite' ] = function( setting ){
                };\r
        };\r
        \r
-       X_Audio_startDetectionBackend( X_Audio_BACKENDS[ 0 ], X_Audio_Sprite_instance, X_Object_cloneArray( urls ), option );\r
+       X_Audio_startDetectionBackend( X_Audio_BACKENDS[ 0 ], X_Audio_Sprite_instance, X_Array_copy( urls ), option );\r
 \r
        X_Audio_Sprite_instance[ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE ], X_AudioSprite_backendHandler );\r
        X_Audio_Sprite_instance[ 'listenOnce' ]( X_EVENT_KILL_INSTANCE, X_Audio_Sprite_handleEvent );\r
@@ -134,7 +132,7 @@ X_Audio_Sprite_members = {
                                i = 0, l = tracks.length;\r
                        for( ; i < l; ++i ){\r
                                if( X_UA[ 'WinPhone' ] ){\r
-                                       console.log( 'touch -> play()' );\r
+                                       console.log( 'WinPhone : touch -> play()' );\r
                                        //tracks[ i ].play( 0, X_Audio_Sprite_lengthSilence, true, 0, X_Audio_Sprite_lengthSilence ).seek( 0 );\r
                                        this[ 'pause' ]( i );\r
                                } else {\r
@@ -306,12 +304,18 @@ function X_AudioSprite_backendHandler( e ){
                        this[ 'source' ]      = src = e[ 'source' ];\r
                        this[ 'backendName' ] = name = backend.backendName;\r
                \r
+                       console.log( i + ' / ' + X_Audio_Sprite_numTracks );\r
+               \r
                        for( i = 0; i < X_Audio_Sprite_numTracks; ++i ){\r
                                if( X_Audio_Sprite_useVideo || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
                                        option[ 'useVideo' ] = true;\r
                                };\r
                                // Audiobackend の owner として null を渡すとAudioBackend 自身へ dispatch する\r
                                X_Audio_Sprite_TEMP.tracks.push( last = backend.klass( null, e[ 'source' ], option ) );\r
+                               \r
+                               \r
+                               console.dir( backend );\r
+                               console.dir( last );\r
                        };\r
 \r
                        _e = {\r
@@ -329,6 +333,8 @@ function X_AudioSprite_backendHandler( e ){
                        };\r
                        this[ 'asyncDispatch' ]( _e );\r
                        \r
+                       console.log( 'AudioSprite - X_EVENT_BACKEND_READY' );\r
+                       \r
                        last[ 'listenOnce' ]( X_EVENT_READY, this, X_AudioSprite_backendHandler );\r
 \r
                        // READY, needTouchForPlay, needTouchForLoad\r
@@ -338,14 +344,12 @@ function X_AudioSprite_backendHandler( e ){
                                };\r
                        };\r
                        \r
-                       return X_Callback_STOP_NOW;\r
-                       break;\r
+                       return X_CALLBACK_STOP_NOW;\r
 \r
                case X_EVENT_BACKEND_NONE :\r
                        this[ 'unlisten' ]( X_EVENT_BACKEND_READY, this, X_AudioSprite_backendHandler )\r
                                [ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );\r
-                       return X_Callback_STOP_NOW;\r
-                       break;\r
+                       return X_CALLBACK_STOP_NOW;\r
                \r
                case X_EVENT_READY :\r
                        console.log( 'X.AudioSprite - Ready!' );\r
@@ -354,7 +358,7 @@ function X_AudioSprite_backendHandler( e ){
                                for( i = 0; i < X_Audio_Sprite_TEMP.tracks.length; ++i ){\r
                                        this[ 'pause' ]( i );\r
                                };\r
-                               e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this.asyncDispatch, [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
+                               e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this[ 'asyncDispatch' ], [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
                                return;\r
                        };\r
                        this[ 'asyncDispatch' ]( X_EVENT_READY );\r
@@ -388,7 +392,7 @@ function X_Audio_Sprite_handleEvent( e ){
                                if( X_Audio_Sprite_TEMP.bgmPlaying && !X_Audio_Sprite_TEMP.bgmTrack ){\r
                                        X_Audio_Sprite_TEMP.bgmTrack = e.target;\r
                                        this.play( X_Audio_Sprite_TEMP.bgmName );\r
-                                       return X.Callback.PREVENT_DEFAULT;\r
+                                       return X_CALLBACK_PREVENT_DEFAULT;\r
                                };\r
                        };\r
                        break;\r