Sofia Woodwinds on github
-
@d-navarra said in Sofia Woodwinds on github:
Anyway since I tried it and some modules look very interesting you think some of them (like your legato, vibrato or transition) can be reused in another project?
I've rewritten or modified most of these and have used them in other projects, I've just (in the last few days) rewritten my legato script to simplify it for my current project.
@d-navarra said in Sofia Woodwinds on github:
For this kind of questions is better here or patreon? :)
Here - unless it's about a post I made on the topic
@d-navarra said in Sofia Woodwinds on github:
Is there already something on the patreon about the realese samples or the management of the modules?
In this one I show how to add a global velocity modulator
https://youtu.be/zroQrv-MGWc?si=E02Juk3coEqoviSj
I don't have one for release triggers but you basically drop your samples into your sampler and add the built in release trigger script.
-
@d-healey said in Sofia Woodwinds on github:
I've rewritten or modified most of these and have used them in other projects, I've just (in the last few days) rewritten my legato script to simplify it for my current project.
Ok, since I wanna use a Rhapsody template am I allowed to use this new modules then?
https://codeberg.org/LibreWave/RhapsodyBoilerplate/src/branch/main/modules
Are there some explanations about all these modules somewhere?
@d-healey said in Sofia Woodwinds on github:
In this one I show how to add a global velocity modulator
https://youtu.be/zroQrv-MGWc?si=E02Juk3coEqoviSj
I don't have one for release triggers but you basically drop your samples into your sampler and add the built in release trigger script.
I can follow this video :)
If I understand correctly, since I'd like to use violin, viola, cello and bass it's better to connect all the modules which parameters I'd like to access from the GUI to the Global modulator and in this way I can use the same samplers changing the samplemaps and setting the parameters for each instrument saving them as presets, right?
-
@d-navarra said in Sofia Woodwinds on github:
Ok, since I wanna use a Rhapsody template am I allowed to use this new modules then?
Of course, as long as your project is released under the GNU GPL or you're using the scripts that have a public domain license.
@d-navarra said in Sofia Woodwinds on github:
Are there some explanations about all these modules somewhere?
I make these for my own use, the only documentation is in the code itself.
@d-navarra said in Sofia Woodwinds on github:
If I understand correctly, since I'd like to use violin, viola, cello and bass it's better to connect all the modules which parameters I'd like to access from the GUI to the Global modulator and in this way I can use the same samplers changing the samplemaps and setting the parameters for each instrument saving them as presets, right?
There's no one way to do it. It really depends on the details of your specific project, you'll have to decide for yourself what way you want to do things. If you need a UI widget to control more than one thing then you will have to use a control callback rather than connecting it up in the interface designer.
Global modulators are good but have some limitations.
Changing the sample maps and parameters is separate from the other stuff you mentioned. The way I do it is I have a hidden knob on the UI. In the knob's callback I use the knob's value as an index to an array which contains the list of sample maps. So if the knob has a value of 0 then I use the sample maps that correspond to patch 0, if it's 1 I use the sample maps for patch 1, etc. But you don't have to do it this way.
-
@d-healey said in Sofia Woodwinds on github:
Of course, as long as your project is released under the GNU GPL or you're using the scripts that have a public domain license.
Absolutely, the most I can accomplish in terms of publishing at the moment it's something based on the VCO and Sonatina just to test it out...
Right now I'm honestly focused on resampling some patches which are for windows only and import them in Rhapsody in order to be used natively in Linux for my personal needs. I already did some test and with some tweaks I can achieve some satisfying results :) I just need to learn to set it up correctly and make it usable with a decent GUI.
BTW I think you deserve a huge thank you from the Linux community for the job you did with Rhapsody finally allowing to build very professional sample based plugin like Sofia Woodwinds running natively on Linux :)
@d-healey said in Sofia Woodwinds on github:
There's no one way to do it. It really depends on the details of your specific project, you'll have to decide for yourself what way you want to do things. If you need a UI widget to control more than one thing then you will have to use a control callback rather than connecting it up in the interface designer.
Global modulators are good but have some limitations.
Did you do any specific tutorial which might help me better understand these concepts?
@d-healey said in Sofia Woodwinds on github:
Changing the sample maps and parameters is separate from the other stuff you mentioned. The way I do it is I have a hidden knob on the UI. In the knob's callback I use the knob's value as an index to an array which contains the list of sample maps. So if the knob has a value of 0 then I use the sample maps that correspond to patch 0, if it's 1 I use the sample maps for patch 1, etc. But you don't have to do it this way.
At the moment I rather prefer learning it following your methods because for sure I'm not able to create something all by myself :)
Using this method of the hidden knobs means that if you need to run contemporary two samplers (for example sustain and release) you have to set 2 different hidden knobs? One for each sampler? -
@d-navarra said in Sofia Woodwinds on github:
Right now I'm honestly focused on resampling some patches which are for windows only and import them in Rhapsody in order to be used natively in Linux for my personal needs.
Someone already made a Rhapsody version of VSCO strings: https://youtu.be/n3RKGrUa7EQ?si=IIxmA3_npKGjgHF1
And there is a more full VSCO HISE project here - https://musictop69.wixsite.com/orchestools/orchestools-two
@d-navarra said in Sofia Woodwinds on github:
Did you do any specific tutorial which might help me better understand these concepts?
I use this stuff in a lot of my videos. I can't think of a specific one at the moment, perhaps the "Knobs" videos... I think also this is a good video for getting started with: https://youtu.be/hD1RWA5fwRQ?si=6S7qAZf8wwT0iqGT
@d-navarra said in Sofia Woodwinds on github:
you have to set 2 different hidden knobs? One for each sampler?
You can if you want, but I just use one - take a look at the Sofia Woodwinds code (or one of my other instrument projects) to see what I'm doing there.
-
@d-healey said in Sofia Woodwinds on github:
Someone already made a Rhapsody version of VSCO strings: https://youtu.be/n3RKGrUa7EQ?si=IIxmA3_npKGjgHF1
And there is a more full VSCO HISE project here - https://musictop69.wixsite.com/orchestools/orchestools-two
The Orchestools project is very nice and it's the vst which lead me to HISE :)
Anyway is not a Rhapsody instrument but I read on its forum that the developer is working on a new version.
I have to check the Open Strings, btw both projects are focused on orchestral ensemble while I'm currently focused on the solo instruments.@d-healey said in Sofia Woodwinds on github:
You can if you want, but I just use one - take a look at the Sofia Woodwinds code (or one of my other instrument projects) to see what I'm doing there.
I checked this project of yours:
https://codeberg.org/LibreWave/TheShepherdsFlute
Your projects are quite complex for me of course, but for sure I should be able to understand the Interface and try to reuse most of its structure, at least I hope.
Might you point me where exactly to find the hidden knob you use to switch the samplemaps?I took a look at the samplers and I've noticed that compared to the Sofia Woodwinds there isn't any for the release, did you replace it with some scripting?
I also noticed you still use one for sustain and one for transitions but the structure is different and you replaced staccato and flutter with an all in one called articulations.
So I tried to test it with my violin samples and put the staccato in the transitions and articulations samplers (didn't know where to put the release) but it didn't work out well of course... Could you explain me how these samplers are supposed to work? -
@d-navarra said in Sofia Woodwinds on github:
Might you point me where exactly to find the hidden knob you use to switch the samplemaps?
It's the patch knob. It does a lot more than just changing sample maps. I've completely re-written it's implementation in my current project because the version I've been using is a bit inefficient and over engineered. You'll find the code for the knob here - https://codeberg.org/LibreWave/RhapsodyBoilerplate/src/branch/main/includes/Patches.js#L23
@d-navarra said in Sofia Woodwinds on github:
there isn't any for the release, did you replace it with some scripting?
If I remember correctly the samples for that library are very dry so the ADSR is enough for handling the release sound.
@d-navarra said in Sofia Woodwinds on github:
I also noticed you still use one for sustain and one for transitions but the structure is different and you replaced staccato and flutter with an all in one called articulations.
Every instrument is different.
@d-navarra said in Sofia Woodwinds on github:
Could you explain me how these samplers are supposed to work?
Not off the top of my head, I'd need to go back to the projects and see what I did. There will be different group configurations depending on the number of RRs and articulations and stuff like that. I may have integrated the group switching for articulations into the RR handler or I may be using a separate group switcher. There's no one size fits all so each project is tailored to the specific instrument and sample sets.
-
@d-healey said in Sofia Woodwinds on github:
Not off the top of my head, I'd need to go back to the projects and see what I did. There will be different group configurations depending on the number of RRs and articulations and stuff like that. I may have integrated the group switching for articulations into the RR handler or I may be using a separate group switcher. There's no one size fits all so each project is tailored to the specific instrument and sample sets.
Ok, I'm trying to understand the logic behind your method of using modules and scripts. The emerald flute uses the same structure as the other flute while I've noticed in the free trumpet you don't use the transitions, is this due to your new version of legato which doesn't require the transition sampler?
-
@d-navarra said in Sofia Woodwinds on github:
is this due to your new version of legato which doesn't require the transition sampler?
The legato system I use doesn't require transition samples at all - it's not "true legato" - however with some instruments that have a little bit of wetness to the samples it sounds better to have a little release sample during the legato and that's what the transition sampler is for.
-
@d-healey said in Sofia Woodwinds on github:
The legato system I use doesn't require transition samples at all - it's not "true legato" - however with some instruments that have a little bit of wetness to the samples it sounds better to have a little release sample during the legato and that's what the transition sampler is for.
Ok, let's start building the samplers first then. I'm testing with the ldk violin and I have sustain, short and release (only one set of samples for each and one velocity).
I don't like key switches and I'd rather focus on a "performance" patch using your legato, getting the realese playing on note off and maybe reinforcing it on retrigger with legato using your transition method. The main point is how to get the staccato when playing short notes?
could you suggest me a structure and maybe some modules or scripts I could use? -
@d-navarra said in Sofia Woodwinds on github:
The main point is how to get the staccato when playing short notes?
Do you mean you want to trigger a different sample set when a "short note" is played? I don't know how you'd do that because you don't know the note is short until after it's been played.
-
@d-healey said in Sofia Woodwinds on github:
Do you mean you want to trigger a different sample set when a "short note" is played? I don't know how you'd do that because you don't know the note is short until after it's been played.
Not exactly... I mean like in your Sofia Woodwinds, you get a kind of staccato feeling without using key switches. Maybe cross fading the sustain and staccato samplers so that they play together but don't sound like 2 voices?
-
I can't remember what process I used with Sofia, it's possible that I'm overlaying a staccato note when playing at a higher velocity. With my Rhapsody libraries though there is no overlaying. The played velocity has some effect on the envelope release time but the length of the note doesn't make a difference there.
-
Would you explain how your "performance" patch works, and eventually how could I use this overlay method if you think it might be efficient or suggest a different approach which would allow me to get both a normal sustain preset and one with a reinforced attack?
-
@d-navarra said in Sofia Woodwinds on github:
Would you explain how your "performance" patch works,
A lot of it is influenced by Big Bob's work in Kontakt with SIPS and WIPS (if you can find the docs for those he went into a lot of detail about various performance aspects).
Basically things like playing speed, velocity, and dynamics influence how various modules (mostly envelopes) respond. There's also the legato script which handles transitions and again takes into account playing speed, velocity, dynamics. One important thing is to add some reasonable amount of sample start offset to your sample maps so that the legato can trigger a little into the sample, skipping the attack. How much you need will depend on the samples and the legato settings you're using - every instrument's different. It's also worth pointing out that not all samples work well with this system. For example for Bell & Bone I re-recorded all the trumpet samples with a different musician because the first set just didn't play well, there was nothing wrong with them but they just didn't "work".
If you want to overlay a staccato sample then probably the best approach would be to put the staccatos in a separate sampler, mapped to the velocity you want them to trigger at. And in the sustain sampler add an envelope with an attack time that provides a nice crossfade between the staccato and the sustain and add a velocity modulator to the envelope so it only affects the same velocity range you are using for the staccatos. I don't think you'll be able to avoid a slight comb filtering/doubling effect though unless the samples are phase aligned.
-
@d-healey said in Sofia Woodwinds on github:
A lot of it is influenced by Big Bob's work in Kontakt with SIPS and WIPS
I know these tools but they are kind of easier to use on kontakt because you make some tweaks on the gui till you find what you need.
@d-healey said in Sofia Woodwinds on github:
I can't remember what process I used with Sofia, it's possible that I'm overlaying a staccato note when playing at a higher velocity. With my Rhapsody libraries though there is no overlaying.
When I tested the Sofia Woodwinds the sustain and release worked quite well but the staccato didn't have have enough gain to be heard probabily due to the missing module pointed in the console:
@d-navarra said in Sofia Woodwinds on github:
Interface:! Line 140, column 44: Unknown function 'set' {SW50ZXJmYWNlfHw0OTI0fDE0MHw0NA==}
overlayController:! Line 3, column 52: liveEnvelopeVelocity was not found. {b3ZlcmxheUNvbnRyb2xsZXJ8b25Jbml0KCl8MTQ5fDN8NTI=}
overlayController:! Line 3, column 52: liveEnvelopeVelocity was not found. {b3ZlcmxheUNvbnRyb2xsZXJ8b25Jbml0KCl8MTQ5fDN8NTI=}Lets experiment with the overlay anyway because it can be useful for some other instruments I want to work on later:
@d-healey said in Sofia Woodwinds on github:
If you want to overlay a staccato sample then probably the best approach would be to put the staccatos in a separate sampler, mapped to the velocity you want them to trigger at.
What velocity would you suggest? Is there a way to add a knob on the gui allowing you to change this velocity or is it to complex?
@d-healey said in Sofia Woodwinds on github:
add a velocity modulator to the envelope so it only affects the same velocity range you are using for the staccatos
Can you better explain this suggestion of yours?
Regarding the hidden knob to switch samplemaps:
@d-healey said in Sofia Woodwinds on github:
It's the patch knob. It does a lot more than just changing sample maps. I've completely re-written it's implementation in my current project because the version I've been using is a bit inefficient and over engineered. You'll find the code for the knob here - https://codeberg.org/LibreWave/RhapsodyBoilerplate/src/branch/main/includes/Patches.js#L23
All the modules and scripts which are involved in this patch are already available in the boilerplate or should I make all the other scripting in order to use this patch?
-
@d-navarra said in Sofia Woodwinds on github:
I know these tools but they are kind of easier to use on kontakt because you make some tweaks on the gui till you find what you need.
They can only be used in Kontakt. My point in mentioning them is that my scripts are heavily influenced by them, especially WIPS so if you want to know how they work you should read the documentation that Big Bob wrote as he goes into a lot of detail - also my scripts have UIs that you can tweak the parameters...
@d-navarra said in Sofia Woodwinds on github:
What velocity would you suggest?
It's up to you and the velocity curve of your keyboard so you can trigger it comfortably. Or you could add a velocity curve control to your instrument's UI to make it editable.
@d-navarra said in Sofia Woodwinds on github:
Is there a way to add a knob on the gui allowing you to change this velocity or is it to complex?
You can control almost every parameter of your project with a GUI knob. The fact that you're asking that indicates you should really be working on simpler HISE projects.
@d-navarra said in Sofia Woodwinds on github:
Can you better explain this suggestion of yours?
Which bit do you need more explanation for?
@d-navarra said in Sofia Woodwinds on github:
All the modules and scripts which are involved in this patch are already available in the boilerplate or should I make all the other scripting in order to use this patch?
The system I use depends on a manifest file that defines everything, this is used in multiple places to setup various bits of configuration when the patch is changed. The boilerplate only contains scripts, it doesn't contain HISE modules, you need to add those and set them up the way you want in your project and if you're using the manifest method then you can change their properties when the patch is changed.
-
@d-healey said in Sofia Woodwinds on github:
also my scripts have UIs that you can tweak the parameters...
Right, I saw your legato and it looked very similar, my problem is that I've been looking at your instruments at it's quite overwhelming. Sorry if I ask so many questions but it's the only way to understand what can result too complex and then discard that option in order to look for an easier solution. For example I know I can assign knobs to control parameters but I'm not sure for each use case the way it works...
Like the knob patch we discussed to switch the sample map involves some more scripting in your version and I need to find a simpler way to start with instead.
As long as it doesn't require any particular scripting I think I can accomplish to overlay staccato and sustain through velocity
@d-healey said in Sofia Woodwinds on github:
If you want to overlay a staccato sample then probably the best approach would be to put the staccatos in a separate sampler, mapped to the velocity you want them to trigger at. And in the sustain sampler add an envelope with an attack time that provides a nice crossfade between the staccato and the sustain and add a velocity modulator to the envelope so it only affects the same velocity range you are using for the staccatos
In this advice, when you say: "add a velocity modulator to the envelope so it only affects the same velocity range you are using for the staccatos" you mean that if I map the staccato to be triggered at 64-127 for example, I should set the min velocity of the modulator at 64 in the sustain sampler (if it iso I don't think I got it)?
Furthermore, if I want to change the velocity range for the staccato in the gui, in order to adapt it to the keyboard you're playing with, shouldn't it be easier to add a velocity modulator to the staccato sampler and control the velocity range from the gui?
This way I can map both sustain and staccato to all the velocity (1-127) and add a knob on the gui allowing to control the attack time for the sustain to crossfade with the staccato while for the staccato I can add a table on the gui to modify the velocity range and curve.Does it make sense or am I completely wrong?
-
@d-navarra said in Sofia Woodwinds on github:
...For example I know I can assign knobs to control parameters but I'm not sure for each use case the way it works...
as David said:
.... that indicates you should really be working on simpler HISE projects. Until you understand the fundamental approach of HISE I would recommend you stay away from the "more complex" approaches to delivering products...
-
@d-navarra said in Sofia Woodwinds on github:
you mean that if I map the staccato to be triggered at 64-127 for example, I should set the min velocity of the modulator at 64 in the sustain sampler (if it iso I don't think I got it)?
The velocity modulator will be in the Attack Time section of the envelope. The modulator has a table that you can use to map velocity values to the attach time.
Since we only want to add a fade in to the sustain when the velocity is above 64 (if that's the lowest value you want to trigger the overlay) then you can use the table to provide a lower attack time when the velocity is below this threshold, and a longer attack time when it's above. You'll need to play around with the values to find out what attack time works best for your samples.
@d-navarra said in Sofia Woodwinds on github:
Furthermore, if I want to change the velocity range for the staccato in the gui, in order to adapt it to the keyboard you're playing with, shouldn't it be easier to add a velocity modulator to the staccato sampler and control the velocity range from the gui?
I think you're referring to a velocity modulator to control gain here? Which is separate from the velocity modulator that's controlling attack time.