OSDN Git Service

Version 0.6.130, fix X.Net & X.Audio.
[pettanr/clientJs.git] / 0.6.x / js / 07_audio / 02_XHTMLAudio.js
index 3c721fc..df0024b 100644 (file)
@@ -5,11 +5,13 @@
  */\r
 \r
 var X_Audio_HTMLAudio_playTrigger =\r
+               6 <= X_UA.iOS ? 'loadeddata' :\r
                X_UA.iOS ? 'suspend' :\r
                X_UA.AndroidBrowser2 ? 'stalled' : // Android 2.3.5(SBM101SH) では stalled は発生しない,,,\r
                X_UA.AndroidBrowser4 ? 'loadeddata' : \r
                X_UA.OperaMobile || X_UA.OperaTablet ? 'loadeddata' : 'canplay',\r
        X_Audio_HTMLAudioWrapper,\r
+       X_Audio_constructor = window.Audio || window.HTMLAudioElement,\r
        X_Audio_rawAudio,\r
        // Opera Mobile 12 android4.4.4 & 2.3.5 は 2回目以降の currentTime へのセットで currentTime が更新されなくなるため、タイマーを使用する\r
        X_Audio_HTMLAudioWrapper_currentTimeFix  = !!X_UA.OperaMobile || !!X_UA.OperaTablet, // || ( X_UA.WinPhone && X_UA.IE9 ),\r
@@ -31,31 +33,42 @@ var X_Audio_HTMLAudio_playTrigger =
        \r
        X_Audio_codecs;\r
 \r
-if( window.HTMLAudioElement && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){\r
+if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){\r
        //http://himaxoff.blog111.fc2.com/blog-entry-97.html\r
        //引数なしで new Audio() とすると、Operaでエラーになるそうなので注意。\r
-       X_Audio_rawAudio = new Audio( '' );\r
-       \r
-       X_Audio_codecs = {\r
-      mp3  : X_Audio_rawAudio.canPlayType('audio/mpeg'),\r
-      opus : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="opus"'),\r
-      ogg  : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="vorbis"'),\r
-      wav  : X_Audio_rawAudio.canPlayType('audio/wav; codecs="1"'),\r
-      aac  : X_Audio_rawAudio.canPlayType('audio/aac'),\r
-      m4a  : X_Audio_rawAudio.canPlayType('audio/x-m4a') + X_Audio_rawAudio.canPlayType('audio/m4a') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
-      mp4  : X_Audio_rawAudio.canPlayType('audio/x-mp4') + X_Audio_rawAudio.canPlayType('audio/mp4') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
-      weba : X_Audio_rawAudio.canPlayType('audio/webm; codecs="vorbis"')\r
-       };\r
-       \r
-       (function( k, v ){\r
-               for( k in X_Audio_codecs ){\r
-                       if( X_EMPTY_OBJECT[ k ] ) continue;\r
-                       v = X_Audio_codecs[ k ];\r
-                       X_Audio_codecs[ k ] = v && v.split( 'no' ).join( '' );\r
-                       console.log( k + ' ' + X_Audio_codecs[ k ] );\r
+       X_Audio_rawAudio = new X_Audio_constructor( '' );\r
+\r
+       if( X_Audio_rawAudio.canPlayType ){\r
+               X_Audio_codecs = {\r
+             mp3  : X_Audio_rawAudio.canPlayType('audio/mpeg'),\r
+             opus : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="opus"'),\r
+             ogg  : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="vorbis"'),\r
+             wav  : X_Audio_rawAudio.canPlayType('audio/wav; codecs="1"'),\r
+             aac  : X_Audio_rawAudio.canPlayType('audio/aac'),\r
+             m4a  : X_Audio_rawAudio.canPlayType('audio/x-m4a') + X_Audio_rawAudio.canPlayType('audio/m4a') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
+             mp4  : X_Audio_rawAudio.canPlayType('audio/x-mp4') + X_Audio_rawAudio.canPlayType('audio/mp4') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
+             weba : X_Audio_rawAudio.canPlayType('audio/webm; codecs="vorbis"')\r
                };\r
-       })();\r
-       \r
+               (function( k, v ){\r
+                       for( k in X_Audio_codecs ){\r
+                               if( X_EMPTY_OBJECT[ k ] ) continue;\r
+                               v = X_Audio_codecs[ k ];\r
+                               X_Audio_codecs[ k ] = v && v.split( 'no' ).join( '' );\r
+                               console.log( k + ' ' + X_Audio_codecs[ k ] );\r
+                       };\r
+               })();\r
+       } else {\r
+               // iOS3.2.3\r
+               X_Audio_codecs = {\r
+             mp3  : X_UA.IE || X_UA.Chrome || ( X_UA.Windows && X_UA.Safari ),\r
+             ogg  : 5 <= X_UA.Gecko || X_UA.Chrome || X_UA.Opera,\r
+             wav  : X_UA.Gecko || X_UA.Opera || ( X_UA.Windows && X_UA.Safari ),\r
+             aac  : X_UA.IE || X_UA.WebKit,\r
+             m4a  : X_UA.IE || X_UA.WebKit,\r
+             mp4  : X_UA.IE || X_UA.WebKit,\r
+             weba : 2 <= X_UA.Gecko || 10.6 <= X_UA.Opera // firefox4+(Gecko2+)\r
+               };\r
+       };\r
        \r
        X_Audio_HTMLAudioWrapper = X.EventDispatcher.inherits(\r
                'X.AV.HTML5AudioWrapper',\r
@@ -107,7 +120,7 @@ if( window.HTMLAudioElement && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                        document.body.appendChild( this._rawObject );\r
                                        //this._rawObject.load();\r
                                } else {\r
-                                       this._rawObject = X_Audio_rawAudio || new Audio( source );// X_Doc_create( 'audio', { src : source } ).appendToRoot();//( X.X_Node_systemNode );\r
+                                       this._rawObject = X_Audio_rawAudio || new X_Audio_constructor( source );// X_Doc_create( 'audio', { src : source } ).appendToRoot();//( X.X_Node_systemNode );\r
                                        this._rawObject.autobuffer = false;\r
                                        this._src = source;\r
                                };\r
@@ -124,13 +137,13 @@ if( window.HTMLAudioElement && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                        if( X_Audio_HTMLAudioWrapper_badOperaAndroid ){\r
                                                X_Audio_HTMLAudioWrapper_badOperaAndroid && alert( 12 );\r
                                                X_EventDispatcher_toggleAllEvents( this, false );\r
-                                               this._rawObject = new Audio( X_URL_toAbsolutePath( source ) );\r
+                                               this._rawObject = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
                                                //X_EventDispatcher_toggleAllEvents( this, true );\r
                                        } else {\r
                                                X_Audio_rawAudio.src = source;\r
                                        };\r
 \r
-                                       //this._rawObject = new Audio( X_URL_toAbsolutePath( source ) );\r
+                                       //this._rawObject = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
                                        /*!X_Audio_Sprite_needTouchFirst && */ X_Audio_rawAudio.load(); // 要る?\r
                                        X_Audio_rawAudio = null;\r
                                };\r