OSDN Git Service

Version 0.6.169, add doc comment.
[pettanr/clientJs.git] / 0.6.x / js / 07_audio / 02_XHTMLAudio.js
index fcf91f4..7206221 100644 (file)
@@ -8,9 +8,11 @@ var X_Audio_HTMLAudio_playTrigger =
                6 <= X_UA[ 'iOS' ] ? 'loadeddata' :\r
                X_UA[ 'iOS' ] < 5  ? 'stalled' :\r
                X_UA[ 'iOS' ]      ? 'suspend' :\r
-               X_UA[ 'AndroidBrowser2' ] ? 'stalled' : // Android 2.3.5(SBM101SH) では stalled は発生しない,,,\r
+               X_UA[ 'AndroidBrowser2' ] || X_UA[ 'AndroidBrowser3' ] ? 'stalled' : // Android 2.3.5(SBM101SH) では stalled は発生しない,,,\r
                X_UA[ 'AndroidBrowser4' ] ? 'loadeddata' : \r
-               X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ? 'loadeddata' : 'loadeddata', //'canplay',\r
+               X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ? 'loadeddata' :\r
+               //X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ? 'canplay' :\r
+                       'loadeddata', //'canplay',\r
        X_Audio_HTMLAudioWrapper,\r
        X_Audio_constructor = window[ 'Audio' ] || window.HTMLAudioElement,\r
        X_Audio_rawAudio,\r
@@ -30,8 +32,7 @@ var X_Audio_HTMLAudio_playTrigger =
        X_Audio_HTMLAudioWrapper_ieMobile9Fix    = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
        X_Audio_HTMLAudioWrapper_durationFix     = ( !X_Audio_HTMLAudioWrapper_currentTimeFix && 12 <= X_UA[ 'Opera' ] ),\r
        \r
-       X_Audio_HTMLAudioWrapper_shortPlayFix    = //X_UA[ 'AndroidBrowser2' ],\r
-                                                                                               X_UA[ 'AndroidBrowser' ] && X_UA[ 'AndroidBrowserWebkit' ] < 534.3, // Android 4.1.1 でも遭遇\r
+       X_Audio_HTMLAudioWrapper_shortPlayFix    = X_UA[ 'AndroidBrowser' ] && X_UA[ 'AndroidWebkit' ] <= 534.3, // Android 4.1.1 でも遭遇\r
        \r
        X_Audio_codecs;\r
 \r
@@ -40,6 +41,8 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
        //引数なしで new Audio() とすると、Operaでエラーになるそうなので注意。\r
        X_Audio_rawAudio = new X_Audio_constructor( '' );\r
 \r
+       // https://html5experts.jp/miyuki-baba/3766/\r
+       // Chrome for Android31 で HE-AAC が低速再生されるバグ\r
        if( X_Audio_rawAudio.canPlayType ){\r
                X_Audio_codecs = {\r
              'mp3'  : X_Audio_rawAudio.canPlayType('audio/mpeg'),\r
@@ -165,7 +168,7 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                \r
                                X_Audio_HTMLAudioWrapper_badOperaAndroid && alert( e.type );\r
                                \r
-                               //console.log( e.type );\r
+                               X_Audio_HTMLAudioWrapper_ieMobile9Fix && e.type !== 'timeupdate' && console.log( e.type );\r
                                \r
                                switch( e.type ){\r
                                        case 'loadstart' :      //      ブラウザがコンテンツの検索を開始した場合に発生\r
@@ -226,7 +229,7 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                                \r
                                        case 'ended' :\r
                                                if( !this._closed && this.autoLoop ){\r
-                                                       if( !( this.target[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){\r
+                                                       if( !( this.target[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_CALLBACK_PREVENT_DEFAULT ) ){\r
                                                                this.looped = true;\r
                                                                this.target[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );\r
                                                                this.actualPlay();\r
@@ -265,10 +268,10 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                    if( this.playing ){\r
                                        end = X_AudioWrapper_getEndTime( this );\r
                                        now = this.getActualCurrentTime();\r
-                                       //console.log( end + ' / ' + now );\r
+                                       console.log( end + ' / ' + now );\r
                                        if( 0 + end <= 0 + now ){ // なぜか iem9 で必要,,,\r
                                                if( this.autoLoop ){\r
-                                                       if( !( this.target[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){\r
+                                                       if( !( this.target[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_CALLBACK_PREVENT_DEFAULT ) ){\r
                                                                this.looped = true;\r
                                                                this.target[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );\r
                                                                this.actualPlay();\r
@@ -348,11 +351,11 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                \r
                                // もし kill 後に autoplayTimer で呼ばれても、_closed==true なので平気\r
                                if( this._closed ) return;\r
-                               if( !this._loaded /* && !X_Audio_Sprite_inTouchAction */ ){\r
+                               if( !this._loaded && !X_Audio_HTMLAudioWrapper_ieMobile9Fix /* && !X_Audio_Sprite_inTouchAction */ ){\r
                        this.autoplay = true;\r
                        return;\r
                                };\r
-\r
+                               \r
                                if( X_Audio_HTMLAudioWrapper_ieMobile9Fix && this._playForDuration === 0 ){\r
                                        console.log( 'DurationFix開始 - ' + this[ '_rawObject' ].duration );\r
                                        this._playForDuration = 1;\r
@@ -378,7 +381,7 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                                        X_Timer_once( 0, this, this._fixForChrome );\r
                                        this[ '_rawObject' ].volume = 0;\r
                                    } else {\r
-                                       this[ '_rawObject' ].volume = this.gain;\r
+                                       this[ '_rawObject' ].volume = X_Audio_HTMLAudioWrapper_ieMobile9Fix ? 1 : this.gain;\r
                                    };\r
                                this[ '_rawObject' ].play();\r
                                this.playing = true;\r
@@ -439,7 +442,7 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
                        this.actualPlay();\r
                                } else\r
                                if( result & 4 ){\r
-                      this[ '_rawObject' ].volume = this.gain;\r
+                      this[ '_rawObject' ].volume = X_Audio_HTMLAudioWrapper_ieMobile9Fix ? 1 : this.gain;\r
                                };                              \r
                        }\r
        \r
@@ -449,6 +452,8 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){
        X_Audio_BACKENDS.push(\r
                {\r
                        backendName : 'HTML Audio',\r
+                       \r
+                       canPlay : X_Audio_codecs,\r
                /*\r
                 * HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット\r
                 * https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats\r