OSDN Git Service

Bugfix of Realtime Synthesizer Engine
authorKeishi Suenaga <s_keishi@mutt.freemail.ne.jp>
Mon, 30 Jun 2003 01:16:38 +0000 (01:16 +0000)
committerKeishi Suenaga <s_keishi@mutt.freemail.ne.jp>
Mon, 30 Jun 2003 01:16:38 +0000 (01:16 +0000)
ChangeLog
interface/rtsyn.h
interface/rtsyn_common.c
interface/rtsyn_portmidi.c
interface/rtsyn_winmm.c

index b7d5898..28bc7ac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2003-06-30  skeishi(s_keishi@mutt.freemail.ne.jp>
+        * interface/rtsyn.h,interface/rtsyn_common,
+          /interface/rtsyn_wimm interface/rtsyn_portmidi: Changed 
+
+        BugFix  Realteime Synthesizer Engine.
+
+
 2003-06-29  skeishi(s_keishi@mutt.freemail.ne.jp>
        * interface/portmidisyn_c,interface/rtsyn.h,interface/rtsyn_common,
          interface/interface/rtsyn_wimm interface/rtsyn_portmidi: Added.
index f89827d..850be96 100644 (file)
@@ -77,7 +77,7 @@ extern int32 current_sample;
 extern FLOAT_T midi_time_ratio;
 
 /* How often play data. */
-#define TICKTIME_HZ 50
+#define TICKTIME_HZ 33.33
 
 
 extern double rtsyn_reachtime;
index 93e6de1..8f14038 100644 (file)
@@ -78,6 +78,7 @@ static int32 event_time_offset;
 static double starttime;
 double rtsyn_reachtime;
 static int time_advance;
+static int set_time_first=2;
 
 //acitive sensing
 static int active_sensing_flag=0;
@@ -258,15 +259,34 @@ void rtsyn_stop_playing(void)
 }
 extern int32 current_sample;
 extern FLOAT_T midi_time_ratio;
+extern int volatile stream_max_compute;
 
 static void seq_set_time(MidiEvent *ev)
 {
        double past_time,btime;
-       past_time = get_current_calender_time() - starttime;
-       ev->time = (int32)((past_time) * play_mode->rate);
+       static int shift=0;
+
+       if(set_time_first==2){
+               starttime=get_current_calender_time()-(double)current_sample/(double)play_mode->rate;
+       }
+       past_time = (int32)((get_current_calender_time() - starttime)*play_mode->rate); 
+//     printf("%f,%f\n",(double)past_time,(  (double)current_sample-(double)past_time )  );
+       if (set_time_first==1){
+               shift=(double)past_time-(double)current_sample;
+///            printf("%d\n",shift);
+       }
+       if (set_time_first>0) set_time_first--;
+       event_time_offset=play_mode->rate/TICKTIME_HZ;
+       ev->time = past_time;
+       if(set_time_first==0 && (past_time-current_sample>stream_max_compute*play_mode->rate/1000)){ 
+               starttime=get_current_calender_time()-(double)(current_sample+shift)/(double)play_mode->rate;
+               ev->time=current_sample+shift;
+       }
        ev->time += (int32)event_time_offset;
-       rtsyn_reachtime=get_current_calender_time()+(double)time_advance/play_mode->rate;
 
+       
+       rtsyn_reachtime=get_current_calender_time()+  (double)(1.0f/TICKTIME_HZ);
+       
 #if 0
        btime = (double)((ev->time-current_sample/midi_time_ratio)/play_mode->rate);
        btime *= 1.01; /* to be sure */
index eaab6aa..34bff3a 100644 (file)
@@ -187,7 +187,7 @@ int rtsyn_play_some_data (void){
        long pmlength,pmbpoint;
        
        played=0;
-       {
+       do{
                sleep(0);
                for(port=0;port<rtsyn_portnumber;port++){
                        pmerr=Pm_Read(midistream[port].stream, pmbuffer, PMBUFF_SIZE);
index 67eee1c..63e9074 100644 (file)
@@ -210,7 +210,7 @@ int rtsyn_play_some_data(void){
        int ne,i,j,chk,played;
        
        played=0;
-       {
+       do{
                sleep(0);
                if( !(evbuf[evbrpoint].status==B_OK)&&(evbrpoint!=evbwpoint) ) played=~0;
                while( (evbuf[evbrpoint].status==B_OK)&&(evbrpoint!=evbwpoint) ){