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
!( 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' ] ) &&
\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
// 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
};\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
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
( 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
\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