+ X_Audio_codecs;
+
+if( X_Audio_constructor ){
+ //http://himaxoff.blog111.fc2.com/blog-entry-97.html
+ //引数なしで new Audio() とすると、Operaでエラーになるそうなので注意。
+ X_TEMP.rawAudio = new X_Audio_constructor( '' );
+
+ // https://html5experts.jp/miyuki-baba/3766/
+ // TODO Chrome for Android31 で HE-AAC が低速再生されるバグ
+ // TODO Android4 標準ブラウザで ogg のシークが正しくない!
+ if( X_TEMP.rawAudio.canPlayType ){
+ X_Audio_codecs = {
+ 'mp3' : X_TEMP.rawAudio.canPlayType('audio/mpeg'),
+ 'opus' : X_TEMP.rawAudio.canPlayType('audio/ogg; codecs="opus"'),
+ 'ogg' : X_TEMP.rawAudio.canPlayType('audio/ogg; codecs="vorbis"'),
+ 'wav' : X_TEMP.rawAudio.canPlayType('audio/wav; codecs="1"'),
+ 'aac' : X_TEMP.rawAudio.canPlayType('audio/aac'),
+ 'm4a' : X_TEMP.rawAudio.canPlayType('audio/x-m4a') + X_TEMP.rawAudio.canPlayType('audio/m4a') + X_TEMP.rawAudio.canPlayType('audio/aac'),
+ 'mp4' : X_TEMP.rawAudio.canPlayType('audio/x-mp4') + X_TEMP.rawAudio.canPlayType('audio/mp4') + X_TEMP.rawAudio.canPlayType('audio/aac'),
+ 'weba' : X_TEMP.rawAudio.canPlayType('audio/webm; codecs="vorbis"')
+ };
+ (function( X_Audio_codecs, k, v ){
+ for( k in X_Audio_codecs ){
+ //if( X_EMPTY_OBJECT[ k ] ) continue;
+ v = X_Audio_codecs[ k ];
+ v = v && !!( v.split( 'no' ).join( '' ) );
+ if( v ){
+ console.log( k + ' ' + X_Audio_codecs[ k ] );
+ X_Audio_codecs[ k ] = true;
+ } else {
+ delete X_Audio_codecs[ k ];
+ };
+ };
+ if( X_Audio_blinkOperaFix ) delete X_Audio_codecs[ 'mp3' ];
+ })( X_Audio_codecs );
+ } else {
+ // iOS3.2.3
+ X_Audio_codecs = {
+ 'mp3' : X_UA[ 'IE' ] || X_UA[ 'Chrome' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),
+ 'ogg' : 5 <= X_UA[ 'Gecko' ] || X_UA[ 'Chrome' ] || X_UA[ 'Opera' ] ,
+ 'wav' : X_UA[ 'Gecko' ] || X_UA[ 'Opera' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),
+ 'aac' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],
+ 'm4a' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],
+ 'mp4' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],
+ 'weba' : 2 <= X_UA[ 'Gecko' ] || 10.6 <= X_UA[ 'Opera' ] // firefox4+(Gecko2+)
+ };
+ (function( X_Audio_codecs, k ){
+ for( k in X_Audio_codecs ){
+ //if( X_EMPTY_OBJECT[ k ] ) continue;
+ if( X_Audio_codecs[ k ] ){
+ console.log( k + ' ' + X_Audio_codecs[ k ] );
+ X_Audio_codecs[ k ] = true;
+ } else {
+ delete X_Audio_codecs[ k ];
+ };
+ };
+ })( X_Audio_codecs );
+ };
+
+ if( X_Audio_blinkOperaFix ){
+ X_Audio_constructor = null;
+ delete X_TEMP.rawAudio;
+ };
+};
+
+
+var X_WebAudio_context = // 4s 以下ではない iPad 2G または iPad mini 1G 以下ではない, iPod touch 4G 以下ではない
+ !X_UA[ 'iPhone_4s' ] && !X_UA[ 'iPad_2Mini1' ] && !X_UA[ 'iPod_4' ] &&
+ // iOS7 以上で HTML Audio が鳴らない問題を見ていくよ
+ // !X_UA[ 'iOS' ] &&
+ // Android2 + Gecko で WebAudio が極めて不安定
+ !( X_UA[ 'Fennec' ] && X_UA[ 'Android' ] < 3 ) &&
+ // AOSP でも WebAudio を不完全に実装するものがある, touch の有無も不明のため一律に切ってしまう
+ !X_UA[ 'AOSP' ] && !( X_UA[ 'ChromeWV' ] < 5 ) &&
+ // Blink HTMLAudio 調査用
+ //!X_UA[ 'Blink' ] &&
+ // Firefox40.0.5 + Windows8 で音声が途中から鳴らなくなる
+ // Firefox41.0.1 + Windows8 で音声が途中から鳴らなくなる
+ !( 40 <= X_UA[ 'Gecko' ] && X_UA[ 'Gecko' ] < 45 && X_UA[ 'Windows' ] ) &&
+ ( window[ 'AudioContext' ] || window[ 'webkitAudioContext' ] ),
+ X_WebAudio_BUFFER_LIST = [],
+ X_WebAudio_need1stTouch = X_UA[ 'iOS' ],
+ X_WebAudio_touchState = X_WebAudio_need1stTouch,
+ X_WebAudio,
+ X_WebAudio_BufferLoader,
+ X_WebAudio_fpsFix;