[Stk] Modular STK UI

Adam Hines ahines57@gmail.com
Fri, 16 Jun 2006 12:03:54 -0400


------=_Part_3630_11285592.1150473834551
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi,

I've recently begun working in my spare time on a project involving STK. My
ultimate goal is to create a responsive and accurate banjo synthesizer
complete with hardware interface using AI methods to auto-discover which
parameters most closely reproduce the sound and tonal response.

Prior to this work, however, I have needed to build some tools which I may
release in some form to the list if there is sufficient interest.

1.) I've created a .NET wrapper dll which encapsulates a number of (though
not yet all) of the classes which ship with. This component allows for use
of STK within C#, VB.Net or any other .Net language by including this dll as
a reference.

2.) Secondly, I've began working on a component based UI similar to what
you'd see in Visio. Ultimately sound modules (various generators, effects,
and filters) can be dragged onto a form, and piped together. Currently, only
the Input and Output of each module is piped, however, there is planned
support for output=>parameter piping as well as a dual-link
parameter<=>parameter wiring scheme. (the term parameter refers to the
attributes of the module. ie. frequency phase and amplitude are all
parameters of a sinewave generator.)

The widgets were a pain to code, but in terms of aesthetics and flexability
I think it paid off (OOP at its best, lol)
http://web.njit.edu/~ajh2/images/ModularUI2.PNG
http://web.njit.edu/~ajh2/images/16Tap.png

The screen shots above are from the working program integrated with the
wrapper described above in (1). Changing the sliders results in a real time
change in the audio, allowing for easy tweaking of values to obtain the
sound you want. In playing with the reverb above with the 16 delays, it was
interesting finding the various frequencies which resulted in resonance and
constructive/destructive interference when played through the delay.

I still need to implement a lot of modules, for example, I would like a Midi
Input Module that uses an ADSR envelope to allow midi control of the model.

3.) Lastly, once the desired model has been created, I have plans to be able
to compile the high-level diagram into native c++ code linking to the
original stk classes. There is a good amount of overhead involved in being
able to dynamically wire and change parameters on the fly, and also as a
result of the generalized abstraction (not to mention c# inefficiency and
drawing overhead). The native c++ version will be a lean implementation that
should perform much better, allowing you to take your newly created
instruments with you.

Another advantage of this approach, is that as you create more complex
models, you can encapsulate the functionality into a new module, exposing
certain parameters. For example, In the case of the 16 delay reverb above,
we could encapsulate that entire model into a new module, and choose to only
expose the frequencies of each sine generator. The result would be a new
module with 4 sliders, the 3 seperate frequencies, and an output gain.
Everything being fed into the output module in the original model would be
piped out of the ouput parameter of the new module. Pretty cool if i may say
so.

Adam Hines

------=_Part_3630_11285592.1150473834551
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi,<br><br>I've recently begun working in my spare time on a project involving STK. My ultimate goal is to create a responsive and accurate banjo synthesizer complete with hardware interface using AI methods to auto-discover which parameters most closely reproduce the sound and tonal response.
<br><br>Prior to this work, however, I have needed to build some tools which I may release in some form to the list if there is sufficient interest.<br><br>1.) I've created a .NET wrapper dll which encapsulates a number of (though not yet all) of the classes which ship with. This component allows for use of STK within C#, 
VB.Net or any other .Net language by including this dll as a reference.<br><br>2.) Secondly, I've began working on a component based UI similar to what you'd see in Visio. Ultimately sound modules (various generators, effects, and filters) can be dragged onto a form, and piped together. Currently, only the Input and Output of each module is piped, however, there is planned support for output=&gt;parameter piping as well as a dual-link parameter&lt;=&gt;parameter wiring scheme. (the term parameter refers to the attributes of the module. ie. frequency phase and amplitude are all parameters of a sinewave generator.)
<br><br>The widgets were a pain to code, but in terms of aesthetics and flexability I think it paid off (OOP at its best, lol)<br><a href="http://web.njit.edu/~ajh2/images/ModularUI2.PNG">http://web.njit.edu/~ajh2/images/ModularUI2.PNG
</a><br><a href="http://web.njit.edu/~ajh2/images/16Tap.png">http://web.njit.edu/~ajh2/images/16Tap.png</a><br><br>The screen shots above are from the working program integrated with the wrapper described above in (1). Changing the sliders results in a real time change in the audio, allowing for easy tweaking of values to obtain the sound you want. In playing with the reverb above with the 16 delays, it was interesting finding the various frequencies which resulted in resonance and constructive/destructive interference when played through the delay.
<br><br>I still need to implement a lot of modules, for example, I would like a Midi Input Module that uses an ADSR envelope to allow midi control of the model.<br><br>3.) Lastly, once the desired model has been created, I have plans to be able to compile the high-level diagram into native c++ code linking to the original stk classes. There is a good amount of overhead involved in being able to dynamically wire and change parameters on the fly, and also as a result of the generalized abstraction (not to mention c# inefficiency and drawing overhead). The native c++ version will be a lean implementation that should perform much better, allowing you to take your newly created instruments with you.
<br><br>Another advantage of this approach, is that as you create more complex models, you can encapsulate the functionality into a new module, exposing certain parameters. For example, In the case of the 16 delay reverb above, we could encapsulate that entire model into a new module, and choose to only expose the frequencies of each sine generator. The result would be a new module with 4 sliders, the 3 seperate frequencies, and an output gain. Everything being fed into the output module in the original model would be piped out of the ouput parameter of the new module. Pretty cool if i may say so.
<br><br>Adam Hines<br>

------=_Part_3630_11285592.1150473834551--