mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
document time units
This commit is contained in:
parent
924b68fccf
commit
ef80c48939
2 changed files with 26 additions and 11 deletions
|
|
@ -34,9 +34,8 @@ macro_rules! impl_op {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// Define and implement a unit of time
|
/// Define and implement a unit of time
|
||||||
macro_rules! time_unit {
|
macro_rules! impl_time_unit {
|
||||||
($T:ident) => {
|
($T:ident) => {
|
||||||
#[derive(Debug, Default)] pub struct $T(AtomicF64);
|
|
||||||
impl TimeUnit for $T {
|
impl TimeUnit for $T {
|
||||||
fn get (&self) -> f64 { self.0.load(Ordering::Relaxed) }
|
fn get (&self) -> f64 { self.0.load(Ordering::Relaxed) }
|
||||||
fn set (&self, value: f64) { self.0.store(value, Ordering::Relaxed) }
|
fn set (&self, value: f64) { self.0.store(value, Ordering::Relaxed) }
|
||||||
|
|
@ -56,7 +55,9 @@ macro_rules! time_unit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
time_unit!(SampleRate);
|
/// Audio sample rate in Hz (samples per second)
|
||||||
|
#[derive(Debug, Default)] pub struct SampleRate(AtomicF64);
|
||||||
|
impl_time_unit!(SampleRate);
|
||||||
impl SampleRate {
|
impl SampleRate {
|
||||||
/// Return the duration of a sample in microseconds (floating)
|
/// Return the duration of a sample in microseconds (floating)
|
||||||
#[inline] pub fn usec_per_sample (&self) -> f64 {
|
#[inline] pub fn usec_per_sample (&self) -> f64 {
|
||||||
|
|
@ -76,11 +77,17 @@ impl SampleRate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
time_unit!(BeatsPerMinute);
|
/// Tempo in beats per minute
|
||||||
|
#[derive(Debug, Default)] pub struct BeatsPerMinute(AtomicF64);
|
||||||
|
impl_time_unit!(BeatsPerMinute);
|
||||||
|
|
||||||
time_unit!(PulsesPerQuaver);
|
/// MIDI resolution in PPQ (pulses per quarter note)
|
||||||
|
#[derive(Debug, Default)] pub struct PulsesPerQuaver(AtomicF64);
|
||||||
|
impl_time_unit!(PulsesPerQuaver);
|
||||||
|
|
||||||
time_unit!(Microsecond);
|
/// Timestamp in microseconds
|
||||||
|
#[derive(Debug, Default)] pub struct Microsecond(AtomicF64);
|
||||||
|
impl_time_unit!(Microsecond);
|
||||||
impl Microsecond {
|
impl Microsecond {
|
||||||
#[inline] pub fn format_msu (&self) -> String {
|
#[inline] pub fn format_msu (&self) -> String {
|
||||||
let usecs = self.get() as usize;
|
let usecs = self.get() as usize;
|
||||||
|
|
@ -90,13 +97,21 @@ impl Microsecond {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
time_unit!(SampleCount);
|
/// Timestamp in audio samples
|
||||||
|
#[derive(Debug, Default)] pub struct SampleCount(AtomicF64);
|
||||||
|
impl_time_unit!(SampleCount);
|
||||||
|
|
||||||
time_unit!(Pulse);
|
/// Timestamp in MIDI pulses
|
||||||
|
#[derive(Debug, Default)] pub struct Pulse(AtomicF64);
|
||||||
|
impl_time_unit!(Pulse);
|
||||||
|
|
||||||
time_unit!(LaunchSync);
|
/// Quantization setting for launching clips
|
||||||
|
#[derive(Debug, Default)] pub struct LaunchSync(AtomicF64);
|
||||||
|
impl_time_unit!(LaunchSync);
|
||||||
|
|
||||||
time_unit!(Quantize);
|
/// Quantization setting for notes
|
||||||
|
#[derive(Debug, Default)] pub struct Quantize(AtomicF64);
|
||||||
|
impl_time_unit!(Quantize);
|
||||||
|
|
||||||
/// Temporal resolutions: sample rate, tempo, MIDI pulses per quaver (beat)
|
/// Temporal resolutions: sample rate, tempo, MIDI pulses per quaver (beat)
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ impl Phrase {
|
||||||
clone.uuid = uuid::Uuid::new_v4();
|
clone.uuid = uuid::Uuid::new_v4();
|
||||||
clone
|
clone
|
||||||
}
|
}
|
||||||
pub fn toggle_loop (&mut self) { self.loop_on = !self.loop_on; }
|
pub fn toggle_loop (&mut self) { self.loop_on = !self.loop_on; }
|
||||||
pub fn record_event (&mut self, pulse: usize, message: MidiMessage) {
|
pub fn record_event (&mut self, pulse: usize, message: MidiMessage) {
|
||||||
if pulse >= self.length { panic!("extend phrase first") }
|
if pulse >= self.length { panic!("extend phrase first") }
|
||||||
self.notes[pulse].push(message);
|
self.notes[pulse].push(message);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue