Questions have been asked regarding the need for such accurate timing for
playback of midi events.
When you consider 120 ticks per beat, quite often there are not 120 events
occuring in that time period. What a ppq value serves to do is offer a
resolution of playback. To capture what is known as 'feel', the more
possible slots in a division of time you have, the more accurate to the
true performance you will be.
You may ask, how accurate is the human ear in hearing such timings? Given
a series of notes, that approxamates a known 'feel' template, such as
various styles of jazz, the human error can detect a few tick values of
error at 480 PPQ. The human ear, in certain settings can easily detect
errors of 1-2 milliseconds. Given a series of events spaced over an
interval, situations can arise, where a trained musician can discern a
'falibility' in the feel of a playback. This, in essence, is a detection
of tens of microseconds errors.
The speed of midi hardware is 31.25 (+/- 1%) Kbaud, asynchronous, with a
start bit, 8 data bits (D0 to D7), and a stop bit. This makes a total of 10
bits for a period of 320 microseconds per serial byte. However, the speed
of the hardware is IRRELEVANT for programming concerns. As I mentioned, a
situation in which an event takes place on every possible tick is unlikely.
>"It's supposed to be about music. "Ticks" be d*mned! Where are
>the definitions of Whole_Note, Half_Note, Quarter_Note, etc.? Base these
>on "Ticks per measure", then forget about ticks. "
Obviously you have no knowledge of how midi works. Durations of notes are
specified in the events themselves. Furthermore a 'quarter' note is not a
pure duration in actual music. There are infinitely many possible
durations that a quarter note will assume, often as music specifies,
staccato, or legato. You do not 'define' note values, except when you are
allowing the user to create notes via a graphical editor.
>"Define the pitches using
>something akin to do, di, re, ri, mi, fa, etc., and you will be able to
>change the key just as easily."
I hope this was a joke. Pitches are defined using numbers in the note
message, which makes transposition effortless. But that is not a concern
right now, timing is.
>"If something is supposed to happen at a 5KHz or 200 mic, rate, how many
>mics of random jitter does it take to produce significant noise energy
>in the range of human hearing? If you are trying to produce two
>sequences at 5 and 5.01 KHz, so the beat is down at 10 Hz, you need to
>generate one of them at 200 mics and the other at 199.6 mics. If your
>clock resolution is 2 mics, then you'll get one at 200 and the other at
>198, for frequencies of 5Khz and 5.05 KHz, giving a nice 50Hz beat.
>That applies to direct control of a waveform. I too am surprised that
>Midi, which is control of a device that generates a waveform, has such
>tight timing requirements.
Midi does not control or generate a waveform in any way. Midi simply
relays instructions for synthesizers to do various operations.
What we are attemping to do with this program is generate extrememly
accurate or 'steady' timing. Musicians have long favored dedicated
hardware sequencers for their timing, which is based off a crystal
osc. Next, they have favored Mac, because their timing differences are
AUDIBLE. I personally can tell what system a particular sequence was
recorded off of. Having both mac and win systems, I have A/B'd this and
could quite easily hear the timing differences in the playback of the same
file.
We are sacrificing PPQ (using likely 120 instead of 480 or 960) to achieve
a Rock Steady playback.
Again, we are looking for ways to achieve this. We are open to suggestions
of course, and we have been trying out some ideas of our own. This kind of
timing can be done; to what degree of accuracy is the question. I welcome
anyone else's take on this.
Thanks for your time, if you have read this far.
-Jesse Farmer.