OSDN Git Service

Version 0.6.186, fix X.HTMLAudio & X.AudioSprite.
authoritozyun <itozyun@user.sourceforge.jp>
Thu, 29 Oct 2015 20:28:33 +0000 (05:28 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Thu, 29 Oct 2015 20:28:33 +0000 (05:28 +0900)
0.6.x/js/01_core/02_XUA.js
0.6.x/js/07_audio/01_XWebAudio.js
0.6.x/js/07_audio/02_XHTMLAudio.js
0.6.x/js/07_audio/10_XAudioSprite.js

index 4a6228c..c96fd6c 100644 (file)
@@ -901,6 +901,7 @@ function X_Script_createActiveXObjectSafty( name ){
        return X_Script_try( X_Script_createActiveXObject, [ name ] );\r
 };\r
 \r
+// TODO GeckoActiveX\r
 function X_Script_createActiveXObject( name ){\r
        return new ActiveXObject( name );\r
 };\r
index c29e0a4..9fc97e7 100644 (file)
@@ -84,7 +84,8 @@ var X_WebAudio_context      = // 4s 以下ではない iPad 2G または iPad mi
                                                                !( X_UA[ 'Fennec' ] && X_UA[ 'Android' ] < 3 ) &&
                                                                // AOSP でも WebAudio を不完全に実装するものがある
                                                                !X_UA[ 'AOSP' ] && !( X_UA[ 'ChromeWV' ] < 5 ) &&
-                                                               !X_UA[ 'Blink' ] &&
+                                                               // Blink HTMLAudio 調査用
+                                                               //!X_UA[ 'Blink' ] &&
                                                                // Firefox40.0.5 + Windows8 で音声が途中から鳴らなくなる
                                                                // Firefox41.0.1 + Windows8 で音声が途中から鳴らなくなる
                                                                !( 40 <= X_UA[ 'Gecko' ] && X_UA[ 'Gecko' ] < 42 && X_UA[ 'Windows' ] ) &&
index 30b2794..03f8cca 100644 (file)
@@ -66,12 +66,14 @@ var
 \r
        X_HTMLAudio_need1stTouch        = X_UA[ 'iOS' ] || 4.2 <= X_UA[ 'AOSP' ] || X_UA[ 'ChromeWV' ] || X_UA[ 'WinPhone' ] || ( X_UA[ 'Blink' ] && X_UA[ 'Android' ] ),\r
 \r
-       X_HTMLAudio_playTrigger     = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) ? 'canplay' : X_UA[ 'iOS' ] ? 'suspend' : X_UA[ 'Blink' ] ? 'stalled' : 'canplaythrough',\r
+       X_HTMLAudio_playTrigger     = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) ? 'canplay' : X_UA[ 'iOS' ] ? 'suspend' : X_UA[ 'Blink' ] < 32 ? 'stalled' : 'canplaythrough',\r
 \r
        X_HTMLAudio_durationFix     = X_UA[ 'iOS' ] || X_UA[ 'ChromeWV' ] || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) ||\r
-                                                               ( X_UA[ 'Windows' ] && 12 <= X_UA[ 'Opera' ] ) || ( X_UA[ 'Blink' ] && X_UA[ 'Android' ] ),\r
+                                                               ( X_UA[ 'Windows' ] && 12 <= X_UA[ 'Opera' ] ) || ( X_UA[ 'Blink' ] < 36 && X_UA[ 'Android' ] ),\r
 \r
-       X_HTMLAudio_shortPlayFix        = X_UA[ 'AOSP' ]; // Android 4.1.1 でも遭遇\r
+       X_HTMLAudio_shortPlayFix        = X_UA[ 'AOSP' ],\r
+       \r
+       X_HTMLAudio_progressEnabled = !( X_UA[ 'Opera' ] && X_UA[ 'Android' ] ) && !( X_UA[ 'WinPhones' ] && X_UA[ 'IE9' ] ); // Android 4.1.1 でも遭遇\r
 \r
 if( X_Audio_constructor ){\r
        \r
@@ -214,7 +216,7 @@ if( X_Audio_constructor ){
                                                // console.log( e.loaded + ' ' + e.total * 100 + '%' );\r
                                                // iem9 で常に0 raw.networkState;\r
                                                // opera Android 12 で buffered.end() へのアクセスはエラー try catch も無効、iem9 は常に end(0) = 0\r
-                                               if( !( X_UA[ 'Opera' ] && X_UA[ 'Android' ] ) && !( X_UA[ 'WinPhones' ] && X_UA[ 'IE9' ] ) && this.duration ){\r
+                                               if( X_HTMLAudio_progressEnabled && this.duration && this._readyState < 2 ){\r
                                                        buf  = raw.buffered;\r
                                                        time = 0;\r
                                                        for( i = 0, l = buf.length; i < l; ++i ){\r
index 7754228..c3248a9 100644 (file)
@@ -376,7 +376,8 @@ function X_AudioSprite_backendHandler( e ){
                        };\r
                        \r
                        // TODO 全ての track の READY で!\r
-                       last[ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite_backendHandler );\r
+                       last[ 'listen' ]( X_EVENT_PROGRESS, X_AudioSprite_backendHandler )\r
+                               [ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite_backendHandler );\r
                        return X_CALLBACK_STOP_NOW;\r
 \r
                case X_EVENT_BACKEND_NONE :\r
@@ -391,6 +392,10 @@ function X_AudioSprite_backendHandler( e ){
                        delete X_AudioSprite_TEMP.event;\r
                        break;\r
                \r
+               case X_EVENT_PROGRESS :\r
+                       X_AudioSprite[ 'dispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : e[ 'percent' ] } );\r
+                       break;\r
+               \r
                case X_EVENT_READY :\r
                        console.log( 'X.AudioSprite - Ready!' );\r
                        for( i = 0; i < X_AudioSprite_numTracks; ++i ){\r
@@ -398,6 +403,7 @@ function X_AudioSprite_backendHandler( e ){
                                ( track.autoplay || track._playReserved ) && track.actualPlay();\r
                                delete track._playReserved;\r
                        };\r
+                       this[ 'listen' ]( X_EVENT_PROGRESS, X_AudioSprite_backendHandler );\r
                        X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_READY );\r
                        break;\r
        };\r
@@ -416,12 +422,12 @@ function X_AudioSprite_handleEvent( e ){
                \r
                case X_EVENT_MEDIA_BEFORE_LOOP :\r
                        if( track === X_AudioSprite_TEMP.bgmTrack ){\r
+                               // BGM\r
                                X_AudioSprite_TEMP.bgmLooped = true;\r
                                X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
                        } else {\r
-                               if( track.looped ){\r
-                                       // X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
-                               } else {\r
+                               // SE\r
+                               if( !track.looped ){\r
                                         X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_ENDED ); // TODO uid\r
                                };\r
                                \r