Time Units¶
Symusic supports three interchangeable ways to represent musical time: tick, quarter, and
second. Choosing the right unit keeps your workflow intuitive—ticks preserve original MIDI timing,
quarters align with musical structure, and seconds integrate with audio.
The three units¶
Tick (
int32)Raw timing from the MIDI header.
Highest precision; best for lossless round-trips and editing at sub-beat granularity.
Quarter (
float32)Normalized so that one quarter note equals
1.0.Ignores tempo fluctuations, making rhythmic analysis easier.
Second (
float32)Absolute wall-clock time.
Required for synthesis or aligning with audio waveforms.
Generic TType¶
Score, Track, and every event class are templated by the time unit (ScoreTick, TrackQuarter,
NoteSecond, …). Python factory objects dispatch to the appropriate specialization automatically.
from symusic import Score, TimeUnit
score_tick = Score("piece.mid", ttype="tick")
score_second = score_tick.to(TimeUnit.second)
Conversion rules¶
tick ↔ quarter: constant scaling usingticks_per_quarter.tick ↔ second: requires integrating the tempo map; Symusic handles this automatically when you call.to("second")or.render().quarter ↔ second: typically routed through ticks internally.
When converting from floats back to ticks, pass min_dur to prevent rounding very short events down
to zero.
Choosing an appropriate unit¶
Goal |
Recommended unit |
|---|---|
Edit MIDI with maximum fidelity |
|
Analyze rhythm, quantize, histogram beats |
|
Synthesize audio, align with wave files |
|
Regardless of the unit you pick, score.ttype tells you the active domain, and downstream APIs honor
it automatically. Read more in the symusic.TimeUnit entry.