@@ -49,8 +49,8 @@ impl MidiChannel {
4949 fn ensure_sorted ( & mut self ) -> bool {
5050 if self . need_sort {
5151 dmsort:: sort_by ( & mut self . messages , |a, b| {
52- let units_a = a. units_position ( ) . 0 ;
53- let units_b = b. units_position ( ) . 0 ;
52+ let units_a = a. effect_units ( ) . 0 ;
53+ let units_b = b. effect_units ( ) . 0 ;
5454 if units_a == units_b {
5555 Ordering :: Equal
5656 } else if units_a < units_b {
@@ -68,7 +68,7 @@ impl MidiChannel {
6868 pub fn calc_next_index ( & mut self , position : & BarPosition ) {
6969 let pos_units = Units :: from ( * position) ;
7070 for ( index, value) in self . messages . iter ( ) . enumerate ( ) {
71- if Units :: from ( value. bar_position ( ) ) >= pos_units {
71+ if Units :: from ( value. effect_position ( ) ) >= pos_units {
7272 self . next_index = index;
7373 return ;
7474 }
@@ -134,15 +134,15 @@ impl MidiChannel {
134134 if play_control. is_bar_in_range ( next. bar_ordinal ( ) )
135135 && play_control
136136 . position
137- . is_passed ( next. pass_mode , & next. bar_position ( ) )
137+ . is_passed ( next. pass_mode , & next. effect_position ( ) )
138138 {
139139 self . next_index += 1 ;
140140 count += 1 ;
141141 if !bypass {
142142 hub. send ( settings, speed, next, velocity) ;
143143 }
144144 } else {
145- if next. bar_position ( ) . bar_ordinal < play_control. begin_bar_ordinal {
145+ if next. effect_position ( ) . bar_ordinal < play_control. begin_bar_ordinal {
146146 self . next_index += 1 ;
147147 } else {
148148 break ;
@@ -163,7 +163,7 @@ impl MidiChannel {
163163 hub. send (
164164 settings,
165165 speed,
166- & MidiMessage :: new ( first_msg. pass_mode , first_msg. bar_position ( ) , None , msg) ,
166+ & MidiMessage :: new ( first_msg. pass_mode , first_msg. pos , first_msg . duration , false , msg) ,
167167 self . velocity . into ( ) ,
168168 ) ;
169169 let msg = StructuredShortMessage :: ControlChange {
@@ -174,7 +174,7 @@ impl MidiChannel {
174174 hub. send (
175175 settings,
176176 speed,
177- & MidiMessage :: new ( first_msg. pass_mode , first_msg. bar_position ( ) , None , msg) ,
177+ & MidiMessage :: new ( first_msg. pass_mode , first_msg. pos , first_msg . duration , false , msg) ,
178178 self . velocity . into ( ) ,
179179 ) ;
180180 }
@@ -267,18 +267,18 @@ impl MidiState {
267267 let scale_root = tab. meta . scale . calc_root_syllable ( ) ;
268268 let signature = tab. signature ( ) ;
269269 let bar_units = tab. bar_units ( ) ;
270- let beat_delay = Some ( Units :: from ( signature. beat_unit ) - Units :: MIN_ACCURACY ) ;
270+ let beat_duration = Units :: from ( signature. beat_unit ) ;
271271 for bar in tab. bars . iter ( ) {
272272 for beat in 0 ..signature. bar_beats {
273273 let in_bar_pos = Units ( beat as f32 * Units :: from ( signature. beat_unit ) . 0 ) ;
274274 let root = bar. get_chord ( Some ( in_bar_pos) ) . map ( |x| x. root ) . unwrap_or ( scale_root) ;
275275 let note = tab. meta . scale . calc_click_note ( & tab. meta . key , & settings. click_octave , & root) ;
276276 let pos = BarPosition :: new ( bar_units, bar. props . bar_ordinal , in_bar_pos) ;
277277 if let Some ( midi_msg) = MidiUtil :: note_midi_on_msg ( & note, channel. channel , channel. velocity ) {
278- channel. add_message ( MidiMessage :: new ( EntryPassMode :: Immediate , pos, None , midi_msg) ) ;
278+ channel. add_message ( MidiMessage :: new ( EntryPassMode :: Immediate , pos, beat_duration , false , midi_msg) ) ;
279279 }
280280 if let Some ( midi_msg) = MidiUtil :: note_midi_off_msg ( & note, channel. channel , channel. velocity ) {
281- channel. add_message ( MidiMessage :: new ( EntryPassMode :: Immediate , pos, beat_delay , midi_msg) ) ;
281+ channel. add_message ( MidiMessage :: new ( EntryPassMode :: Immediate , pos, beat_duration , true , midi_msg) ) ;
282282 }
283283 }
284284 }
@@ -378,7 +378,7 @@ impl MidiState {
378378 }
379379 pub fn init_channels ( & mut self , settings : & MidiSettings , hub : & mut MidiHub ) {
380380 for channel in self . channels . iter_mut ( ) {
381- if channel. track . is_some ( ) {
381+ if channel. messages . len ( ) > 0 {
382382 channel. init_channel ( settings, hub, & self . play_control . play_speed ) ;
383383 channel. calc_next_index ( & self . play_control . position . bar ) ;
384384 }
0 commit comments