Yeah, that would probably be a good idea.  I'm pretty bad with designing and implementing GUIs.<div><br></div><div>Jeremy<br><br><div class="gmail_quote">On Fri, Jan 7, 2011 at 3:37 AM, Sascha Schneider <span dir="ltr"><<a href="mailto:ungleichklang@gmail.com">ungleichklang@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">O.k.<br>
<br>
for my part I think I will pull my skills more into the direction of<br>
GUI-development,<br>
for it seems that GUI-Guys are needed too.<br>
I don't know if I will focus on fltk, gtkmm or qt4 ... will spend the<br>
weekend RTFM-ing.<br>
<br>
regards, saschas<br>
<br>
<br>
2011/1/7 Jeremy <<a href="mailto:jeremybubs@gmail.com">jeremybubs@gmail.com</a>>:<br>
<div><div></div><div class="h5">> Hi Malte,<br>
> So I've been working on converting it some more.  If you could give me some<br>
> pointers as to the meaning of variables, that would be useful.<br>
><br>
> What are the EG... variables, like "EG", "EGFaktor","EGtrigger", and<br>
> "EGState"?<br>
> Also if you're looking for a channel stealing algorithm, try this:<br>
> the type of a synth engine is "synth"<br>
> typedef struct _synthblock {<br>
>  _synthblock* next;<br>
> _synthblock* previous;<br>
> synth item;<br>
> } synthblock;<br>
> Initially, you start out using the synthblock as an element of a singly<br>
> linked list of free synths.  You only need to use the "next", pointer, and<br>
> can ignore the "previous" pointer.  You can either only keep track of the<br>
> head, and use it as a stack, or you can keep track of the head and the tail<br>
> and use it as a queue.  Either way, adding is a constant time operation, and<br>
> taking the most recently or least recently used one is also a constant time<br>
> operation.<br>
> Then, you have an array which keeps track of which notes are on.<br>
> synthblock* currentnotes[NUM_MIDINOTES];<br>
> When you get a note-on signal, you pop the first synth block off of the<br>
> "free synth" list, and then you add a pointer to it in this array, indexed<br>
> according to what note it is playing.  However, you also add it to the<br>
> doubly linked list of which synths are playing, again, a constant time<br>
> operation, because you are just twiddling with the next and previous<br>
> pointers of two blocks.  Now, the array contains a pointer to a block which<br>
> is in the doubly linked list.<br>
> Now, when you want all the synths to process, you can iterate through the<br>
> doubly linked list, and thus you only need to process the ones that are<br>
> playing notes.<br>
>  When you receive a note off signal, you look up the note in the array, and<br>
> then remove that item from the doubly linked list, and add it to the singly<br>
> linked one.<br>
> In the end, you can do everything in constant time (or O(number of notes<br>
> being played))<br>
> Anyway, I don't know if it's pointless for me to put my ideas here, but I'll<br>
> probably implement it too, if this doesn't make sense now.<br>
> Jeremy<br>
> On Thu, Jan 6, 2011 at 3:36 PM, Malte Steiner <<a href="mailto:steiner@block4.com">steiner@block4.com</a>> wrote:<br>
>><br>
>> On 06.01.2011 12:48, Jeremy wrote:<br>
>>><br>
>>> Yes.  Except it seems that you can select different settings for each of<br>
>>> your voices.  This doesn't really make sense if you are automatically<br>
>>> assigning the notes to synth engines.  I think perhaps the best way<br>
>>> would be to have one set of settings for *all* copies of the synth<br>
>>> engine, and if you want different settings, then you'd have to create<br>
>>> another copy of the plugin.<br>
>><br>
>> Yes, each voice has a different sound and response to a fixed midichannel,<br>
>> 1 for the first, 2 for the second voice and so on...<br>
>><br>
>> Actually I find it rather interesting to have different settings between<br>
>> automatically assigned notes. For instance with slightly different sounds it<br>
>> even would become more alive.<br>
>> But yes, for the average usage it would be great to just copy the settings<br>
>> across the voices.<br>
>> The channel stealing algorhythm kept me from implementing polyphony so<br>
>> far, got to study that...<br>
>><br>
>> A while ago I was against the idea of plugins but actually find it now<br>
>> usefull for recalling sessions. It would be great to stuff PD, Csound or<br>
>> AlsaModularSynth into a sequencer. So far I know that you can create LADSPA<br>
>> plugs with Faust and Csound but instruments??<br>
>><br>
>> Cheers,<br>
>><br>
>> Malte<br>
>><br>
>> --<br>
>> ----<br>
>> media art + development<br>
>> <a href="http://www.block4.com" target="_blank">http://www.block4.com</a><br>
>><br>
>> new on iTunes: Notstandskomitee Automatenmusik<br>
>> <a href="http://itunes.apple.com/us/album/automatenmusik/id383400418" target="_blank">http://itunes.apple.com/us/album/automatenmusik/id383400418</a><br>
>><br>
>> _______________________________________________<br>
>> Linux-audio-dev mailing list<br>
>> <a href="mailto:Linux-audio-dev@lists.linuxaudio.org">Linux-audio-dev@lists.linuxaudio.org</a><br>
>> <a href="http://lists.linuxaudio.org/listinfo/linux-audio-dev" target="_blank">http://lists.linuxaudio.org/listinfo/linux-audio-dev</a><br>
><br>
><br>
> _______________________________________________<br>
> Linux-audio-dev mailing list<br>
> <a href="mailto:Linux-audio-dev@lists.linuxaudio.org">Linux-audio-dev@lists.linuxaudio.org</a><br>
> <a href="http://lists.linuxaudio.org/listinfo/linux-audio-dev" target="_blank">http://lists.linuxaudio.org/listinfo/linux-audio-dev</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>