Time Stretching / Sample Playback Extension Development
Re: Time Stretching
I have been working on a few time stretching techniques for a while now :
I have been considering the idea of implementing these techniques in a way that would work with HISE. As I currently understand it, this may be outside the scope of the DSP module system in HISE, and would require working with the HISE source code, and I just wanted to confirm. Is this correct?
Is there any other info on extending HISE available?
As I understand it HISE is a JUCE project, and have been learning JUCE for a while. I have various prototypes of my algorythm in PD and MAX-gen~ which can both be converted to C++, I mainly want to check if it might be better for me to re-develop my time stretching methods in a JUCE project and from there I could make that into a new generator in HISE, or if the there might be a better way like the HISE DSP module system.. and in general if there is more info on development of new generators with HISE.
Christoph Hart last edited by
First of all, welcome
For starters, you might want to take a look at the Looper module, which is a basic one-sample playback module and may be easier to be hacked than the full blown sampler which deals with multithreaded streaming and intermediate buffers.
It will load the entire sample into memory and can be much easier accessed for implementing your time-stretch routines.
The API for HISE sound generators is not too different from the JUCE
Synthesiserclass (in fact it's a subclass), so if you're already familiar with the JUCE style of handling synthesisers, it should be straight forward.
The HISE DSP module system is more suited to hooking up audio effects into HISE, so the API concentrates on processing stereo audio buffers instead of MIDI / audio.
The base class for Sound generators in HISE is this:
If the concept of hacking in the HISE source code scares you (it definitely comes with a rather steep learning curve), you might as well start a pure C++ project with JUCE using the Synthesiser class and then back port it to HISE when you've got a working prototype there (this step is not too difficult as the other way around)
Thank you @Christoph-Hart, and if I hadn't said it already.. really awesome work . HISE is awesome in general, and I lost my $#!t when I saw the time lapse video of building a plugin in 5 minutes the first time.. So amazing, and I am glad to see you providing an open source competitor to Kontact.
I'm learning JUCE a bit more now and will work on getting a JUCE Synthesizer class based test.
In evaluating various options, I ended up circling back around to Cabbage. I had looked at Cabbage a couple years ago, but my main interest at the time was to create iOS apps, and you/AUv3 export has effectively solved a potential iOS market gateway utilizing JUCE.
If you aren't familiar, Cabbage is a JUCE based project under GPLv3 that in many ways provides a potentially perfect complementary feature set to what you have done in HISE. I posted some links to your iOS export page on the Cabbage forum as a reference. http://forum.cabbageaudio.com/t/cabbage-juce/224/3
I also did some tests simply running some of the included example plugin exports of various time stretching techniques. These are already made and based on Csound opcodes, and as far as I can see thus far in being a N00B at Csound it provides high quality options for advanced DSP and synthesis. http://cabbageaudio.com/
This could be an option for you.. in general I am really impressed by both of your tools and in my dream world I can imagine the most robust plugin creation tool if these were somehow combined.
One caveat that Rory mentioned on the above thread is that the iOS Csound is somehow different from desktop versions, not yet sure of the details there yet but figured I would at least keep my thoughts transparent.
I will keep pursuing my other JUCE route and experiments in the interim.
Oh also re:looper module, I posted another thread with some issues I was having when I used it. It didn't seem to shift the playback pitch to fit with the time/bpm.