Re: [linux-audio-dev] Lock-free gtk/jack interaction

From: Olivier Guilyardi <ml@email-addr-hidden>
Date: Tue Mar 15 2005 - 10:36:50 EET

Jens M Andreasen wrote:
> On Mon, 2005-03-14 at 17:34 +0100, Olivier Guilyardi wrote:
>
>
> Inserting the new widgets and having them propagate up thru the layout
> engine in order to be redrawn is probably expensive whatever way you do
> it.

Yeah, I'd have to reparent widgets, destroy a gtk table, and show the whole
thing up again. I guess it wouldn't be such an optimization. Needs testing though.

Of couse with a gtk DrawingArea, I could optimize the drawing at low-level, but
I don't think I'll go that way. I like these gtk buttons, altough inspired by
Aube's drummmachine, it's Jackbeat's touch ;-) Especially I like the way they
scale : recoding that kind of dynamics within a DrawingArea would be much work.

> Scrapping the underlying structure (is "workspace" equal to "sequence_t"
> here?) sounds a bit overdramatic though. I would instead like yo
> envision something like blocks of 32 tracks × 32 beats that can be
> extended vertically or horisontally as in:

No I'm not scrapping the whole sequence_t structure when resizing the workspace
(=tracks/beats/measure length) only the sequence_t->tracks member. This indeed
could be optimized by playing with pointers, but I believe the bottle-neck is
drawing widgets not resizing the actual underlying tracks data.

> In this fashion you could most of the time get away with adjusting
> max_track and/or max_beat. A deleted track will stop sounding when you
> hear the click from the mouse-button (although it may take a little
> longer before the UI has rearranged itself.)

Well, vertically, for tracks, it makes sense to use say blocks of 8. But for
beats this is not that useful.

>>By redesigning the gui, I would keep many widgets as they are and only create
>>some new ones, or destroy a few... This is very important, when you have a big
>>workspace (ie: 1k beats, 16 tracks), because things then get very slow the way I
>>currently do.
>
> Yeah .. I can imagine that one to be slow :) OTOH, the whole concept is
> pretty much broken by then ...

The thing is I personnally used such high number of beats, but it is not a good
idea. I want to implement "sequence nesting" since the first lines of Jackbeat,
which would help avoiding such big sequences : you could nest a sequence into an
other, that means assign a sequence to a track as you assign a sample.

With a few sequences on your screen you could then achieve both long melodies
and precise rythms. But I was unsuccesul with my first attempt to code a such
sequence "graph" (it is not just a sequence "playlist", you would be able to
cascade sequences).

> Waiting for IO is a classic way of having the UI get stuck and
> irresponsive. Therefore the nice people at gtk.org made this writeup:
>
> Monitoring IO
> -------------
>
> http://gtk.org/tutorial/sec-monitoringio.html

I'm not sure what you see this for : receiving messages from the RT thread
trough a named pipe, or reading from song files ? In the first case, that
gdk_input_add() could indeed be useful, in order to implement the RT-to-mainloop
notifications Paul talked about.

Thanks

--
   og
Received on Tue Mar 15 12:15:08 2005

This archive was generated by hypermail 2.1.8 : Tue Mar 15 2005 - 12:15:08 EET