Changeset 1851:176edc9e3957 in roaraudio


Ignore:
Timestamp:
05/23/09 10:00:06 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

let clock tick

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/midi.c

    r1850 r1851  
    101101// bridges: 
    102102int midi_check_bridge  (int id) { 
     103 
     104 ROAR_WARN("midi_check_bridge(id=%i) = ?", id); 
     105 
     106 if ( id == g_midi_clock.stream ) { 
     107  midi_clock_tick(); 
     108 
     109  return 0; 
     110 } 
     111 
    103112 return -1; 
    104113} 
     
    140149 streams_set_flag(g_midi_clock.stream, ROAR_FLAG_PRIMARY); 
    141150 streams_set_flag(g_midi_clock.stream, ROAR_FLAG_SYNC); 
     151 
     152 midi_clock_set_bph(3600); // one tick per sec 
     153 
     154 return 0; 
     155} 
     156 
     157int midi_clock_set_bph (uint_least32_t bph) { 
     158 uint_least32_t sph = g_sa->rate/2 * 75 * g_sa->channels; // samples per houre 
     159 
     160 g_midi_clock.bph  = bph; 
     161 
     162 g_midi_clock.spt  = sph/bph; 
     163 
     164 g_midi_clock.nt   = ROAR_MATH_OVERFLOW_ADD(g_pos, g_midi_clock.spt); 
     165 
     166 return 0; 
     167} 
     168 
     169int midi_clock_tick (void) { 
     170 unsigned int diff; 
     171 
     172 while ( g_pos >= g_midi_clock.nt ) { 
     173  diff = g_pos - g_midi_clock.nt; 
     174  ROAR_WARN("midi_clock_tick(void): g_pos is %u samples (%5.2f%%) ahead of nt.", diff, (float)diff/g_midi_clock.spt); 
     175 
     176  g_midi_clock.nt   = ROAR_MATH_OVERFLOW_ADD(g_midi_clock.nt, g_midi_clock.spt); 
     177 
     178  if ( streams_get_flag(g_midi_clock.stream, ROAR_FLAG_SYNC) ) { 
     179   ROAR_WARN("midi_clock_tick(void): TICK! (nt=%lu)", g_midi_clock.nt); 
     180  } else { 
     181   ROAR_WARN("midi_clock_tick(void): silent tick. (nt=%lu)", g_midi_clock.nt); 
     182  } 
     183 } 
    142184 
    143185 return 0; 
Note: See TracChangeset for help on using the changeset viewer.