X-Git-Url: http://git.osdn.jp/view?p=pettanr%2FclientJs.git;a=blobdiff_plain;f=0.6.x%2Fjs%2F07_audio%2F10_XAudioSprite.js;fp=0.6.x%2Fjs%2F07_audio%2F10_XAudioSprite.js;h=dc4ec65e62db51bcadf49c635a6df428702de897;hp=f0183bca73edb3e1767cc459e1f70300e049ab29;hb=66ccef8a1fdd3994dd3c75dcfede668ea55f1d2e;hpb=4e4ab3be10850546063d4a4b93250ed142bb8cd2 diff --git a/0.6.x/js/07_audio/10_XAudioSprite.js b/0.6.x/js/07_audio/10_XAudioSprite.js index f0183bc..dc4ec65 100644 --- a/0.6.x/js/07_audio/10_XAudioSprite.js +++ b/0.6.x/js/07_audio/10_XAudioSprite.js @@ -28,7 +28,7 @@ var X_AudioSprite_shouldUse = X_HTMLAudio && ( X_UA[ 'iOS' ] || X_UA[ 'A bgmName : '', bgmLooped : false, bgmPlaying : false, - event : null + tmpEvent : null }, X_AudioSprite, X_AudioSprite_numTracks, @@ -93,7 +93,7 @@ X[ 'AudioSprite' ] = function( setting ){ X_Audio_startDetectionBackend( X_Audio_BACKENDS[ 0 ], - X_AudioSprite, + X_AudioSprite, // dispatcher として X_Array_copy( urls ), { 'volume' : 0 <= volume && volume <= 1 ? volume : 1, @@ -369,7 +369,7 @@ function X_AudioSprite_backendHandler( e ){ // HTMLAudio ( e[ 'needTouchForLoad' ] && ( _e[ 'needTouchForLoad' ] = true ) ) ){ - X_AudioSprite_TEMP.event = _e; + X_AudioSprite_TEMP.tmpEvent = _e; last[ 'listenOnce' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler ); } else { X_AudioSprite[ 'asyncDispatch' ]( _e ); @@ -388,8 +388,8 @@ function X_AudioSprite_backendHandler( e ){ case X_EVENT_MEDIA_WAIT_FOR_TOUCH : // TODO 全ての track の MEDIA_WAIT_FOR_TOUCH で! - X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.event ); - delete X_AudioSprite_TEMP.event; + X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.tmpEvent ); + delete X_AudioSprite_TEMP.tmpEvent; break; case X_EVENT_PROGRESS : @@ -398,6 +398,21 @@ function X_AudioSprite_backendHandler( e ){ case X_EVENT_READY : console.log( 'X.AudioSprite - Ready!' ); + + if( X_AudioSprite_TEMP.tmpEvent ){ + // このタイミングで tmpEvent が存在する場合は、タッチをスキップして Web Audio が再生可能になった + // つまり他の Web Audio インスタンスでタッチによる再生が開始され、自身も再生可能になった + + _e = X_AudioSprite_TEMP.tmpEvent; + _e[ 'needTouchForPlay' ] = false; + + X_AudioSprite + [ 'unlisten' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler ) + [ 'asyncDispatch' ]( _e ); + + delete X_AudioSprite_TEMP.tmpEvent; + }; + for( i = 0; i < X_AudioSprite_numTracks; ++i ){ track = X_AudioSprite_TEMP.tracks[ i ]; ( track.autoplay || track._playReserved ) && track.actualPlay();