From: Richard G. <ric...@st...> - 2000-02-28 11:03:31
|
Hi! I try to summarize your suggestions, so you can check if I got it. - like every audioprocessing tool you have something like tracks which contain actual wave data. - you have effects which can be applied to a track resulting in a new track (not discarding the old one, but being "a layer higher") - now you try to make this concept of layering more generic and apply the idea to what is usually referred to as "mixing"? - so there are acutally two different sorts of layers - one which does just do effect-overlay and one which does track grouping (which is an effect, too if you would call it mixing) - important is that you do keep around (or be able to generate) any track in any layer - this whole thing is a tree Let's look what glame does have for now: - the filter and filternetwork stuff is not directly releated to the tree-idea - one filter/filternetwork is just the actual implementation of an effect. - the swapfile (unused in current glame - we dont have the wave-part started) provides an efficient way to store the "vertical layering" tracks (i.e. track1, track1 with echo, track1 with echo and volume, etc.) - the swapfile also is able to store multiple tracks, so the grouping can be done here, too. (you may look at the channel/channel.h interface which was a start on "grouping tracks to something bigger") I very much like your tree idea from the UI side of view. For the UI my only problem is how to integrate the filter/filternetwork stuff cleanly into the wave part of glame - of course as we do have the filternetwork stuff started/done I like to design the wave stuff to fit the filternetwork stuff - not the other way around. To solve the filternetwork/wave integration problem we could abstract the nodes in the tree to either wave nodes or filter nodes, i.e. all nodes in one hierarchy are applied (in undefined order) to each other: - a with echo [wave] +- a [wave] \- echo [filter] Any interior node of the tree would be a wave node, only the leaf nodes can be filter(network)s (until we support "stacking" those, too...). As for the "apply in undefined order" - its the simplest approach. Another possibility is to attach the filters to the edges of the tree: -- a with echo | | (echo) \------- a This would solve all ambiguities but of course restrict the whole thing to "one effect" only. Also merging and applying an effect to the merged stuff requires an extra (empty) tree hierarchy: --- a and b with echo | | (echo) \--------+- a \- b To guarrantee a sane ordering with the first approach would invalidate the "its a tree" idea - there is really no ordering with an n-tree. The second approach is probably more user friendly and intuitive from the UI point of view. Its also basically what you suggested below (if I do understand your figures). Well, waiting for other comments. Richard. On Sat, 26 Feb 2000, Chad Miller wrote: > Hi. > > If one uses modern OSes for any amount of time, one comes to understand > the idea of a tree structure as a method of organization. With this in > mind, I arrived at an idea for an interface and some internals for a > similar-to-glame-but-recently-abandoned project of mine. I'd like to > pass these along, since I think they deserve to live. > > Imagine a 'node' of music. It has an input -- a sample or "stream" of > music(!) or MOD-type collection of sounds. In this node, we can apply > effects over time, and stack them like the layers in GIMP. The output > of this node can be sent to anything: a file, the line-out of the > audio device, or _another_node_. Actually, one can combine outputs of > nodes into a stream into another node if they agree on an epoch. > > So, to make an example, we might make a node and make its input a looping > kick drum sample. Above this (like a gimp layer), we add a slow > crechendo. > > Now, we might create make a sister node a that has a guitar solo sound > as its input. We add a reverb layer and a distortion layer, and tweak > them just so. > > Now, at this point, we have two 'pieces' that have two different outputs, > so we can't play them both at the same time. > > = kick drum (+crechendo) > = guitar (+distort, +reverb) > > So, we create another node, calling it 'main', and set its inputs to be > the two outputs of the first nodes by manipulating a tree: > > = main > +- kick drum (+crechendo) > \- guitar (+distort, +reverb) > > Now, if we play the 'main' node to the speakers, it draws its input from > the nodes 'attached' beneath it. > > If we notice 'main''s output isn't right, we can add a volume layer, for > instance, on 'main' and adjust the output as we like. > > = main (+volume) > +- kick drum (+crechendo) > \- guitar (+distort, +reverb) > > If we want to make a largish tune, we should abstract the atomic inputs > (leaf nodes) to very deep in a tree.. > > = "In Cahoonts with the Penguin" (+volume, +echo) > +- strings > | +- vielle > | +- guitars (+reverb) > | +- *lead (+distortion) > | \- *backup (+volume) > +- percussion (+effect1) > | +- cymbal > | +- kick drums (+effect2) > | | +- *first kick drum > | | \- *second kick drum (+effect2) > | \- snare > \- brass > +- *trumpet (+foo) > +- *tuba > +- *trombone (+bar) > \- *corinet > > > I added asterisks to show that we should emphasize nodes atomic inputs > in the display. > > While viewing this tree, we should have another section of the screen, in > which nodes we've selected can be seen and manipulated individually, as > well as adjusting a common idea of timing between them. If we select > several nodes, we should see a screen like Cool-Edit Pro, for instance. > > > = "In Cahoonts with the Penguin" (+volume, +echo) > -- strings > +- percussion (+effect1) > [ | +- cymbal (selected == ) ] > | -- kick drums (+effect2) > | \- snare > \- brass > +- *trumpet (+foo) > [ +- *tuba ] > [ +- *trombone (+bar) ] > \- *corinet > > --------------------------------------------------- > > - "cymbal" -------- > > || | || | || |||| || || | ||| | .... > | ||||| || waveform blah blah |||||||||| .... > || | || | || |||| || || | ||| | .... > > - "tuba" ----------- > > | | | || || || | | .... > ||| || waveform blah blah ||| | .... > | || | || || || | | .... > > - "trombone" -------- > effects: > bar = 20% > > || | | || ||| || || | ||| | .... > | |||| || waveform blah blah |||||||||| .... > || | | || ||| || || | ||| | .... > > --------------------------------------------------- > > > hth. > - chad > > _______________________________________________ > glame-devel mailing list > gla...@li... > http://lists.sourceforge.net/mailman/listinfo/glame-devel > |