bgmName : '',\r
bgmLooped : false,\r
bgmPlaying : false,\r
- event : null\r
+ tmpEvent : null\r
},\r
X_AudioSprite,\r
X_AudioSprite_numTracks,\r
\r
X_Audio_startDetectionBackend(\r
X_Audio_BACKENDS[ 0 ],\r
- X_AudioSprite,\r
+ X_AudioSprite, // dispatcher として\r
X_Array_copy( urls ),\r
{\r
'volume' : 0 <= volume && volume <= 1 ? volume : 1,\r
// TODO 今は touch 可能で backend ready\r
if(\r
// WebAudio\r
- ( backend.backendID === 1 && ( _e[ 'needTouchForPlay' ] = X_WebAudio_need1stTouch ) ) ||\r
+ ( e[ 'needTouchForPlay' ] && ( _e[ 'needTouchForPlay' ] = true ) ) ||\r
// HTMLAudio\r
- ( backend.backendID === 2 && ( _e[ 'needTouchForLoad' ] = X_HTMLAudio_need1stTouch ) )\r
+ ( e[ 'needTouchForLoad' ] && ( _e[ 'needTouchForLoad' ] = true ) )\r
){\r
- X_AudioSprite_TEMP.event = _e;\r
- last[ 'listenOnce' ]( X_EVENT_MEDIA_TOUCH_FOR_LOAD, X_AudioSprite_backendHandler );\r
+ X_AudioSprite_TEMP.tmpEvent = _e;\r
+ last[ 'listenOnce' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler );\r
} else {\r
X_AudioSprite[ 'asyncDispatch' ]( _e );\r
};\r
[ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );\r
return X_CALLBACK_STOP_NOW;\r
\r
- case X_EVENT_MEDIA_TOUCH_FOR_LOAD :\r
- // TODO 全ての track の MEDIA_TOUCH_FOR_LOAD で!\r
- X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.event );\r
- delete X_AudioSprite_TEMP.event;\r
+ case X_EVENT_MEDIA_WAIT_FOR_TOUCH :\r
+ // TODO 全ての track の MEDIA_WAIT_FOR_TOUCH で!\r
+ X_AudioSprite[ 'asyncDispatch' ]( X_AudioSprite_TEMP.tmpEvent );\r
+ delete X_AudioSprite_TEMP.tmpEvent;\r
break;\r
\r
case X_EVENT_PROGRESS :\r
\r
case X_EVENT_READY :\r
console.log( 'X.AudioSprite - Ready!' );\r
+ \r
+ if( X_AudioSprite_TEMP.tmpEvent ){\r
+ // このタイミングで tmpEvent が存在する場合は、タッチをスキップして Web Audio が再生可能になった\r
+ // つまり他の Web Audio インスタンスでタッチによる再生が開始され、自身も再生可能になった\r
+ \r
+ _e = X_AudioSprite_TEMP.tmpEvent;\r
+ _e[ 'needTouchForPlay' ] = false;\r
+ \r
+ X_AudioSprite\r
+ [ 'unlisten' ]( X_EVENT_MEDIA_WAIT_FOR_TOUCH, X_AudioSprite_backendHandler )\r
+ [ 'asyncDispatch' ]( _e );\r
+ \r
+ delete X_AudioSprite_TEMP.tmpEvent;\r
+ }; \r
+ \r
for( i = 0; i < X_AudioSprite_numTracks; ++i ){\r
track = X_AudioSprite_TEMP.tracks[ i ];\r
( track.autoplay || track._playReserved ) && track.actualPlay();\r