From: itozyun Date: Thu, 29 Oct 2015 20:28:33 +0000 (+0900) Subject: Version 0.6.186, fix X.HTMLAudio & X.AudioSprite. X-Git-Url: http://git.osdn.jp/view?p=pettanr%2FclientJs.git;a=commitdiff_plain;h=9e04e2a1221a92960a74e550bc3fd809caf3cd1c Version 0.6.186, fix X.HTMLAudio & X.AudioSprite. --- diff --git a/0.6.x/js/01_core/02_XUA.js b/0.6.x/js/01_core/02_XUA.js index 4a6228c..c96fd6c 100644 --- a/0.6.x/js/01_core/02_XUA.js +++ b/0.6.x/js/01_core/02_XUA.js @@ -901,6 +901,7 @@ function X_Script_createActiveXObjectSafty( name ){ return X_Script_try( X_Script_createActiveXObject, [ name ] ); }; +// TODO GeckoActiveX function X_Script_createActiveXObject( name ){ return new ActiveXObject( name ); }; diff --git a/0.6.x/js/07_audio/01_XWebAudio.js b/0.6.x/js/07_audio/01_XWebAudio.js index c29e0a4..9fc97e7 100644 --- a/0.6.x/js/07_audio/01_XWebAudio.js +++ b/0.6.x/js/07_audio/01_XWebAudio.js @@ -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' ] ) && diff --git a/0.6.x/js/07_audio/02_XHTMLAudio.js b/0.6.x/js/07_audio/02_XHTMLAudio.js index 30b2794..03f8cca 100644 --- a/0.6.x/js/07_audio/02_XHTMLAudio.js +++ b/0.6.x/js/07_audio/02_XHTMLAudio.js @@ -66,12 +66,14 @@ var X_HTMLAudio_need1stTouch = X_UA[ 'iOS' ] || 4.2 <= X_UA[ 'AOSP' ] || X_UA[ 'ChromeWV' ] || X_UA[ 'WinPhone' ] || ( X_UA[ 'Blink' ] && X_UA[ 'Android' ] ), - X_HTMLAudio_playTrigger = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) ? 'canplay' : X_UA[ 'iOS' ] ? 'suspend' : X_UA[ 'Blink' ] ? 'stalled' : 'canplaythrough', + X_HTMLAudio_playTrigger = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) ? 'canplay' : X_UA[ 'iOS' ] ? 'suspend' : X_UA[ 'Blink' ] < 32 ? 'stalled' : 'canplaythrough', X_HTMLAudio_durationFix = X_UA[ 'iOS' ] || X_UA[ 'ChromeWV' ] || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ) || - ( X_UA[ 'Windows' ] && 12 <= X_UA[ 'Opera' ] ) || ( X_UA[ 'Blink' ] && X_UA[ 'Android' ] ), + ( X_UA[ 'Windows' ] && 12 <= X_UA[ 'Opera' ] ) || ( X_UA[ 'Blink' ] < 36 && X_UA[ 'Android' ] ), - X_HTMLAudio_shortPlayFix = X_UA[ 'AOSP' ]; // Android 4.1.1 でも遭遇 + X_HTMLAudio_shortPlayFix = X_UA[ 'AOSP' ], + + X_HTMLAudio_progressEnabled = !( X_UA[ 'Opera' ] && X_UA[ 'Android' ] ) && !( X_UA[ 'WinPhones' ] && X_UA[ 'IE9' ] ); // Android 4.1.1 でも遭遇 if( X_Audio_constructor ){ @@ -214,7 +216,7 @@ if( X_Audio_constructor ){ // console.log( e.loaded + ' ' + e.total * 100 + '%' ); // iem9 で常に0 raw.networkState; // opera Android 12 で buffered.end() へのアクセスはエラー try catch も無効、iem9 は常に end(0) = 0 - if( !( X_UA[ 'Opera' ] && X_UA[ 'Android' ] ) && !( X_UA[ 'WinPhones' ] && X_UA[ 'IE9' ] ) && this.duration ){ + if( X_HTMLAudio_progressEnabled && this.duration && this._readyState < 2 ){ buf = raw.buffered; time = 0; for( i = 0, l = buf.length; i < l; ++i ){ diff --git a/0.6.x/js/07_audio/10_XAudioSprite.js b/0.6.x/js/07_audio/10_XAudioSprite.js index 7754228..c3248a9 100644 --- a/0.6.x/js/07_audio/10_XAudioSprite.js +++ b/0.6.x/js/07_audio/10_XAudioSprite.js @@ -376,7 +376,8 @@ function X_AudioSprite_backendHandler( e ){ }; // TODO 全ての track の READY で! - last[ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite_backendHandler ); + last[ 'listen' ]( X_EVENT_PROGRESS, X_AudioSprite_backendHandler ) + [ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite_backendHandler ); return X_CALLBACK_STOP_NOW; case X_EVENT_BACKEND_NONE : @@ -391,6 +392,10 @@ function X_AudioSprite_backendHandler( e ){ delete X_AudioSprite_TEMP.event; break; + case X_EVENT_PROGRESS : + X_AudioSprite[ 'dispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : e[ 'percent' ] } ); + break; + case X_EVENT_READY : console.log( 'X.AudioSprite - Ready!' ); for( i = 0; i < X_AudioSprite_numTracks; ++i ){ @@ -398,6 +403,7 @@ function X_AudioSprite_backendHandler( e ){ ( track.autoplay || track._playReserved ) && track.actualPlay(); delete track._playReserved; }; + this[ 'listen' ]( X_EVENT_PROGRESS, X_AudioSprite_backendHandler ); X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_READY ); break; }; @@ -416,12 +422,12 @@ function X_AudioSprite_handleEvent( e ){ case X_EVENT_MEDIA_BEFORE_LOOP : if( track === X_AudioSprite_TEMP.bgmTrack ){ + // BGM X_AudioSprite_TEMP.bgmLooped = true; X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid } else { - if( track.looped ){ - // X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid - } else { + // SE + if( !track.looped ){ X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_ENDED ); // TODO uid };