MSchnell wrote:
DANIELE wrote:
I put the JSFX at the beginning of the FX Chain and I see the first slider moving. Anyway the other two sliders doesn't move, whatever the value of the CC2 is.
The "Vol in" slider just shows the CC7 input.
As pointed out in the other post, (with this version of the plugin) you need to provide Volume (CC 7) input, as well.
I use the volume pedal of the keyboard, but if your keyboard does not send CC7, for testing, you also can use another channel of the BBCv2 with a "funny" curve, to have just some volume messages sent.
-Michael
Ok, now I see. I use another controller for CC7.
I have to assign CC7 to volume in the instrument too, is this correct?
Anyway is an interesting way to go but for now it seems not so different from using CC2 to control dynamics and volume at the same time. When I stop blowing on the controller I loose the release almost completely.
SM should implement some sort of secondary volume that acts only on the dynamics and not on the release.
Right now I can't figure how we can do something similar from the outside, but maybe it's because it is bed time right here.
DANIELE wrote:
Anyway is an interesting way to go but for now it seems not so different from using CC2 to control dynamics and volume at the same time.
As stated at the start of the thread the only difference is that there is a limit up from which the vol setting is normal, hence preserving the original dynamics for harder blowing.
DANIELE wrote:
When I stop blowing on the controller I loose the release almost completely.
That is obviously bad.
A more sophisticated version of the plugin could leave vol at the normal curve once BC is above "limit" until BC reaches "min" up from zero (or something like this) to improve this. But I don't know whther it makes sense to invest more effort here.
DANIELE wrote:
SM should implement some sort of secondary volume ....
Creating the attack from the derivative of a higher resolution of the breath pressure would be appropriate. But I suppose TEC would need to work on that. Either doing it themselves e.g. by by providing Note On events (Wind controllers send Note On events with velocity calculated from the derivative of the blowing presure) or by sending data as High Resolution Midi, so that the instrument can do this calculation.
MSchnell wrote:
DANIELE wrote:
Anyway is an interesting way to go but for now it seems not so different from using CC2 to control dynamics and volume at the same time.
As stated at the start of the thread the only difference is that there is a limit up from which the vol setting is normal, hence preserving the original dynamics for harder blowing.
DANIELE wrote:
When I stop blowing on the controller I loose the release almost completely.
That is obviously bad.
A more sophisticated version of the plugin could leave vol at the normal curve once BC is above "limit" until BC reaches "min" up from zero (or something like this) to improve this. But I don't know whther it makes sense to invest more effort here.
DANIELE wrote:
SM should implement some sort of secondary volume ....
Creating the attack from the derivative of a higher resolution of the breath pressure would be appropriate. But I suppose TEC would need to work on that. Either doing it themselves e.g. by by providing Note On events (Wind controllers send Note On events with velocity calculated from the derivative of the blowing presure) or by sending data as High Resolution Midi, so that the instrument can do this calculation.
-Michael
I know, I found another JS that does a similar thing (limit max volume).
What's complicated is managing the min situation.
I thought about leaving the volume at the same value until it goes under the min limit. I think we can try this, it should be simple for you to do so.
Maybe doing something like this could create problems when you stop blowing and the restart while the volume goes to 0, I think it could be not so smooth transition but I have to try it to be sure.
Finally I hope TEC and SM do something about this.
DANIELE wrote:
I thought about leaving the volume at the same value until it goes under the min limit. I think we can try this, it should be simple for you to do so.
I'll give it y try tonight...
The next potential step would be dropping the Volume handling and instead to try to calculate the derivative of the BC and handling the note on events in a way that in case of legato the velocity is passed through and in case of staccato due to a new note started by BC, the note on velocity is generated according to the derivative of BC (or similar).
DANIELE wrote:
Finally I hope TEC and SM do something about this.
Hopefully Audio Modeling will provide a discussion forum. You will need to post the request there.
The next potential step would be dropping the Volume handling and instead to try to calculate the derivative of the BC and handling the note on events in a way that in case of legato the velocity is passed through and in case of staccato due to a new note started by BC, the note on velocity is generated according to the derivative of BC (or similar).
DANIELE wrote:
Finally I hope TEC and SM do something about this.
Hopefully Audio Modeling will provide a discussion forum. You will need to post the request there.
-Michael
Thank you.
Yes, you had a good idea. I was thinking about the same thing, a way to track note on instead of dynamics or volume level but I need time to think about it. If I have some idea I'll share it here.
If they will provide it I'll post a request there. Where they should provide it?
- we now have a "slider" to select the CC ID for the received "Volume" messages
- we now have a "slider" to select the CC ID all "volume messages are sent out (hence the input messages are translated on the fly)
- I implemented a hysteresis:
. - the Volume reduction is disabled once the "BC limit" is reached
. - the Volume reduction is re-enabled only when once the BC input first gets below half the "BC min" and then gets to the "BC min" again.
Please try it, it kind of works, but I don't think it's really usable.
-Michael
Ok, I made some little test.
I have some glitches when I try to mantain a quiet constant sound. I think this is because of the hysteresis you made.
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
I tried to play with the sliders but I need some more time to test it.
DANIELE wrote:
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
All CCs but the ones set by the two "Volume" sliders are just passed through.
The "Volume out" slider can be used to change the CC ID received as "Volume" to another CC number (in case you mapped something else in the SWAM instrument)
If "Volume in" and "Volume out" are set to the same number, also this is passed through unmodified, unless volume is to be reduced due to Breath Control moving.
(Of course you can enable the Debug sliders for visualization when testing.)
MSchnell wrote:
DANIELE wrote:
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
All CCs but the ones set by the two "Volume" sliders are just passed through.
The "Volume out" slider can be used to change the CC ID received as "Volume" to another CC number (in case you mapped something else in the SWAM instrument)
If "Volume in" and "Volume out" are set to the same number, also this is passed through unmodified, unless volume is to be reduced due to Breath Control moving.
(Of course you can enable the Debug sliders for visualization when testing.)
-Michael
Ok, just as I thought. I need some more test and I'll let you know.
DANIELE wrote:
MSchnell wrote:
Just for fun I did a new version
- we now have a "slider" to select the CC ID for the received "Volume" messages
- we now have a "slider" to select the CC ID all "volume messages are sent out (hence the input messages are translated on the fly)
- I implemented a hysteresis:
. - the Volume reduction is disabled once the "BC limit" is reached
. - the Volume reduction is re-enabled only when once the BC input first gets below half the "BC min" and then gets to the "BC min" again.
Please try it, it kind of works, but I don't think it's really usable.
-Michael
Ok, I made some little test.
I have some glitches when I try to mantain a quiet constant sound. I think this is because of the hysteresis you made.
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
I tried to play with the sliders but I need some more time to test it.
Sorry for the late reply, I had difficult times.
I quote myself, I confirm that behavior at low constant dynamics. Maybe we have to move away from volume, I don't know if the issue can be solved this way.
Comments
DANIELE wrote:
I put the JSFX at the beginning of the FX Chain and I see the first slider moving. Anyway the other two sliders doesn't move, whatever the value of the CC2 is.
The "Vol in" slider just shows the CC7 input.
As pointed out in the other post, (with this version of the plugin) you need to provide Volume (CC 7) input, as well.
I use the volume pedal of the keyboard, but if your keyboard does not send CC7, for testing, you also can use another channel of the BBCv2 with a "funny" curve, to have just some volume messages sent.
-Michael
Ok, now I see. I use another controller for CC7.
I have to assign CC7 to volume in the instrument too, is this correct?
Anyway is an interesting way to go but for now it seems not so different from using CC2 to control dynamics and volume at the same time. When I stop blowing on the controller I loose the release almost completely.
SM should implement some sort of secondary volume that acts only on the dynamics and not on the release.
Right now I can't figure how we can do something similar from the outside, but maybe it's because it is bed time right here.
As stated at the start of the thread the only difference is that there is a limit up from which the vol setting is normal, hence preserving the original dynamics for harder blowing.
DANIELE wrote: When I stop blowing on the controller I loose the release almost completely.
That is obviously bad.
A more sophisticated version of the plugin could leave vol at the normal curve once BC is above "limit" until BC reaches "min" up from zero (or something like this) to improve this. But I don't know whther it makes sense to invest more effort here.
DANIELE wrote: SM should implement some sort of secondary volume ....
Creating the attack from the derivative of a higher resolution of the breath pressure would be appropriate. But I suppose TEC would need to work on that. Either doing it themselves e.g. by by providing Note On events (Wind controllers send Note On events with velocity calculated from the derivative of the blowing presure) or by sending data as High Resolution Midi, so that the instrument can do this calculation.
-Michael
DANIELE wrote: Anyway is an interesting way to go but for now it seems not so different from using CC2 to control dynamics and volume at the same time.
As stated at the start of the thread the only difference is that there is a limit up from which the vol setting is normal, hence preserving the original dynamics for harder blowing.
DANIELE wrote: When I stop blowing on the controller I loose the release almost completely.
That is obviously bad.
A more sophisticated version of the plugin could leave vol at the normal curve once BC is above "limit" until BC reaches "min" up from zero (or something like this) to improve this. But I don't know whther it makes sense to invest more effort here.
DANIELE wrote: SM should implement some sort of secondary volume ....
Creating the attack from the derivative of a higher resolution of the breath pressure would be appropriate. But I suppose TEC would need to work on that. Either doing it themselves e.g. by by providing Note On events (Wind controllers send Note On events with velocity calculated from the derivative of the blowing presure) or by sending data as High Resolution Midi, so that the instrument can do this calculation.
-Michael
I know, I found another JS that does a similar thing (limit max volume).
What's complicated is managing the min situation.
I thought about leaving the volume at the same value until it goes under the min limit. I think we can try this, it should be simple for you to do so.
Maybe doing something like this could create problems when you stop blowing and the restart while the volume goes to 0, I think it could be not so smooth transition but I have to try it to be sure.
Finally I hope TEC and SM do something about this.
I'll give it y try tonight...
The next potential step would be dropping the Volume handling and instead to try to calculate the derivative of the BC and handling the note on events in a way that in case of legato the velocity is passed through and in case of staccato due to a new note started by BC, the note on velocity is generated according to the derivative of BC (or similar).
DANIELE wrote: Finally I hope TEC and SM do something about this.
Hopefully Audio Modeling will provide a discussion forum. You will need to post the request there.
-Michael
I'll give it y try tonight...
The next potential step would be dropping the Volume handling and instead to try to calculate the derivative of the BC and handling the note on events in a way that in case of legato the velocity is passed through and in case of staccato due to a new note started by BC, the note on velocity is generated according to the derivative of BC (or similar).
DANIELE wrote: Finally I hope TEC and SM do something about this.
Hopefully Audio Modeling will provide a discussion forum. You will need to post the request there.
-Michael
Thank you.
Yes, you had a good idea. I was thinking about the same thing, a way to track note on instead of dynamics or volume level but I need time to think about it. If I have some idea I'll share it here.
If they will provide it I'll post a request there. Where they should provide it?
- we now have a "slider" to select the CC ID for the received "Volume" messages
- we now have a "slider" to select the CC ID all "volume messages are sent out (hence the input messages are translated on the fly)
- I implemented a hysteresis:
. - the Volume reduction is disabled once the "BC limit" is reached
. - the Volume reduction is re-enabled only when once the BC input first gets below half the "BC min" and then gets to the "BC min" again.
Please try it, it kind of works, but I don't think it's really usable.
-Michael
</s><i> </i>desc:BC2Vol author: Michael Schnell (mschnell@bschnell.de) version: 1.0 changelog: initial release donation: United Nations Foundation http://www.unfoundation.org/ about: ## Description ## Limitations // Author: Michael Schnell, based on a work of Time Waster (M. Smith) // License: LGPL - http://www.gnu.org/licenses/lgpl.html // slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Midi Channel slider2:2<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>BC CC ID slider3:7<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>Volume in CC ID slider4:7<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>Volume out CC ID slider5:5<0,32,1>BC min slider6:20<0,32,1>BC limit //** slider15:0<0,127,1>BC in //** slider16:0<0,127,1>VOL in //** slider17:0<0,127,1>VOL out @init vol = 127; bc = 0; f = 1; volout = 1; vold = -1; bcmin = -1; bclim = -1; lock = 0; @slider msg1ID = slider1 + $xB0; bcID = slider2; volInID = slider3; volOutID = slider4; bcmin != slider5 ? ( slider6 < bcmin ? slider6 = bcmin; bcmin = slider5; bcstart = (bcmin-0.5) / 2; bcstart < 0 ? bcstart = 0; bcstart |= 0; r = bclim-bcmin; ); bclim != slider6 ? ( slider6 < bcmin ? slider6 = bcmin; bclim = slider6; r = bclim-bcmin; ); @block while (midirecv(offset, msg1, msg2, msg3)) ( msg1 == msg1ID ? ( // Channel + "CC" msg2 == bcID ? ( bc = msg3; //** slider15 = bc; bc < bcstart ? ( lock > 0 ? ( lock = -1; ) ); bc < bclim ? ( (bc >= bcmin) && (lock < 0) ? ( lock = 0; ); !lock ? ( f = (bc-bcmin) / r; f < 0 ? f = 0; volout = f * vol; volout |=0; volout > vol ? volout = vol; ); ) : ( f = 1; lock = 1; volout = vol; ); vold != volout ? ( vold = volout; midisend(offset, $xB0, volOutID, volout); //** slider17 = volout; ); ) : msg2 == volInID ? ( vol = msg3; //** slider16 = vol; volout = f * vol; volout > 127 ? volout = 127; volout |=0; msg3 = volout; //** slider17 = volout; ); ); msg2 == volInID ? msg2 = volOutID; midisend(offset, msg1, msg2, msg3); ); <e>
Just for fun I did a new version
- we now have a "slider" to select the CC ID for the received "Volume" messages
- we now have a "slider" to select the CC ID all "volume messages are sent out (hence the input messages are translated on the fly)
- I implemented a hysteresis:
. - the Volume reduction is disabled once the "BC limit" is reached
. - the Volume reduction is re-enabled only when once the BC input first gets below half the "BC min" and then gets to the "BC min" again.
Please try it, it kind of works, but I don't think it's really usable.
-Michael
Ok, I made some little test.
I have some glitches when I try to mantain a quiet constant sound. I think this is because of the hysteresis you made.
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
I tried to play with the sliders but I need some more time to test it.
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
All CCs but the ones set by the two "Volume" sliders are just passed through.
The "Volume out" slider can be used to change the CC ID received as "Volume" to another CC number (in case you mapped something else in the SWAM instrument)
If "Volume in" and "Volume out" are set to the same number, also this is passed through unmodified, unless volume is to be reduced due to Breath Control moving.
(Of course you can enable the Debug sliders for visualization when testing.)
-Michael
DANIELE wrote:
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
All CCs but the ones set by the two "Volume" sliders are just passed through.
The "Volume out" slider can be used to change the CC ID received as "Volume" to another CC number (in case you mapped something else in the SWAM instrument)
If "Volume in" and "Volume out" are set to the same number, also this is passed through unmodified, unless volume is to be reduced due to Breath Control moving.
(Of course you can enable the Debug sliders for visualization when testing.)
-Michael
Ok, just as I thought. I need some more test and I'll let you know.
MSchnell wrote:
Just for fun I did a new version
- we now have a "slider" to select the CC ID for the received "Volume" messages
- we now have a "slider" to select the CC ID all "volume messages are sent out (hence the input messages are translated on the fly)
- I implemented a hysteresis:
. - the Volume reduction is disabled once the "BC limit" is reached
. - the Volume reduction is re-enabled only when once the BC input first gets below half the "BC min" and then gets to the "BC min" again.
Please try it, it kind of works, but I don't think it's really usable.
-Michael
Ok, I made some little test.
I have some glitches when I try to mantain a quiet constant sound. I think this is because of the hysteresis you made.
Do I have to use separately CC2 and CC7 this time too? Because from what I understand this sliders are used to avoid the use of two controllers or to CC messages for controlling dynamics.
I tried to play with the sliders but I need some more time to test it.
Sorry for the late reply, I had difficult times.
I quote myself, I confirm that behavior at low constant dynamics. Maybe we have to move away from volume, I don't know if the issue can be solved this way.
Certainly not in a really decent way !
-Michael