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

Bert Freudenberg bert at freudenbergs.de
Mon Mar 12 06:50:06 EDT 2007


That would be great I think. Did you look at it more closely? What  
synthesizer will it use on the XO - AFAIK there is no HW synth? Can  
it be made to use the CSound synthesizer?

- Bert -

On Mar 12, 2007, at 10:02 , Diego Gomez Deck wrote:

> Folks,
>
> May be we can include this at OLPC.
>
> Cheers,
>
> -- 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