[Etoys] [Fwd: Squeak MIDI output with Linux / ALSA]

Diego Gomez Deck DiegoGomezDeck at consultar.com
Mon Mar 12 05:02:46 EDT 2007


May be we can include this at OLPC.


-- Diego

--------- Mensaje reenviado --------
> De: Florian Hars <florian at hars.de>
> Responder a: The general-purpose Squeak developers list
> <squeak-dev at lists.squeakfoundation.org>
> Para: squeak-dev at lists.squeakfoundation.org
> Asunto: Squeak MIDI output with Linux / ALSA
> Fecha: Sun, 11 Mar 2007 20:33:34 +0100
> I spent the sunday reading some ALSA documentation and produced a replacement 
> for sqUnixMIDI.c (which I compiled into Squeak by hacking the generated 
> Makefiles, yuck), which compiles, and the three or so functions Scratch uses 
> actually do something useful (I ignored MIDI input, the drumkit and other 
> things). Maybe somebody with a better (read: any) understanding of the  squeak 
> internals can use this as a basis to create something that actually works and 
> is integrated into the build environment.
> Some observations that should be adressed in a final version:
> midiInit is only ever called when a note is played. So the MIDI output port 
> will only come into existence when the first note has been sent, and only then 
> can you connect the port to the input port of a sythesizer. This connection 
> will be destroyed if you stop the script in Scratch (in sqMIDIClosePort), so 
> you have to reconnect before starting the next script. There *must* be 
> something better than that.
> There is a slight mismatch between Squeaks sqMIDIGetPortCount and the ability 
> to create as many ports as you want in ALSA.
> The ALSA sequencer can schedule events, but the return type of 
> snd_seq_queue_status_get_tick_time is (typedefed to) unsigned int, so I do not 
> know if the assumption "The MIDI clock is assumed to wrap at or before half the 
> maximum positive SmallInteger value. This allows events to be scheduled
> into the future without overflowing into LargePositiveIntegers." holds. As far 
> as I understand the ALSA documentation, the client shouldn't make these 
> assumtion at all and refrain from guessing at future clock values: "As each 
> sequencer queue has it's own clock the only way to deliver events at the right 
> time is by using the relative timestamp format. When the event arrives at the 
> queue it is normalised to absolute format." 
> (http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html)
> My code is probably broken in this regard (Scratch produces only immediate events).
> If you route the Squeak MIDI output to a sequencer that outputs to jack, Squeak 
> may no longer be able to open the normal ALSA audio device, so you should 
> either use a synth that does not require jack like timidity -iA -oS, or 
> implement jack output for Squeak. The latter could be difficult, the former has 
> the disadvantage of high latency (at least on my machine I have a noticable 
> delay if I send events from an external keyboard to timidity).
> Yours, Florian Hars.
> PS: http://www.squeakvm.org/unix/ mentions something like "svn export 
> http://squeakvm.org/svn/squeak/tags/unix-3.9-8", but that doesn't exist, there 
> is no tag past unix-3.9-4 there.

More information about the Etoys mailing list