timing in midi & midiperl
[email protected] ("Jackie McBride") Thu, 15 May 2003 19:59:47 -0700
| Newsgroups | perl.midi |
|---|---|
| Message-ID | <001101c31b57$517a9a80$ab32f842@jackie> |
Sean: If I may--there are really 2 timebases in midi that need to be considered--delta ticks, e.g., the time between events, & absolute ticks, e.g., the time from the beginning of the sequence. Ticks are independent of tempo in that if you have a resolution, say, of 96 ppq, then no matter what your tempo is, for every quarter note, 96 ticks are generated. The quarter notes are produced at a faster rate with faster tempos, but the ppq always remains static. With that in mind, time calculations should be able to be performed using ticks. Or do I misunderstand what you're saying? In terms of tempo, the midi specification says the following: a) In a format 0 file, tempo events are scattered throughout the track; b) in a format 1 midi file, tempo events are contained on the first track only (as of 1.0.4). Have you ever by any chance seen Paul Messick's Maximum Midi Toolkit??? It does a whole stinkin lot with windows dll's & all that crapola, which is superfluous for my needs, but it has a good section on midi timing. HTH. The light shines in the darkness, and the darkness did not overcome it. John 1:5 Jackie McBride, Qchord distributor & author of qchord manual for visually impaired website: www.tacticus.com/qchord email: [email protected] or [email protected] ----- Original Message ----- From: "Sean M. Burke" <[email protected]> To: "Jackie McBride" <[email protected]>; <[email protected]> Sent: Thursday, May 15, 2003 4:12 AM Subject: re: odd rhythms - how? > At 12:47 PM 2003-05-14 -0700, Jackie McBride wrote: > >However, I am finding the documentation uh, well, a bit daunting, to say > >the very very very least. I need to be able to change the timing of events > >in a midi file, to delete events, to filter events by type & channel, etc. > >[...] > > It's true, the documentation does no better than reflecting the fact that > modifying existing MIDI files is a complicated task, which the Perl modules > do only a little to simplify. That, in turn, is because I didn't see a way > to simplify the task much at all. > > For example, suppose you turn event lists (like you get from > $track->events_r) into a score (using MIDI::Score), so that each note > contains a number expressing its start-time, relative to the start of the > song. So if you wanted a given event to be twice as long from the start of > the piece, you can just take its start-time, and double it, right? So if > it's 200, ticks you change it to 400 ticks. > Well, it will usually work, but sometimes not -- if there's a set_tempo > event that happens at 300 ticks, as far as I understand these things, it > changes how fast the "time" from 300 ticks to 400 ticks actually takes -- > so that 400 ticks isn't twice as far off as 200 ticks, but maybe only a bit > farther off, or much much further off, depending on the set_tempo event's > parameters. > And I think that that set_tempo event is free to be on a completely > different track, while still affecting all the tracks at once! So there > goes any plan of processing tracks independently, which was one of the few > bits of sanity in the system. > > So the mere possibility of set_tempo events existing, adds a whole horrible > new level of indirection into the system. And I don't see a way to nicely > model that. I could maybe have something that scans for tempo-change > events and factors them into the time offsets in score events -- but I > think that to not distort the data too much, the units for the resulting > time figures would have to be in milliseconds, and so when dumping the > notes in a score, one would see quite large numbers like start-times, > potentially with roundoff errors, 276912.333332, which make the whole > system look somehow even messier than it is. > > And that's just /one/ of the hassles in the repertory of MIDI > events. Consider the problem of transposition -- it's just a matter of > taking every note-number and doing some math on it, right? Well, first > off, I'm not sure if or how pitch_wheel events would also have to be > altered too; and more importantly, there's an exception: with notes on > channel 9, the note-numbers don't represent pitches/tones, but instead > different percussion instruments, regardless of pitch. > > In short, to be able to generate a MIDI file (like with MIDI::Simple), you > can learn a small subset of MIDI and stick with it, and get along just > fine. But to be able to process existing MIDI files, you have to know the > whole mess. Or rather, you can learn a subset of it, and programs you > write based of that partial knowledge will work -- except when they > don't. And one has no idea how often that'll be. (Altho try it and see...) > > > I'm not suggesting it's impossible to make it easier to deal with MIDI > files -- but I mean that I'm so acquinted with the current frameworks that > I can't see how to innovate outside of them. So others will have to be the > ones to come up with different ways of doing/representing things, out of > which your problems can be solved. > > > >Also, (& I'm sorry, Mr. Moderator, I know this might be stretching things > >a bit), does anyone know of a good IDE for PERL that doesn't cost an arm, > >a leg, & both eyes? I know about komodo, however, I happen to be blind, & > >no screenreader I've seen to date can detect where the caret is, making it > >just a *little* difficult to edit with. So, if anyone has any suggestions > >regarding that, please feel free to contact me offlist as well. > > I'd be interested to hear what people can suggest for this. Personally I > just use a plaintext editor (PFE under MSWin, emacs under Unix) but that's > just by force of habit. > > > I'm also quite dismayed at Komodo and your screen-reader not getting along > well. On the one hand, I'm sometimes amazed that screen-readers can EVER > make any sense of GUIs out there; but on the other hand, GUIs are messy to > program, but ya know, it's not rocket science, and I think that if the GUI > construction systems out there had started out with accessibility as a > requirement from day 1, it would have shone a ray of clarity into the > system that I think would have helped us all, not just blind users -- even > down to mundane details like tabbing order and key assignments. > > Akh, don't get me started! > > -- > Sean M. Burke http://search.cpan.org/~sburke/ > >