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' ] &&
+ !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[ 'Blink' ] &&
// Firefox40.0.5 + Windows8 で音声が途中から鳴らなくなる
// Firefox41.0.1 + Windows8 で音声が途中から鳴らなくなる
- !( 40 <= X_UA[ 'Gecko' ] && X_UA[ 'Gecko' ] < 43 && X_UA[ 'Windows' ] ) &&
+ !( 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' ],
_onDecodeSuccess : function( buffer ){
this.onDecodeSuccess && this._onDecodeComplete();
- if ( !buffer ) {
+ if( !buffer ){
this.errorState = 2;
this[ 'asyncDispatch' ]( X_EVENT_COMPLETE );
return;
unregister : function( webAudio ){
var list = this.webAudioList,
i = list.indexOf( webAudio );
+
if( 0 < i ){
list.splice( i, 1 );
if( !list.length ){
_startPos : 0,
_endPosition : 0,
_startTime : 0,
- _timerID : 0,
+ //_timerID : 0,
_interval : 0,
audioBuffer : null,
bufferSource : null,
if ( !buffer ) {
this.error = loader.errorState;
-
this.disatcher[ 'dispatch' ]({
type : X_EVENT_ERROR,
error : loader.errorState,
//console.log( '> use onended' );
//this.bufferSource.onended = this._onended || ( this._onended = X_Closure_create( this, this._onEnded ) );
//} else {
- this._timerID && X_Timer_remove( this._timerID );
- this._timerID = X_Timer_once( end - begin, this, this._onEnded );
+ //this._timerID && X_Timer_remove( this._timerID );
+ //this._timerID = X_Timer_once( end - begin, this, this._onEnded );
//};
if( this.bufferSource.start ){
this._startPos = begin;
this._endPosition = end;
this._startTime = X_WebAudio_context.currentTime * 1000;
- this._interval = this._interval || X_Timer_add( 1000, 0, this, this._onInterval );
+ // this._interval = this._interval || X_Timer_add( 1000, 0, this, this._onInterval );
+ this._interval = this._interval || X_Timer_add( 100, 0, this, this._onEnded );
},
_sourceDispose : function(){
delete this.bufferSource;
},
+ /*
_onInterval : function(){
if( !this.playing ){
delete this._interval;
return X_CALLBACK_UN_LISTEN;
};
this.disatcher[ 'dispatch' ]( X_EVENT_MEDIA_PLAYING );
- },
-
+ }, */
+
_onEnded : function(){
var time;
- delete this._timerID;
+ //delete this._timerID;
if( this.playing ){
time = X_WebAudio_context.currentTime * 1000 - this._startTime - this._endPosition + this._startPos | 0;
if( time < 0 ) return;
} else {
if( time < 0 ){
+ this.disatcher[ 'dispatch' ]( X_EVENT_MEDIA_PLAYING );
//console.log( '> onEnd crt:' + ( X_WebAudio_context.currentTime * 1000 ) + ' startTime:' + this._startTime +
// ' from:' + this._startPos + ' to:' + this._endPosition );
- this._timerID = X_Timer_once( -time, this, this._onEnded );
+ // this._timerID = X_Timer_once( -time, this, this._onEnded );
return;
};
};
this.looped = true;
this.disatcher[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );
this.actualPlay();
+ } else {
+ delete this._interval;
+ return X_CALLBACK_UN_LISTEN;
};
} else {
this.actualPause();
actualPause : function(){
console.log( '[WebAudio] pause' );
- this._timerID && X_Timer_remove( this._timerID );
- delete this._timerID;
+ //this._timerID && X_Timer_remove( this._timerID );
+ //delete this._timerID;
+ this._interval && X_Timer_remove( this._interval );
+ delete this._interval;
delete this.playing;
if( this.bufferSource ){