bgmPosition : 0,\r
bgmName : '',\r
bgmLooped : false,\r
- bgmPlaying : false\r
+ bgmPlaying : false,\r
+ event : null\r
},\r
X_AudioSprite,\r
X_AudioSprite_numTracks,\r
volume = setting[ 'volume' ],\r
k, i, v, track;\r
\r
- if( !X_AudioSprite ){\r
- X_AudioSprite = X_Class_override( X_EventDispatcher(), X_AudioSprite_members );\r
- X_ViewPort[ 'listen' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE, X_EVENT_UNLOAD ], X_AudioSprite, X_AudioSprite_handleEvent );\r
- };\r
+\r
+ if( X_AudioSprite ) X_AudioSprite[ 'kill' ]();\r
+\r
+ X_AudioSprite = X_Class_override( X_EventDispatcher(), X_AudioSprite_members );\r
+ X_ViewPort[ 'listen' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE, X_EVENT_UNLOAD ], X_AudioSprite_handleEvent );\r
\r
n = n <= X_AudioSprite_maxTracks ? n : X_AudioSprite_maxTracks;\r
\r
track = X_AudioSprite_TEMP.bgmTrack = tracks[ 0 ];\r
};\r
\r
- if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite, X_AudioSprite_handleEvent ).playing ){\r
+ if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite_handleEvent ).playing ){\r
track.setState({\r
'loop' : true,\r
'looped' : X_AudioSprite_TEMP.bgmLooped,\r
if( 1 < X_AudioSprite_numTracks ){\r
track = X_AudioSprite_getTrackEnded( X_AudioSprite_TEMP.bgmPlaying );\r
track\r
- [ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite, X_AudioSprite_handleEvent )\r
+ [ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite_handleEvent )\r
.setState( { 'looped' : false } );\r
track.play( preset[ 0 ], preset[ 1 ], true, 0, X_AudioSprite_lengthSilence );\r
} else {\r
};\r
track = tracks[ 0 ];\r
\r
- if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite, X_AudioSprite_handleEvent ).playing ){\r
+ if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_WAITING, X_EVENT_MEDIA_SEEKING, X_EVENT_MEDIA_BEFORE_LOOP ], X_AudioSprite_handleEvent ).playing ){\r
track.setState({\r
'loop' : true,\r
'looped' : false,\r
'loopEndTime' : X_AudioSprite_lengthSilence\r
});\r
} else {\r
- \r
track.play( preset[ 0 ], preset[ 1 ], true, 0, X_AudioSprite_lengthSilence ); \r
};\r
};\r
};\r
// Audiobackend の owner として null を渡すとAudioBackend 自身へ dispatch する\r
X_AudioSprite_TEMP.tracks.push(\r
- last = backend.klass( null, e[ 'source' ], option )[ 'listen' ]( X_EVENT_DEBUG, X_AudioSprite, X_AudioSprite_handleEvent ) );\r
+ last = backend.klass( null, e[ 'source' ], option )[ 'listen' ]( X_EVENT_DEBUG, X_AudioSprite_handleEvent ) );\r
};\r
\r
_e = {\r
'source' : src,\r
'backendName' : name\r
};\r
- // touch 可能で backend ready\r
- // WebAudio\r
- if( backend.backendID === 1 && ( _e[ 'needTouchForPlay' ] = X_WebAudio_need1stTouch ) ){\r
- last[ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite, X_AudioSprite[ 'asyncDispatch' ], [ _e ] );\r
- } else\r
- // HTMLAudio\r
- if( backend.backendID === 2 && ( _e[ 'needTouchForLoad' ] = X_HTMLAudio_need1stTouch ) ){\r
- last[ 'listenOnce' ]( X_EVENT_MEDIA_TOUCH_FOR_LOAD, X_AudioSprite, X_AudioSprite[ 'asyncDispatch' ], [ _e ] );\r
+ \r
+ // TODO 今は touch 可能で backend ready\r
+ if(\r
+ // WebAudio\r
+ ( backend.backendID === 1 && ( _e[ 'needTouchForPlay' ] = X_WebAudio_need1stTouch ) ) ||\r
+ // HTMLAudio\r
+ ( backend.backendID === 2 && ( _e[ 'needTouchForLoad' ] = X_HTMLAudio_need1stTouch ) )\r
+ ){\r
+ X_AudioSprite_TEMP.event = _e;\r
+ last[ 'listenOnce' ]( X_EVENT_MEDIA_TOUCH_FOR_LOAD, X_AudioSprite_backendHandler );\r
} else {\r
X_AudioSprite[ 'asyncDispatch' ]( _e );\r
};\r
\r
- last[ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite, X_AudioSprite_backendHandler );\r
+ // TODO 全ての track の READY で!\r
+ last[ 'listenOnce' ]( X_EVENT_READY, X_AudioSprite_backendHandler );\r
return X_CALLBACK_STOP_NOW;\r
\r
case X_EVENT_BACKEND_NONE :\r
- X_AudioSprite[ 'unlisten' ]( X_EVENT_BACKEND_READY, X_AudioSprite, X_AudioSprite_backendHandler )\r
+ X_AudioSprite\r
+ [ 'listen' ]( X_EVENT_BACKEND_NONE, X_AudioSprite_handleEvent ) // kill を呼ぶ\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
+ break;\r
+ \r
case X_EVENT_READY :\r
console.log( 'X.AudioSprite - Ready!' );\r
for( i = 0; i < X_AudioSprite_numTracks; ++i ){\r
\r
\r
function X_AudioSprite_handleEvent( e ){\r
- var i, tracks, track, _e, k;\r
+ var track = e.target, i, tracks, _e, k;\r
\r
switch( e.type ){\r
case X_EVENT_MEDIA_PLAYING :\r
- ( e.target === X_AudioSprite_TEMP.bgmTrack || !e.target.looped ) && X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_PLAYING );\r
- break;\r
case X_EVENT_MEDIA_WAITING :\r
case X_EVENT_MEDIA_SEEKING :\r
- ( e.target === X_AudioSprite_TEMP.bgmTrack || !e.target.looped ) && X_AudioSprite[ 'asyncDispatch' ]( e.type );\r
+ ( track === X_AudioSprite_TEMP.bgmTrack || !track.looped ) && X_AudioSprite[ 'asyncDispatch' ]( e.type );\r
break;\r
\r
case X_EVENT_MEDIA_BEFORE_LOOP :\r
- if( e.target === X_AudioSprite_TEMP.bgmTrack ){\r
+ if( track === X_AudioSprite_TEMP.bgmTrack ){\r
X_AudioSprite_TEMP.bgmLooped = true;\r
X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
} else {\r
- if( e.target.looped ){\r
+ if( track.looped ){\r
// X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
} else {\r
X_AudioSprite[ 'asyncDispatch' ]( X_EVENT_MEDIA_ENDED ); // TODO uid\r
\r
// single track | iOS\r
if( X_AudioSprite_TEMP.bgmPlaying && !X_AudioSprite_TEMP.bgmTrack ){\r
- X_AudioSprite_TEMP.bgmTrack = e.target;\r
+ X_AudioSprite_TEMP.bgmTrack = track;\r
X_AudioSprite.play( X_AudioSprite_TEMP.bgmName );\r
return X_CALLBACK_PREVENT_DEFAULT;\r
};\r
\r
\r
case X_EVENT_DEBUG :\r
- i = X_AudioSprite_TEMP.tracks.indexOf( e.target );\r
+ i = X_AudioSprite_TEMP.tracks.indexOf( track );\r
if( 0 <= i ){\r
e[ 'trackID' ] = i;\r
X_AudioSprite[ 'dispatch' ]( e );\r
};\r
break;\r
\r
+ case X_EVENT_BACKEND_NONE :\r
case X_EVENT_UNLOAD :\r
- console.log( '■ unload' );\r
+ X_AudioSprite[ 'kill' ]();\r
+ break;\r
\r
case X_EVENT_KILL_INSTANCE :\r
+ X_AudioSprite_TEMP.pauseTracks.length = 0;\r
+ \r
while( X_AudioSprite_TEMP.tracks.length ){\r
X_AudioSprite_TEMP.tracks.pop()[ 'kill' ]();\r
};\r
\r
- for( k in X_AudioSprite_TEMP.bgms ){\r
- delete X_AudioSprite_TEMP.bgms[ k ];\r
+ for( k in X_AudioSprite_TEMP.BGMs ){\r
+ delete X_AudioSprite_TEMP.BGMs[ k ];\r
};\r
for( k in X_AudioSprite_TEMP.presets ){\r
delete X_AudioSprite_TEMP.presets[ k ];\r
X_AudioSprite_TEMP.bgmLooped = false;\r
X_AudioSprite_TEMP.bgmPlaying = false;\r
\r
- X_ViewPort[ 'unlisten' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE, X_EVENT_UNLOAD ], X_AudioSprite, X_AudioSprite_handleEvent );\r
+ X_ViewPort[ 'unlisten' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE, X_EVENT_UNLOAD ], X_AudioSprite_handleEvent );\r
+ X_AudioSprite = null;\r
break;\r
};\r
};\r