* iframe 内で生成して、Audio Sprite の preset で再生できないか?\r
*/\r
var X_Audio_Sprite_shouldUse = window.HTMLAudioElement && ( X_UA[ 'iOS' ] || X_UA[ 'AndroidBrowser' ] || X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ), // Flash がない\r
- X_Audio_Sprite_useVideoForMulti = 4 <= X_UA[ 'AndroidBrowser' ] && 534.3 < X_UA[ 'AndroidWebkit' ], // ドスパラパッドはビデオのインライン再生が不可 \r
- X_Audio_Sprite_needTouchAndroid = X_Audio_Sprite_useVideoForMulti, \r
+ X_Audio_Sprite_useVideoForMulti = //( X_UA[ 'AndroidBrowser3' ] && 3.1 <= X_UA[ 'AndroidBrowser' ] ) || \r
+ //( ( 4.2 <= X_UA[ 'AndroidBrowser' ] || ( 4.1 <= X_UA[ 'AndroidBrowser' ] && 2 <= X_UA[ 'AndroidPatch' ] ) ) && X_UA[ 'AndroidWebkit' ] <= 534.3 ),\r
+ // ドスパラパッドはビデオのインライン再生が不可, 534.30 で Webkit系は終了, 次は 537.36 で Chrome系\r
+ false, //X_UA[ 'AndroidChromeBrowser' ],\r
+ X_Audio_Sprite_needTouchAndroid = X_UA[ 'AndroidChromeBrowser' ] && !X_Audio_WebAudioWrapper,\r
X_Audio_Sprite_needTouchFirst = X_UA[ 'iOS' ] || X_Audio_Sprite_needTouchAndroid || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
- X_Audio_Sprite_enableMultiTrack = !( X_UA[ 'iOS' ] && !X_Audio_WebAudio_context ) && !( X_UA[ 'AndroidBrowser4' ] && X_UA[ 'AndroidWebkit' ] <= 534.3 ) && !( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
+ X_Audio_Sprite_disableMultiTrack = ( X_UA[ 'iOS' ] && !X_Audio_WebAudio_context ) || ( !X_UA[ 'AndroidChromeBrowser' ] && X_UA[ 'AndroidBrowser4' ] ) || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
X_Audio_Sprite_enableVolume = window.HTMLAudioElement && ( !X_UA[ 'iOS' ] && !X_UA[ 'AndroidBrowser' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ), // TODO fennec は 25以上\r
- X_Audio_Sprite_maxTracks = !X_Audio_Sprite_enableMultiTrack ? 1 : X_Audio_Sprite_useVideoForMulti ? 2 : 9,\r
+ // http://tukumemo.com/html5-audio-sp/\r
+ // iOS6、Android4.1から同時再生が可能になりました。\r
+ X_Audio_Sprite_maxTracks = X_Audio_Sprite_useVideoForMulti ? 2 : X_Audio_Sprite_disableMultiTrack ? 1 : 9,\r
X_Audio_Sprite_lengthSilence = 10000, // 一番最初の無音部分の長さ\r
X_Audio_Sprite_lengthDistance = 5000, // 音間の無音の長さ\r
X_Audio_Sprite_uid = 0,\r
\r
n = n <= X_Audio_Sprite_maxTracks ? n : X_Audio_Sprite_maxTracks;\r
\r
+ // TODO\r
+ // Android4.x標準ブラウザ(Chrome系)でブラウザが隠れた場合に音が鳴り続ける問題、ビデオで解決できる?\r
+ //if( X_Audio_Sprite_needTouchAndroid && n === 1 ){\r
+ // video = true;\r
+ //};\r
+ \r
for( k in setting ){\r
v = setting[ k ];\r
if( X_Type_isArray( v ) && v !== urls ){\r
\r
X[ 'AudioSprite' ][ 'shouldUse' ] = X_Audio_Sprite_shouldUse;\r
X[ 'AudioSprite' ][ 'needTouchFirst' ] = X_Audio_Sprite_needTouchFirst;\r
-X[ 'AudioSprite' ][ 'enableMultiTrack' ] = X_Audio_Sprite_enableMultiTrack;\r
+X[ 'AudioSprite' ][ 'enableMultiTrack' ] = !X_Audio_Sprite_disableMultiTrack;\r
\r
// 再生が終わっているもの、終わりかけのものを探す\r
// TODO 終わりかけのもの、と一番古いもの、どちらを再利用するか?これ以上に細かい実装を望む場合は X.Audio.Sprite は使わず自力で実装\r
'load' : function(){\r
var tracks = X_Audio_Sprite_TEMP.tracks,\r
i = 0, l = tracks.length;\r
+\r
for( ; i < l; ++i ){\r
+ if( X_Audio_Sprite_needTouchAndroid ){\r
+ console.log( '[duration fix]開始 - ' + tracks[ i ][ '_rawObject' ].duration );\r
+ tracks[ i ]._playForDuration = 1;\r
+ tracks[ i ][ '_rawObject' ].play();\r
+ } else\r
if( X_UA[ 'WinPhone' ] ){\r
console.log( 'WinPhone : touch -> play()' );\r
//tracks[ i ].play( 0, X_Audio_Sprite_lengthSilence, true, 0, X_Audio_Sprite_lengthSilence ).seek( 0 );\r
},\r
\r
/*\r
- * @return uid Number\r
+ * @return {number} uid\r
*/\r
'play' : function( name ){\r
var bgm = X_Audio_Sprite_TEMP.bgmTrack,\r
for( i = 0; i < X_Audio_Sprite_numTracks; ++i ){\r
if( X_Audio_Sprite_useVideo || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
option[ 'useVideo' ] = true;\r
+ console.log( 'use video' );\r
};\r
// Audiobackend の owner として null を渡すとAudioBackend 自身へ dispatch する\r
X_Audio_Sprite_TEMP.tracks.push( last = backend.klass( null, e[ 'source' ], option ) );\r
last[ 'listenOnce' ]( X_EVENT_READY, this, X_AudioSprite_backendHandler );\r
\r
// READY, needTouchForPlay, needTouchForLoad\r
- if( X_Audio_HTMLAudioWrapper_durationFix ){\r
+ if( X_Audio_HTMLAudioWrapper_durationFix && !X_Audio_Sprite_needTouchFirst ){\r
for( i = 0; i < X_Audio_Sprite_TEMP.tracks.length; ++i ){\r
this[ 'pause' ]( i );\r
};\r
return X_CALLBACK_STOP_NOW;\r
\r
case X_EVENT_READY :\r
- console.log( 'X.AudioSprite - Ready!' );\r
- \r
if( X_Audio_Sprite_needTouchAndroid ){\r
for( i = 0; i < X_Audio_Sprite_TEMP.tracks.length; ++i ){\r
this[ 'pause' ]( i );\r
};\r
- e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this[ 'asyncDispatch' ], [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
+ e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this[ 'asyncDispatch' ], [ X_EVENT_READY ] );\r
return;\r
};\r
+ \r
+ console.log( 'X.AudioSprite - Ready!' );\r
this[ 'asyncDispatch' ]( X_EVENT_READY );\r
break;\r
};\r