Changeset 31399 for lang/actionscript
- Timestamp:
- 03/20/09 16:27:08 (3 years ago)
- Location:
- lang/actionscript/flmml/trunk/src
- Files:
-
- 6 modified
-
com/txt_nifty/sketch/flmml/FlMML.as (modified) (1 diff)
-
com/txt_nifty/sketch/flmml/MML.as (modified) (3 diffs)
-
com/txt_nifty/sketch/flmml/MSequencer.as (modified) (12 diffs)
-
com/txt_nifty/sketch/flmml/MTrack.as (modified) (9 diffs)
-
flmml.mxml (modified) (6 diffs)
-
flmml.swf (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/FlMML.as
r27173 r31399 46 46 return m_mml.getWarnings(); 47 47 } 48 49 public function getTotalMSec():uint { 50 return m_mml.getTotalMSec(); 51 } 52 public function getTotalTimeStr():String { 53 return m_mml.getTotalTimeStr(); 54 } 55 public function getNowMSec():uint { 56 return m_mml.getNowMSec(); 57 } 58 public function getNowTimeStr():String { 59 return m_mml.getNowTimeStr(); 60 } 48 61 } 49 62 } -
lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MML.as
r30438 r31399 489 489 for(i = 0; i < idArr.length; i++) { 490 490 var id:String = idArr[i]; 491 //trace("["+m_string.substr(m_letter, id.length)+"]"); 491 492 if (m_string.substr(m_letter, id.length) == idArr[i]) { 492 493 //trace("["+m_string.substr(m_letter, id.length)+"]"); 493 494 m_string = m_string.substring(0, m_letter-1) + valArr[i] + m_string.substring(m_letter + id.length); 494 m_letter += id.length;495 //m_letter += valArr[i].length; 495 496 break; 496 497 } … … 704 705 // post process 705 706 for(var i:int = MTrack.TEMPO_TRACK; i < m_tracks.length; i++) { 706 m_tracks[i].recRest(384);707 m_tracks[i].recClose();708 m_tracks[i].recRest(96);709 m_tracks[i].recEOT();707 if (i > MTrack.TEMPO_TRACK) { 708 m_tracks[i].recRestMSec(2000); 709 m_tracks[i].recClose(); 710 } 710 711 m_sequencer.connect(m_tracks[i]); 711 712 } 713 714 // initialize modules 712 715 m_sequencer.createPipes(m_maxPipe+1); 713 716 … … 746 749 return m_sequencer.isPaused(); 747 750 } 751 752 public function getTotalMSec():uint { 753 return m_tracks[MTrack.TEMPO_TRACK].getTotalMSec(); 754 } 755 public function getTotalTimeStr():String { 756 return m_tracks[MTrack.TEMPO_TRACK].getTotalTimeStr(); 757 } 758 public function getNowMSec():uint { 759 return m_sequencer.getNowMSec(); 760 } 761 public function getNowTimeStr():String { 762 return m_sequencer.getNowTimeStr(); 763 } 748 764 } 749 765 } -
lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MSequencer.as
r28311 r31399 35 35 protected var m_processTrack:int; 36 36 protected var m_processOffset:int; 37 protected var m_output:Boolean; 37 protected var m_output:Boolean; //! ���݃o�b�t�@�������ݒ����ǂ��� 38 38 protected var m_trackArr:Array; 39 39 protected var m_signalArr:Array; … … 42 42 protected var m_status:int; 43 43 protected var m_signalInterval:int; 44 protected var m_stopTimer:Timer; 45 protected var m_buffTimer:Timer; 46 protected var m_procTimer:Timer; 44 protected var m_stopTimer:Timer; //! �������L�b�N�p�̃^�C�}�[ 45 protected var m_buffTimer:Timer; //! �ꎞ�����o�b�t�@�����O�����L�b�N�p�̃^�C�}�[ 46 protected var m_procTimer:Timer; //! �o�b�t�@�������ݏ����L�b�N�p�̃^�C�}�[ 47 47 protected var m_multiple:int; 48 protected var m_startTime:uint; 49 protected var m_pausedPos:Number; 50 protected var m_restTimer:Timer; 48 51 protected var m_debugDate:Date; 49 52 … … 73 76 m_soundChannel = new SoundChannel(); 74 77 m_soundTransform = new SoundTransform(); 78 m_pausedPos = 0; 75 79 setMasterVolume(100); 76 80 m_signalInterval = 96; 77 81 stop(); 78 82 m_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData); 83 m_restTimer = null; 79 84 } 80 85 … … 86 91 m_trackArr[i].seekTop(); 87 92 } 88 } 89 m_status = STATUS_BUFFERING; 90 processStart(); 93 m_status = STATUS_BUFFERING; 94 processStart(); 95 } 96 else { 97 m_status = STATUS_PLAY; 98 m_soundChannel = m_sound.play(m_pausedPos); 99 m_startTime = getTimer(); 100 var totl:uint = getTotalMSec(); 101 var rest:uint = (totl > m_pausedPos) ? (totl - m_pausedPos) : 0; 102 m_restTimer = new Timer(rest, 1); 103 m_restTimer.addEventListener(TimerEvent.TIMER, onStopReq); 104 m_restTimer.start(); 105 } 91 106 m_debugDate = new Date(); 92 107 } … … 99 114 m_procTimer = new Timer(2, 1); 100 115 m_procTimer.addEventListener(TimerEvent.TIMER_COMPLETE, processAll); 116 if (m_restTimer) m_restTimer.stop(); 101 117 if (m_soundChannel) m_soundChannel.stop(); 102 118 m_status = STATUS_STOP; 119 m_pausedPos = 0; 103 120 } 104 121 105 122 public function pause():void { 123 if (m_restTimer) m_restTimer.stop(); 106 124 if (m_soundChannel) m_soundChannel.stop(); 125 m_pausedPos = getNowMSec(); 107 126 m_status = STATUS_PAUSE; 108 127 } … … 160 179 } 161 180 181 //! �o�b�t�@�������݃��N�G�X�g 162 182 private function processStart():void { 163 183 m_step = STEP_PRE; … … 165 185 m_procTimer.start(); 166 186 } 187 //! ��ۂ̃o�b�t�@�������� 188 // UI�̃t���[�Y����邽�߁A���X�e�b�v�ɕ����ď������ 167 189 private function processAll(e:Event):void { 168 190 var sLen:int = MSequencer.BUFFER_SIZE * m_multiple; … … 222 244 m_soundChannel = m_sound.play(); 223 245 //trace("play"); 246 m_startTime = getTimer(); 247 var totl:uint = getTotalMSec(); 248 var rest:uint = (totl > m_pausedPos) ? (totl - m_pausedPos) : 0; 249 m_restTimer = new Timer(rest, 1); 250 m_restTimer.addEventListener(TimerEvent.TIMER, onStopReq); 251 m_restTimer.start(); 224 252 } 225 253 break; … … 229 257 } 230 258 259 //! 231 260 private function onSampleData(e:SampleDataEvent):void { 261 var latency:Number = e.position / 44.1 - m_soundChannel.position; 262 //trace((e.position / 44.1) + "-" + (m_soundChannel.position) + "="+latency); 263 232 264 m_output = true; 233 265 if (m_playSize >= m_multiple) { 266 // �o�b�t�@�����ς݂̏ꍇ 234 267 if (m_step == STEP_COMPLETE) { 235 268 m_playSide = 1 - m_playSide; … … 237 270 processStart(); 238 271 } 272 // �o�b�t�@���������̏ꍇ 239 273 else { 240 274 m_output = false; … … 244 278 if (m_status == STATUS_LAST) { 245 279 m_output = false; 246 reqStop(); 247 return; 280 //reqStop(); stop��estTimer�ɔC���� return; 248 281 } 249 282 else if (m_status == STATUS_PLAY) { 250 var n:int = 0; 251 for (i = 0; i < m_trackArr.length; i++) { 252 if (m_trackArr[i].isEnd()) n++; 253 } 254 if (n >= m_trackArr.length) { 283 if (m_trackArr[MTrack.TEMPO_TRACK].isEnd()) { 255 284 m_status = STATUS_LAST; 256 285 } … … 272 301 MChannel.createPipes(num); 273 302 } 303 public function getTotalMSec():uint { 304 return m_trackArr[MTrack.TEMPO_TRACK].getTotalMSec(); 305 } 306 public function getNowMSec():uint { 307 var now:uint = 0; 308 var tot:uint = getTotalMSec(); 309 switch (m_status) { 310 case STATUS_PLAY: 311 case STATUS_LAST: 312 now = getTimer() - m_startTime + m_pausedPos; 313 return (now < tot) ? now : tot; 314 default: 315 return m_pausedPos; 316 } 317 return 0; 318 } 319 public function getNowTimeStr():String { 320 var sec:int = Math.ceil(Number(getNowMSec()) / 1000); 321 var smin:String = "0" + int(sec / 60); 322 var ssec:String = "0" + (sec % 60); 323 return smin.substr(smin.length-2, 2) + ":" + ssec.substr(ssec.length-2, 2); 324 } 274 325 } 275 326 } -
lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MTrack.as
r30715 r31399 5 5 public static const TEMPO_TRACK:int = 0; 6 6 public static const FIRST_TRACK:int = 1; 7 public static const DEFAULT_BPM:int = 120; 7 8 private var m_bpm:Number; // beat per minute 8 9 private var m_spt:Number; // samples per tick … … 19 20 private var m_signalCnt:int; 20 21 private var m_lfoWidth:Number; 22 private var m_totalMSec:uint; 21 23 public var m_signalInterval:int; 22 24 … … 25 27 m_ch = new MChannel(); 26 28 m_needle = 0.0; 27 playTempo( 120);29 playTempo(DEFAULT_BPM); 28 30 m_volume = 100; 29 31 recGate(15/16); … … 36 38 m_signalCnt = 0; 37 39 m_lfoWidth = 0.0; 40 m_totalMSec = 0; 38 41 } 39 42 … … 43 46 44 47 public function onSampleData(samples:Vector.<Number>, start:int, end:int, signal:MSignal = null):void { 48 if (isEnd()) return; 45 49 var startCnt:int = m_signalCnt; 46 50 if (signal != null) signal.reset(); … … 219 223 seek(len); 220 224 } 225 public function recRestMSec(msec:int):void { 226 var len:int = msec * 44010 / (m_spt * 1000); 227 seek(len); 228 } 221 229 222 230 public function recVolume(vol:int):void { … … 390 398 var nj:int = trackArr.length; 391 399 var globalTick:uint = 0; 400 var globalSample:uint = 0; 401 var spt:Number = calcSpt(DEFAULT_BPM); 392 402 var i:int, j:int; 393 403 var e:MEvent; … … 395 405 e = m_events[i]; 396 406 globalTick += e.getDelta(); 407 globalSample += e.getDelta() * spt; 397 408 switch(e.getStatus()) { 398 409 case MStatus.TEMPO: 399 410 for (j = FIRST_TRACK; j < nj; j++) { 400 411 trackArr[j].recTempo(globalTick, e.getTempo()); 412 spt = calcSpt(e.getTempo()); 401 413 } 402 414 break; … … 410 422 } 411 423 e = new MEvent(); 412 e.set EOT();424 e.setClose(); 413 425 recGlobal(maxGlobalTick, e); 414 } 415 426 globalSample += (maxGlobalTick - globalTick) * spt; 427 428 recRestMSec(3000); 429 recEOT(); 430 globalSample += 3 * 44100; 431 432 m_totalMSec = globalSample*1000/44100; 433 } 434 // calc number of samples per tick 435 private function calcSpt(bpm:Number):Number { 436 var tps:Number = bpm * 96.0 / 60.0; // ticks per second (quater note = 96ticks) 437 return 44100.0 / tps; // samples per tick 438 } 439 // set tempo 416 440 private function playTempo(bpm:Number):void { 417 441 m_bpm = bpm; 418 var tps:Number = m_bpm * 96.0 / 60.0; // ticks per second (quater note = 96ticks) 419 m_spt = 44100.0 / tps; // samples per tick 442 m_spt = calcSpt(bpm); 420 443 //trace("spt:"+m_spt) 444 } 445 public function getTotalMSec():uint { 446 return m_totalMSec; 447 } 448 public function getTotalTimeStr():String { 449 var sec:int = Math.ceil(Number(m_totalMSec) / 1000); 450 var smin:String = "0" + int(sec / 60); 451 var ssec:String = "0" + (sec % 60); 452 return smin.substr(smin.length-2, 2) + ":" + ssec.substr(ssec.length-2, 2); 421 453 } 422 454 } -
lang/actionscript/flmml/trunk/src/flmml.mxml
r27173 r31399 7 7 <![CDATA[ 8 8 import com.txt_nifty.sketch.flmml.MMLEvent; 9 protected var m_timer:Timer; 9 10 10 11 public function init():void { … … 15 16 player.addEventListener(MMLEvent.COMPLETE, onComplete); 16 17 player.addEventListener(MMLEvent.BUFFERING, onBuffering); 18 m_timer = new Timer(1000, 0); 19 m_timer.addEventListener(TimerEvent.TIMER, onSecond); 17 20 } 18 21 … … 51 54 public function play():void { 52 55 if (!player.isPlaying()) { 56 if (player.isPaused()) m_timer.start(); 53 57 player.play(input.text); 54 58 playButton.label = "Pause"; … … 57 61 player.pause(); 58 62 playButton.label = "Play"; 63 m_timer.stop(); 59 64 } 60 65 } … … 63 68 player.stop(); 64 69 playButton.label = "Play"; 70 m_timer.reset(); 65 71 progress.text = ""; 66 72 } … … 68 74 public function onComplete(e:Event):void { 69 75 playButton.label = "Play"; 76 m_timer.reset(); 77 progress.text = ""; 70 78 } 71 79 72 80 public function onBuffering(e:MMLEvent):void { 73 progress.text = (e.progress >= 100) ? "" : ("Buffering " + e.progress + "%"); 81 if (e.progress < 100) progress.text = "Buffering " + e.progress + "%"; 82 else { 83 onSecond(e); 84 m_timer.start(); 85 } 86 } 87 88 public function onSecond(e:Event):void { 89 progress.text = player.getNowTimeStr() + " / " + player.getTotalTimeStr(); 74 90 } 75 91 ]]>
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)