Hi there!
I'm a shaky little reindeer in the world of DSP, so I hope you'll forgive me if I'm being completely naive. I just wanted to point that out before I layed out my thoughts :)
I was playing with Kaivo yesterday (well, I play with Kaivo almost daily) feeling a childlike joy about being able to use pretty much whatever i had on my computer as an exciter for the PM part of your synth. This is the kind of personal power i really enjoy when it comes to sound design. Then a thought hit me. What if the videogame principle of "modding" could be applied to kaivo's resonator and body? What if the user could create custom models to use in Kaivo, maybe with the help of a PM design tool generously provided by Madrona Labs? That would be wild.
Now, although my experience with DSP is limited to making simple first-order low-pass filters in C++, I realize that Physical modeling is very complicated, but I still wanted to speculate on the forum about it and see what Kaivo's developer's thought about it.
Happy patching everyone!
Hi and welcome. The idea of making custom models is totally reasonable. I thought about making this possible in some way when I was designing Kaivo. But making it happen for 1.0 would have taken even more time and probably restricted the models themselves into particular forms. After I add some more models myself, I can definitely see opening the door to more customization somehow.
Keep in touch!
That makes sense. I feel that that is the classic dilemma when it comes to customization functionality. If the point is to make it accessible for the average user there need to be clear software design that's destined to create boundaries, maybe even more boundaries than new possibilities. After all, if someone is after infinite possibilities they might just pick up Visual Studio and start learning some math. That said, modding Kaivo is still an idea that thrills me.
Might I ask a completely unrelated question? Do you have any good advices to an aspiring sound software developer? How did you start out "back in the days"?
I've thought a lot about a fully modular product to do in the future. It would be nice to have some low-level capability in it for people with your desires to get down and dirty. I'll add that to the long list...
Advice to a new DSP programmer is a subject I could go on about for a long time! Here are a few ideas:
- get a programming environment that allows fast iterations.
The design -> write -> compile -> test cycle is something you will go through thousands and thousands of times, so if you have to do something else for a minute while you compile, it's a real drag. I use C++ for speed of the finished product, but I think that some more interactive ways of playing with low-level sound are out there and I would recommend them more highly as learning tools.
- find a project you want to do and move toward it incrementally.
Having a goal is important for learning even if you don't get there. There are infinite possibilities, so it's real easy to get lost just playing around. But be sure to start with small steps toward the goal so you don't get discouraged!
- learn some of the underlying math pretty well.
Check out some intro. to DSP programming books. I don't have a specific one I can recommend. But lots cover the basics well. You should be able to push meaningful symbols around on paper that describe the frequency domain, and transformations like the FFT, and the bilinear transform. This stuff is not as hard as it might seem, if you step away from the computer and give yourself plenty of time. And once you do know it, it opens so many doors in your head, to think realistically about what will be possible to do in the digital domain.
These were really nice suggestions. Specially the one about getting away from the computer a bit to concentrate on learning the math. I will really need that to understand mathematically the FFT and bilinear transforms (and lots of other stuff). It's amazing how easy some things are when you get them. Pure Data seems like a good aid when just starting out with a concept and test ideas, although it looks like IIR filters are difficult, if not downright inefficient, to implement.
I'm going to try to not bother you with these questions in the future, but sometimes it's easier to ask a human for advice than exploring code ánd equations, so I might give in to the temptation :)
Cycling 74's Gen might be a good tool for this kind of thing. I haven't found time to try it.