X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F07_audio%2F00_XAudio.js;h=4664aa0b2cc0f9e6f1e700c0b1f217f7376f7950;hb=4e4ab3be10850546063d4a4b93250ed142bb8cd2;hp=49d1ee13fe313f332283d521b93156e50d9bca3b;hpb=3c07e12e13272820cedf983e0d9fe46e5f0a4bd9;p=pettanr%2FclientJs.git
diff --git a/0.6.x/js/07_audio/00_XAudio.js b/0.6.x/js/07_audio/00_XAudio.js
index 49d1ee1..4664aa0 100644
--- a/0.6.x/js/07_audio/00_XAudio.js
+++ b/0.6.x/js/07_audio/00_XAudio.js
@@ -25,29 +25,36 @@ X_TEMP.onSystemReady.push(
});
/**
- *
è¤æ°ã®ããã¯ã¨ã³ããããä¸ããããé³å£°ãåçå¯è½ãªãã®ãè¦ã¤ããé³å£°ãåçãã¾ãã
+ *
è¤æ°ã®ãªã¼ãã£ãªã»ããã¯ã¨ã³ããããä¸ããããé³å£°ãåçå¯è½ãªãã®ãè¦ã¤ããé³å£°ãåçãã¾ãã
*
HTMLAudio ã®åä½ã»æ©è½ããã©ã¦ã¶æ¯ã«ãã©ãã©ãªã®ã«æ¥ãç
®ãããã¡ã½ãããã¤ãã³ãã¯ç¬èªã«å®ç¾©ãã¦ãã¾ãã
*
ããã¯ã¨ã³ãã®ç¨®é¡
- * HTMLAudio, WebAudio, Silverlight
+ *
HTMLAudio, WebAudio, Silverlight, WMP
*
ã¤ãã³ã
*
- * - X.Event.BACKEND_READY
- é³å£°(src ãªã¹ã)ãåçå¯è½ãªããã¯ã¨ã³ããè¦ã¤ãã£ãã
- *
- X.Event.BACKEND_NONE
- é³å£°ãåçå¯è½ãªããã¯ã¨ã³ããè¦ã¤ãããªãã£ãã
- *
- X.Event.READY
- åçå¯è½ãå®éã®ç¶æ
㯠canplay ãã loadeddata ã¾ã§æ§ã
ããã
- *
- X.Event.ERROR
+ * - X.Event.BACKEND_READY
- é³å£°(src ãªã¹ã)ãåçå¯è½ãªããã¯ã¨ã³ããè¦ã¤ãã£ãã
+ *
- X.Event.BACKEND_NONE
- é³å£°ãåçå¯è½ãªããã¯ã¨ã³ããè¦ã¤ãããªãã£ããAudio 㯠kill ããã¾ãã
+ *
- X.Event.MEDIA_CAN_TOUCH
- ã¢ãã¤ã«ç«¯æ«ã®å¶ç´ã§é³å£°ã®åçã¾ãã¯ãã¼ãã«ãã¿ãããå¿
è¦ã¨ããå ´åãã¿ããã¤ãã³ãå
㧠play ãå¼ã³åºãæºåãåºæ¥ããã¨ãéç¥ããã
+ *
- X.Event.READY
- åçå¯è½ãå®éã®ç¶æ
㯠canplay ãã loadeddata ã¾ã§æ§ã
ãããã¢ãã¤ã«ç«¯æ«ã®å ´åãã¿ãããã¦åçãéå§ãããå ´åã«
+ *
- X.Event.ERROR
* - 1 : ã¦ã¼ã¶ã¼ã«ãã£ã¦ã¡ãã£ã¢ã®åå¾ãä¸æããã
*
- 2 : ãããã¯ã¼ã¯ã¨ã©ã¼
*
- 3 : ã¡ãã£ã¢ã®ãã³ã¼ãã¨ã©ã¼
*
- 4 : ã¡ãã£ã¢ããµãã¼ãããã¦ããªã
*
- * - X.Event.MEDIA_PLAYING
- åçä¸ã«1ç§ä»¥ä¸ã®ã¿ã¤ãã³ã°ã§çºçï¼currentTime ãåãã?
- *
- X.Event.MEDIA_LOOP
- ã«ã¼ãç´åã«çºçãキャï¾ï½¾ï¾å¯è½
- *
- X.Event.MEDIA_LOOPED
- ã«ã¼ãæã«çºç
- *
- X.Event.MEDIA_ENDED
- åçä½ç½®ã®(é³å£°ã®)æå¾ã«ã¤ãã
- *
- X.Event.MEDIA_PAUSED
- ãã¼ãºãã
- *
- X.Event.MEDIA_WAITING
- åçä¸ã«é³å£°ãå¾
æ©ç¶æ
ã«ã
- *
- X.Event.MEDIA_SEEKING
- ã·ã¼ã¯ä¸ã«é³å£°ãå¾
æ©ç¶æ
ã«ã
+ *
- X.Event.MEDIA_PLAYING
- åçä¸ã«1ç§ä»¥ä¸ã®ã¿ã¤ãã³ã°ã§çºçï¼currentTime ãåãã?
+ *
- X.Event.MEDIA_LOOP
- ã«ã¼ãç´åã«çºçãキャï¾ï½¾ï¾å¯è½
+ *
- X.Event.MEDIA_LOOPED
- ã«ã¼ãæã«çºç
+ *
- X.Event.MEDIA_ENDED
- åçä½ç½®ã®(é³å£°ã®)æå¾ã«ã¤ãã
+ *
- X.Event.MEDIA_PAUSED
- ãã¼ãºãã
+ *
- X.Event.MEDIA_WAITING
- åçä¸ã«é³å£°ãå¾
æ©ç¶æ
ã«ã
+ *
- X.Event.MEDIA_SEEKING
- ã·ã¼ã¯ä¸ã«é³å£°ãå¾
æ©ç¶æ
ã«ã
*
+ * ã½ã¼ã¹ãªã¹ãã«ä¸ãã url æåå
+ * ããã·ã¥ãã©ã°ã¡ã³ã以ä¸ã«ãã¼ã¿ãæ¸ããã¨ã§ãåãªã¼ãã£ãªããã¯ã¨ã³ããåçå¯è½æ§ã®å¤æã«ããã£ã¦åèã«ãããã¼ã¿ã渡ããã¨ãã§ãã¾ãã
+ *
+ * - CBR=1
- audio ãåºå®ãããã¬ã¼ãã§ãããã¨ã示ããAndroid ç¨ Opera12- ã¯å¯å¤ãããã¬ã¼ãã® mp3 ãæ£ããã·ã¼ã¯ã§ããªãã
+ * [ 'snd.mp3', 'snd.mp3#CBR=1' ] ã¨æå®ããã¨ãAndroid ç¨ Opera12- ã§ã¯ CBR 㪠mp3 ããä»ã®ç°å¢ã§ã¯ãããã¡ã¤ã«ãµã¤ãºã®å°ãã VBR 㪠mp3 ã使ç¨ãããã(æªå®è£
)
+ *
- ext=mp3
- ãã¹ã«æ¡å¼µåãå«ã¾ããªãå ´åãã¾ãã¯ä¸æ¸ãæå®ãããå ´åã«æå®ãã
*
* @alias X.Audio
* @class å種ãªã¼ãã£ãªæ©è½ãã©ãããã¤ã³ã¿ã¼ãã§ã¤ã¹ãå
±éåããã
@@ -56,12 +63,11 @@ X_TEMP.onSystemReady.push(
* @param {array|string} sourceList
* @param {object=} opt_option
* @example //
- * var audio = X.Audio( [ 'etc/special.mp3', 'etc/special.ogg', 'etc/special.wav' ] )
- .listenOnce( X.Event.READY, onReady );
+ * var audio = X.Audio( [ 'etc/special.mp3', 'etc/special.ogg', 'etc/special.wav' ] ).listenOnce( X.Event.READY, onReady );
*/
X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
'X.Audio',
- X_Class.POOL_OBJECT,
+ X_Class.NONE,
{
/**
* é³å£°ã® urlãX.Event.BACKEND_READY ã§è¨å®ãããã
@@ -69,13 +75,14 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
* @type {string}
*/
'source' : '',
+
/**
* é³å£°åçããã¯ã¨ã³ãã®ååãX.Event.BACKEND_READY ã§è¨å®ãããã
* @alias Audio.prototype.backendName
* @type {string}
*/
'backendName' : '',
-
+
'Constructor' : function( sourceList, opt_option ){
X_Audio_startDetectionBackend(
X_Audio_BACKENDS[ 0 ], this,
@@ -88,6 +95,12 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
/**
* åçãéå§ä½ç½®ã»çµäºä½ç½®ãã«ã¼ãã®æç¡ãã«ã¼ã以éã®éå§ä½ç½®ãã«ã¼ã以éã®çµäºä½ç½®
* @alias Audio.prototype.play
+ * @param {number=} startTime éå§æéã ms ã§
+ * @param {number=} endTime çµäºæéã ms ã§
+ * @param {boolean=} loop endTimeã«éããéã«æ²ãã«ã¼ããããã
+ * @param {number=} loopStartTime ã«ã¼ã以å¾ã®éå§æéã ms ã§
+ * @param {number=} loopEndTime ã«ã¼ã以å¾ã®çµäºæéã ms ã§
+ * @return {Audio} ã¡ã½ãããã§ã¼ã³
*/
'play' : function( startTime, endTime, loop, loopStartTime, loopEndTime ){
var pair = X_Pair_get( this );
@@ -95,8 +108,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
return this;
},
/**
- * ã·ã¼ã¯
+ * ã·ã¼ã¯ãåçä¸ã§ç¡ãå ´åã¯æ¬¡ååçéå§ä½ç½®ã®æå®ã®ã¿
* @alias Audio.prototype.seek
+ * @param {number} seekTime ã·ã¼ã¯ä½ç½®ã ms ã§
+ * @return {Audio} ã¡ã½ãããã§ã¼ã³
*/
'seek' : function( seekTime ){
var pair = X_Pair_get( this );
@@ -106,6 +121,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
/**
* ãã¼ãº
* @alias Audio.prototype.pause
+ * @return {Audio} ã¡ã½ãããã§ã¼ã³
*/
'pause' : function(){
var pair = X_Pair_get( this );
@@ -115,6 +131,21 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
/**
* ç¶æ
㮠getter 㨠setter
* @alias Audio.prototype.state
+ * @param {object=} obj setter ã®å ´åãä¸æ¸ãããå¤ãæ ¼ç´ããobject
+ * @return {Audio|object}
+ * @example
+audio.setState(
+ {
+ 'startTime' : 0,
+ 'endTime' : 80000,
+ 'loopStartTime' : 120000,
+ 'loopEndTime' : 200000,
+ 'currentTime' : 0,
+ 'loop' : true,
+ 'looded' : false,
+ 'volume' : 1,
+ 'autoplay' : true
+});
*/
'state' : function( obj ){
var pair = X_Pair_get( this );
@@ -128,18 +159,22 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
'currentTime' : -1,
'loop' : false,
'looded' : false,
- 'error' : false,
+ 'error' : 0,
+ 'autoplay' : false,
'playing' : false,
- 'source' : this[ 'source' ] || '',
- 'duration' : 0
+ 'source' : this[ 'source' ],
+ 'duration' : 0,
+ 'volume' : 0.5
};
};
pair && pair.setState( obj );
return this;
},
/**
- * ã«ã¼ãã® getter 㨠setter
+ * ã«ã¼ãã® setter
* @alias Audio.prototype.loop
+ * @param {boolean} v
+ * @return {Audio}
*/
'loop' : function( v ){
var pair = X_Pair_get( this );
@@ -147,8 +182,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
return this;
},
/**
- * ããªã¥ã¼ã ã® getter 㨠setter å®è£
ä¸ååï¼
+ * ããªã¥ã¼ã ã® setter å®è£
ä¸ååï¼
* @alias Audio.prototype.volume
+ * @param {number} v 0ï½1
+ * @return {Audio}
*/
'volume' : function( v ){
var pair = X_Pair_get( this );
@@ -156,8 +193,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
return this;
},
/**
- * åçä½ç½®ã
+ * åçä½ç½®ã®setterã
* @alias Audio.prototype.currentTime
+ * @param {number} v msã§
+ * @return {Audio}
*/
'currentTime' : function( v ){
var pair = X_Pair_get( this );
@@ -167,6 +206,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
/**
* åçä¸ãï¼
* @alias Audio.prototype.isPlaying
+ * @return {boolean}
*/
'isPlaying' : function(){
var pair = X_Pair_get( this );
@@ -177,7 +217,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
);
function X_Audio_handleEvent( e ){
- var backend, pair;
+ var backend, src, pair;
switch( e.type ){
case X_EVENT_BACKEND_READY :
@@ -218,8 +258,9 @@ function X_Audio_handleEvent( e ){
*/
function X_Audio_startDetectionBackend( backend, xaudio, sourceList, option ){
- var source = sourceList[ 0 ] || '',
- ext = X_URL_getEXT( source ),
+ var source = sourceList[ 0 ] || '',
+ hash = X_URL_paramToObj( X_URL_getHash( source ) ),
+ ext = hash[ 'ext' ] || X_URL_getEXT( source ),
sup;
if( source && backend ){
@@ -227,29 +268,36 @@ function X_Audio_startDetectionBackend( backend, xaudio, sourceList, option ){
sup[ 5 ] = sup;
xaudio[ 'listenOnce' ]( X_EVENT_COMPLETE, backend, X_Audio_onEndedDetection, sup );
- backend.detect( xaudio, source, ext );
+ backend.detect( xaudio, ext, hash );
} else {
xaudio[ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );
};
};
function X_Audio_onEndedDetection( e, xaudio, sourceList, option, source, ext, sup ){
- var i = X_Audio_BACKENDS.indexOf( this ), backend;
+ var i = X_Audio_BACKENDS.indexOf( this ), _e, hash, backend;
if( e.canPlay ){
- xaudio[ 'asyncDispatch' ]( {
+ _e = {
type : X_EVENT_BACKEND_READY,
'option' : option,
'source' : source,
- 'backendName' : this[ 'backendName' ],
+ 'backendName' : this.backendName,
'backendID' : i
- } );
+ };
+ // WebAudio
+ if( this.backendID === 1 ) _e[ 'needTouchForPlay' ] = X_WebAudio_need1stTouch;
+ // HTMLAudio
+ if( this.backendID === 2 ) _e[ 'needTouchForLoad' ] = X_HTMLAudio_need1stTouch;
+
+ xaudio[ 'asyncDispatch' ]( _e );
} else {
- console.log( 'No ' + source + ' ' + this[ 'backendName' ] );
+ console.log( 'No ' + source + ' ' + this.backendName );
if( sup[ 3 ] = source = sourceList[ sourceList.indexOf( source ) + 1 ] ){
- sup[ 4 ] = ext = X_URL_getEXT( source );
+ hash = X_URL_paramToObj( X_URL_getHash( source ) );
+ sup[ 4 ] = ext = hash[ 'ext' ] || X_URL_getEXT( source );
xaudio[ 'listenOnce' ]( X_EVENT_COMPLETE, this, X_Audio_onEndedDetection, sup );
- this.detect( xaudio, source, ext );
+ this.detect( xaudio, ext, hash );
} else
if( backend = X_Audio_BACKENDS[ i + 1 ] ){
X_Audio_startDetectionBackend( backend, xaudio, sourceList, option );
@@ -345,6 +393,7 @@ var X_AudioBase = X_EventDispatcher[ 'inherits' ](
'volume' : this.gain,
'playing' : this.playing,
'duration' : this.duration,
+ 'autoplay' : this.autoplay,
'currentTime' : this.playing ? this.getActualCurrentTime() : this.seekTime,
'error' : this.getActualError ? this.getActualError() : this.error