mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
sync midi by frames rather than useconds
This commit is contained in:
parent
63b5eb3740
commit
b1e4ec3a88
4 changed files with 29 additions and 17 deletions
|
|
@ -44,12 +44,12 @@ impl Phrase {
|
|||
output: &mut MIDIChunk,
|
||||
notes_on: &mut Vec<bool>,
|
||||
timebase: &Arc<Timebase>,
|
||||
(usec0, usecs, _): (usize, usize, f64),
|
||||
(frame0, frames, _): (usize, usize, f64),
|
||||
) {
|
||||
let start = timebase.usecs_frames(usec0 as f64);
|
||||
let end = timebase.usecs_frames((usec0 + usecs) as f64);
|
||||
let start = frame0;
|
||||
let end = frame0 + frames;
|
||||
let repeat = timebase.pulses_frames(self.length as f64);
|
||||
let ticks = timebase.frames_to_ticks(start, end, repeat);
|
||||
let ticks = timebase.frames_to_ticks(start as f64, end as f64, repeat);
|
||||
//panic!("{start} {end} {repeat} {ticks:?}");
|
||||
for (time, tick) in ticks.iter() {
|
||||
if let Some(events) = self.notes.get(&(*tick as usize)) {
|
||||
|
|
@ -84,11 +84,13 @@ impl Timebase {
|
|||
//panic!("{start_frame} {end_frame} {fpt}");
|
||||
let mut ticks = vec![];
|
||||
let mut add_frame = |frame: f64|{
|
||||
let jitter = frame.rem_euclid(fpt);
|
||||
let last_jitter = (frame - 1.0).max(0.0) % fpt;
|
||||
let next_jitter = frame + 1.0 % fpt;
|
||||
if jitter <= last_jitter && jitter <= next_jitter {
|
||||
ticks.push((frame as usize % (end as usize-start as usize), (frame / fpt) as usize));
|
||||
let jitter = frame.rem_euclid(fpt); // ramps
|
||||
let next_jitter = (frame + 1.0).rem_euclid(fpt);
|
||||
if jitter > next_jitter { // at head of ramp crossing
|
||||
ticks.push((
|
||||
frame as usize % (end as usize-start as usize),
|
||||
(frame / fpt) as usize)
|
||||
);
|
||||
};
|
||||
};
|
||||
if start_frame < end_frame {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue