TEC BC2 produces abrupt threshold

edited January 2018 in General Questions
I've been a windcontroller player, but in order to play Strings better I got a TEC BC2 to use with a keyboard and it is really wonderful except for a serious problem.



When I want to start a really soft note, there is no sound at all and then an abrupt start, after which the loudness works as expected. Put another way, in case I have not made it clear, you cannot gradually and smoothly increase the loudness from silence, nor can you fade out properly -the note stops before it really goes very, very soft.



I experience this with all SWAM and with Kontakt Samplemodeling instrumements. No combination of settings with the TEC Controller Utility fixes this problem. If I switch BC to control Expression I still experience the same problem.



No such problem has ever existed with my EWI windcontrollers, so clearly it appears to be a TEC BC2 compatibility issue.



I suspected a problem with the TEC BC2, but they suggested that I look at the MIDI output, and when I look at CC2 in Kontakt (you can see the little knob rotate and the values change from 0 -127. It returns to zero when blowing stops, but there is no sound until the value reaches 4 or 6 or sometimes a bit higher (even with the amplifier gain turned up high : )



When I use the TEC BC2 with Aria Engine and GPO, where I have use CC for Volume rather than Breath I do not have an abrupt threshold issue. I also tested some non Samplemodeling instruments in Kontakt, using Volume paramater and that also works as it should.



Have any of you who use TEC BC2 experienced this issue?

If yes, what is the fix?



Thanks,



Dan
«1

Comments

  • edited 8:57PM
    Hi Dan.



    I also use SWAM Flute with the TEC BBC v2. I am also practicing playing Cello with the BBCv2. I use these controller assignments:

    - Breath pressure -> "Expression"

    - Bite -> Bow pressure

    - Key after touch -> Vibrato depth

    - Head tilt left/right -> Vibrato speed slow/fast

    - Head nod l up/down -> Pitch bend up/down

    - Expression wheel: bow position

    - Pitch bend wheel up: Flagolet

    - Hold pedal -> reverse bow direction.



    The great count of controllers allows for a very natural playing feel.

    Seems to work rather nicely for me, but I still need a decent amount of practicing to prevent the Cello from sounding "blown" .



    I in fact see the same problem and it already has been discussed here in the forum several months ago. (-> e.g.: https://forum.samplemodeling.com/viewtopic.php?f=4&t=973&p=4910&hilit=harsh#p4910 , https://forum.samplemodeling.com/viewtopic.php?f=3&t=1006&p=5046&hilit=harsh#p5046 , https://forum.samplemodeling.com/viewtopic.php?f=2&t=30706&p=35695&hilit=harsh+resolution#p35695 )



    In fact I - exactly like you - found that the instruments starts with a rather harsh attack when expression reaches a value of about 7, when very gradually increasing the blowing force.



    With the TEC monitoring tool and with viewing and logging the midi data stream, I verified that there is no problem with the TEC, and Sample Modeling told me that the behavior is by design.



    So I am really astonished to hear that your wind controller does not show that problem. I wonder what it can do other with the sound start than the TEC does.



    In fact it can create a note-on event based on blowing pressure, which the TEC can't.



    That would be really interesting to know because:



    (1) needing a note-on after (instead of before) expression rises to a non-zero value to create a really soft sound start should be considered a bug that Sample Modeling should (and supposedly will) take care of.



    Also velocity might (but IMHO should not) have some influence. I did test velocity variants but did not get a result regarding this issue.



    (2) As I have nice tools for midi programming, I would be able to recreate the expression vs note-on behavior of your wind controller when a keyboard and a breath controller is played.



    Please let me know when you are able to analyze what exactly the wind controller sends to make the SWAM instrument create a really softly starting sound.



    BTW: I suggested as well to Sample Modeling as to TEC to implement high resolution Midi CC. Both say that this is a good idea, but did not start working on it. With high resolution CC (16384 rather than 128 steps), really soft playing could be a lot more accurately supported. (-> https://forum.samplemodeling.com/viewtopic.php?f=4&t=25870&p=30883&hilit=resolution#p30883 )



    -Michael
  • edited 8:57PM
    Michael,



    Thanks for your fast reply which immediately confirmed that my experience is not unique, due in some mysterious way to my setup.



    I'm amazed no one else has brought up this matter. On the other hand, too many musicians, pay far too little attention to dynamics, and the importance of the need to vary it. Perhaps some think that the louder you play the better it will sound, which may only be true if there is a lot of noise...



    I was hoping that there is some SWAM engine or Kontakt engine parameter that I need to set correctly.

    You know a lot more about MIDI parameters than I do so maybe Note On is at the heart of the matter, as you appear to be thinking. I'm afraid that although I have heard the term, I know nothing about it.



    Is there a setting for it hidden away somewhere ?



    Thanks,



    Dan



    PS I searched for TEC BC2 and just TEC but could not find your prior posts
  • edited 8:57PM
    Dan,



    To make a sound, the SM instruments (as well SWAM as Kontakt) need to get a "Note-On" event defining the note to be played and at least one "Expression" event defining the "sound power". When using the TEC and a keyboard, these events are independent .



    "Expression" is sent by the TEC (a new event any time your blowing pressure changes, transferring a number for the "power" (0 = no blowing ... 127 = very hard blowing) ). A "Note-On" events is sent by the keyboard at time you press a key. It also sends a "Note-Off" event when you release the key, which makes the instrument stop the sound, even when you continue blowing.



    When using the EWI, these events are not independent, but the EWI decides when to send a "Note-On" and "Note-Off" event. Obviously, when you continue blowing and change the fingering, the EWI will send a Note-Off for the old note and a Note-On for the new one (exactly like a keyboard when you first release a key and then press another one). But when you increase the blowing power up from Zero, the EWI will send "Note-On" (defining the note to be played) only after it detects that you are blowing at all.



    So the sequence of events seen by the instrument software is different when you "normally" play the would-be same "performance" using an EWI or a TEC/keyboard combination.



    To make things even more complicated, each Note-On comes with the definition of the "velocity" the key is pressed. With a keyboard, the meaning of this is obvious, but it's opaque how the EWI decides which velocity value it sends with any Note-On.



    I did already try tweaking the parameters for the SWAM Flute without any success regarding this issue. I don't have an SM Kontakt instrument, so I can't comment on that.



    I do have a Wind controller (a 30 yeras old Yamaha WX7) but same is rather worn out (the blow pressure sensor "Zero"-control is very unstable) and that is why I did not yet test if using same results in the said "attack" problem.



    If you really feel, that your SWAM instruments don't show the problem when used with the EWI, please lets try to find out how this can be. Maybe you can record a Midi file that I can play back and analyze.



    At best, you would record Midi files of a small would-be similar performance one done with the EWI and one done with the TEC, so that Sample Modeling and I can find the difference.



    (P.S.: The links I gave in the other post should point you to the previous discussions in the forum.)



    -Michael
  • edited 8:57PM
    Hi folks,



    I was pretty sure that we have already explained how things works.

    It is pretty simple.



    When the "Expr. Trigger Mode" is active (Normal or Fast) - and it is for the Default Breath Controller Preset - the instrument can perform NOTE RETRIGGER based on the input breath pressure.



    NOTE RETRIGGER means that a "virtual" note-on is triggered by the breath rising from zero while a note is still pressed on the keyboard.

    There is no other way to trigger a "virtual" note-on, with proper note-on velocity associated, than measuring the derivative of the rising breath pressure. This means that:

    1- we need a threshold to be sure that the new attack is deliberately performed

    2- we need to measure the derivative to understand what velocity to apply for the attack generation: it takes some millisecond to check the rising breath BEFORE the note-on is triggered



    If you switch-off the "Expr. Trigger Mode"​ (as in the Default Wind Controller preset), the sound does not stop until a note-off is received, even if the breath is zero: you hear just a very subtle tune.

    This does not happen for Wind Controllers, since the note-off is produced by the device itself. The device takes care to measure the breath, but it is made with much more resolution directly on the electrical signal taken from the sensor.



    The solution for SWAM is simple: just map the Main Volume CC to the same CC as the Expression (i.e. CC2 for Breath Controller, usually).

    Then you can act on the Expression Curve or to the Breath Controller sensitivity curve to compensate the different dynamic curve.



    Best,

    Emanuele

    Audio Modeling
  • edited 8:57PM
    Hi Emanuele, thanks for listening !



    From our previous discussions, I did already know most of what you point out here nice and clear.



    But I fail to see (and I never did such test) how (like Dan states) the issue is not triggered when using a Wind controller instead of a Breath controller.



    I understand that the "Wind Controller" and "Breath Controller" presets are just that: Presents, and after selecting either of them, all parameters of the SWAM software can be tweaked to any value. I don't know whether Dan changed to the other Preset (or a preset based on same) when switching from Wind Controller to Breath controller. If yes he (like myself) might have failed to find the parameter that triggers the said behavior (no soft starting sound possible) - supposedly to provide a benefit regarding some other aspects of Breath Controller usage.





    Technical detail:

    I do understand that a threshold (say CC val = 7) is needed to detect the "virtual note on" as you need to detect the "expression" derivative from several previous CC events. Now that derivative should determine the softness/explosiveness of the attack.



    But when very gently increasing the expression value, the derivative should be very low and hence when CC val = 7 is reached a very soft starting sound is supposed to be generated.



    The detection of the derivative is (at least in the case of no note running since some time before) completely independent of any Midi note-on events.



    So if (with a Breath controller) the note on is issued way before the CC val gets greater than Zero, the "virtual note on" (at CC val = 7) should start the sound appropriately.



    Maybe a wind controller issues a note on together with the CC val jumping from 0 to 1, and this influences th way the derivative is calculated (now correct) ? --- Hmmm --- I suppose even with a wind controller SWAM will do flap-noises with no blowing (expression CC = 0). So the Wind controller seems to issue note-on events at that time...



    I will do some more tests.



    Thanks again,

    -Michael
  • edited 8:57PM
    Michael, you are not considering these main things:

    1) SWAM receives MIDI values. MIDI values are very limited, 127: the derivative is calculated on the first 7 steps.

    2) The Wind Controller generates the Note-on / Note-off itself. It measures an electrical signal that has maybe 65535 resolution points. It can compute the derivative on the first 100 points, which converted to MIDI means that the threshold is less than 1 (in MIDI values).

    3) The Breath controller is an independent controller from your keyboard and it cannot generate the note-on/note-off itself. From the plugin's point of view, which receives both the keyboard events and the breath controller events, it can get a note-on when you are not breathing and it can get a note-off when you are still breathing. This is impossible with the Wind Controller, because the note-on / note-off are triggered by the device itself when you start and stop breathing.


    So if (with a Breath controller) the note on is issued way before the CC val gets greater than Zero, the "virtual note on" (at CC val = 7) should start the sound appropriately.

    This is exactly what we avoided to do: if you use the note-on velocity of the real note-on issued before the breath rising, you will always have the same identical attack for every next "virtual note on" triggered by the breath. Think of a fast repetition of the same note made with fast tonguing technique.



    That said. Does the trick of mapping the Main Volume has been useful?



    Best,

    Emanuele
  • edited 8:57PM
    leleswam wrote: 1) SWAM receives MIDI values. MIDI values are very limited, 127: the derivative is calculated on the first 7 steps.
    This is exactly what I supposed.


    leleswam wrote: 2) The Wind Controller generates the Note-on / Note-off itself. It measures an electrical signal that has maybe 65535 resolution points. It can compute the derivative on the first 100 points, which converted to MIDI means that the threshold is less than 1 (in MIDI values). Yep.

    But I don't think it makes a big difference to have the threshold at CC= 1 instead of CC=7. We would just loose 7 of the 127 values for the resolution from ppp to fff.



    Do you suggest that in wind controller mode note-on velocity is used to define the sound attack and in fact the EWI sends note-on velocity derived from the blowing attack. (how else could it make use of the derivative ? ) Obviously this is something that I myself can't check, so this is new to me.



    So I don't see what this could mean in this context. SWAM could (be configured to) start the sound at expression CC = 7 (i.e. do a virtual note on at that point, of course only if a midi note-on has been received before) and nonetheless use the derivative taken while receiving expression CC = 1...7 (independent of a midi note-on) ) to determine the sound attack.


    leleswam wrote: 3) The Breath controller is an independent controller from your keyboard and it cannot generate the note-on/note-off itself. From the plugin's point of view, which receives both the keyboard events and the breath controller events, it can get a note-on when you are not breathing and it can get a note-off when you are still breathing. This is impossible with the Wind Controller, because the note-on / note-off are triggered by the device itself when you start and stop breathing.
    Yep the Breath controller can do things a Wind controller can't. But that does not mean that SAWM would (and should) not be able to ignore ore re-interprete this additional possibility.


    leleswam wrote: So if (with a Breath controller) the note on is issued way before the CC val gets greater than Zero, the "virtual note on" (at CC val = 7) should start the sound appropriately.
    This is exactly what we avoided to do: if you use the note-on velocity of the real note-on issued before the breath rising, you will always have the same identical attack for every next "virtual note on" triggered by the breath. Think of a fast repetition of the same note made with fast tonguing technique.
    I did not say note-on velocity should be used (why do you think I did ? ). In fact SWAM is very cleverly using note-on velocity for controlling the portamento speed. A really nifty feature !!!



    My point is (see another explanation above) that the just detected expression derivative (not the note on velocity) could be used when CC=7 triggers the virtual note on.


    leleswam wrote: That said. Does the trick of mapping the Main Volume has been useful? In fact I don't think that this is a good idea, as the sound "attack" is much more than just a matter of volume.



    In fact I would be able to do midi programming to mimic the behavior of a wind controller from the data received by the keyboard and the Breath controller, if I in fact would know how a Wind controller really works.



    E.g. (it that is what might solve the problem) I could use CC 1..7 to detect a derivative of the expression, output a note on at CC=7 with velocity according to the derivative just detected (ignoring the velocity received from the keyboard before). It's sad that I would loose the keyboard velocity (defining the portamento speed), which is a definitive plus of using a decent keyboard instead of the wind controller fingerboard (especially with a SWAM String instrument, and this is why Dan started this thread), but the "derivative" velocity might work just as well, even if loosing some flexibility.



    But nonetheless it would be better to be able to configure SWAM to do this than to need an additional midi preprocessor.



    -Michael



    BTW.: I suppose we lost Dan with this sophisticated tech-talk, but I would be very happy if I could help to improve the SWAM usability for Dan and for myself.
  • edited 8:57PM
    BTW.:

    AFAIK, (other than my old WX7) EWI uses capacitive sensors rather than mechanical switches for fingering, so technically, it could detect the finger movement speed. Hence it would be able to send this information to SWAM and have same be used for portamento speed control.



    So in the EWI there are two candidates as source for the Note-On velocity: derivative of breath pressure before a threshold is reached that actually generates the Note-On, and finger speed when a finger movement generates a note-transition and hence a Note-Off/Note-On sequence. Actually it would be most sensible to use note-off velocity for Finger-speed (while Note-On is Breath pressure derivative), but I have no Idea if such (rather unusual) Midi events are generated by EWI (and interpreted by SWAM). Maybe EWI even uses some CC and/or is configurable on that behalf.



    BTW/2: obviously high resolution Midi CC for expression (needing updates as well for the BBC as for SWAM) would be very beneficial with the derivative detection before reaching a breath pressure threshold.



    (I sent a note to Tom from TEC to notify him about this issue, as I think it would be great it TEC and Sample Modeling could work together to create an optimum user experience.)



    -Michael
  • edited 8:57PM
    Dear Michael & Lele,



    I'm indebted to your replies to my posts and I'm delighted to report that my Crescendo/Diminuendo Problem with the TEC BC2 is solved for the Strings by setting:



    1- Main Volume to CC2 (found on the SWAM Main MIDI Settings Option page),



    and adjusting the



    2 -TEC BC2 Breath Curve (Red Curve -1st Tab on Left) to a slight S shape,



    and playing with the



    3 - Expression Curve (SWAM Options [Advanced Parameter Options page). For now I like the slider all the way on the Right = Exp 1



    Now I can get a note to start really soft without an obvious sudden onset, and I can fade a note out to near silence. I can state that with my current settings in Steps 2 and 3, it is about 98% to my satisfaction, which is certainly good enough for me.



    At first I had no idea where to find the Main Volume, or how to adjust 2 TEC BC curse to get the threshold adjusted, until I realized that the Expression Curve, that Lele talked about was the SWAM Advanced Parameter Expression Curve (I was too fixated on a graphic curve shape adjustment that the TEC software offers.



    I'm pretty sure that now I understand the instructions since now it makes sense & it has solved the problem.



    As I said, and Michael noted, my reason for using TEC BC2 in the first place was to get a better STRING sound than I was able to produce with the EWI-4000s windcontroller. I suppose the same or similar adjustments should work for SWAM Wind instruments and for the Kontakt Brasses, but I have not had a chance to test yet.



    Thanks Tons !,



    Dan :D
  • edited 8:57PM
    In addition to e-mailing a link to this thread to TEC, I also requested/suggested some improvements to their TEC BC Control Software:



    "The TEC control Software window is too small, so you provide the TAB "slider". It's frustrating to not be able to see ALL of the TABS at once, and it seems to me that if the WINDOW could be made larger (wider) we could see all of the TABs at once. The Window is substantially smaller than my 1920 x 1080 display screen, so there is plenty of room for WINDOW size expansion.



    The second suggestions, assuming it makes sense to you, would be to program an additional CURVE setting tool (in addition to Bend, Symmetry etc) for shifting any curve along the horizontal axis.

    This would allow the Shape to remain constant while changing the sensitivity uniformly. I hope I explained this clearly. I don't know if this would be a lot of work or possibly not too much."





    Let me know if this makes sense to anyone else who uses the TEC BC.



    Thanks,



    Dan
  • edited 8:57PM
    Hi Dan, while I am happy to see you "satisfied 98 %", I am not really happy with the workaround with just decreasing volume for very soft sound instead of really using the physical model to actually generate a soft waveform (which is obviously able to do so, as with a Wind Controller it works like expected).



    But even if using that workaround I in my installation could improve it by a midi preprocessor that issues volume CC values accordingly. By that, the expression curve would stay like it is (as Volume stays like it is for higher expression values), and I would not loose the possibility to control volume by a foot controller, as I do right now when live playing. (Technically the plugin would reduce the volume CC (it receives from the foot controller) when expression is lower than some 20 reaching 0 when expression is 7 - or similar. )



    Nonetheless I will look into doing a plugin that actually manages Expression CC and Note on/off events once I find out how the Wind Controller actually works (does it manage Note-On and/or Note-Off velocity ? ) .



    Moreover I also did write to TEC suggesting two improvements, either or both could help to find a perfect integration of SWAM and the BBC.



    1) Use high resolution CC so that much more expression values are sent to SWAM, enabling it to manage the physical model a lot more exact.



    2) Provide the derivative of the Breath value as an additional CC stream. This would allow the virtual instrument to see the very exact performance of the player when the note is supposed to start (or fade). (Technically the derivative is even considerably high when the expression value itself is very low.)



    With either improvement either the SWAM engine could make use of same or I could do a plugin that constructs the Wind controller behavior very exactly.



    -Michael
  • edited 8:57PM
    Dan, I'm happy that the workaround worked for your needs.



    Best,

    Lele

    Audio Modeling


    dstong wrote:
    Dear Michael & Lele,



    I'm indebted to your replies to my posts and I'm delighted to report that my Crescendo/Diminuendo Problem with the TEC BC2 is solved for the Strings by setting:



    1- Main Volume to CC2 (found on the SWAM Main MIDI Settings Option page),



    and adjusting the



    2 -TEC BC2 Breath Curve (Red Curve -1st Tab on Left) to a slight S shape,



    and playing with the



    3 - Expression Curve (SWAM Options [Advanced Parameter Options page). For now I like the slider all the way on the Right = Exp 1



    Now I can get a note to start really soft without an obvious sudden onset, and I can fade a note out to near silence. I can state that with my current settings in Steps 2 and 3, it is about 98% to my satisfaction, which is certainly good enough for me.



    At first I had no idea where to find the Main Volume, or how to adjust 2 TEC BC curse to get the threshold adjusted, until I realized that the Expression Curve, that Lele talked about was the SWAM Advanced Parameter Expression Curve (I was too fixated on a graphic curve shape adjustment that the TEC software offers.



    I'm pretty sure that now I understand the instructions since now it makes sense & it has solved the problem.



    As I said, and Michael noted, my reason for using TEC BC2 in the first place was to get a better STRING sound than I was able to produce with the EWI-4000s windcontroller. I suppose the same or similar adjustments should work for SWAM Wind instruments and for the Kontakt Brasses, but I have not had a chance to test yet.



    Thanks Tons !,



    Dan :D
  • edited 8:57PM
    Michael,


    MSchnell wrote:
    I did not say note-on velocity should be used (why do you think I did ? ). In fact SWAM is very cleverly using note-on velocity for controlling the portamento speed. A really nifty feature !!!



    My point is (see another explanation above) that the just detected expression derivative (not the note on velocity) could be used when CC=7 triggers the virtual note on.


    Do not confuse Note-on Velocity during LEGATO and Note-on Velocity for the ATTACKS (i.e. STACCATO).

    During LEGATO we do not consider the pressure derivative at all for attack building, as we do not need to build an attack.

    As for the attacks, of course the derivative computation has theoretically nothing to do with Note-on velocity, BUT in the SWAM model the attack strength is controlled by the Note-on Velocity, SO we just adapt the measurement of the derivative to the Velocity range.


    MSchnell wrote:
    My point is (see another explanation above) that the just detected expression derivative (not the note on velocity) could be used when CC=7 triggers the virtual note on.


    This is exactly what we do. But, as you know for sure, Note-on events come with a "beautiful" Velocity information associated. So, internally we just create an Note-on event and set its velocity value to the (adapted) value of the derivative. That's it.




    MSchnell wrote:
    Moreover I also did write to TEC suggesting two improvements, either or both could help to find a perfect integration of SWAM and the BBC.



    1) Use high resolution CC so that much more expression values are sent to SWAM, enabling it to manage the physical model a lot more exact.



    2) Provide the derivative of the Breath value as an additional CC stream. This would allow the virtual instrument to see the very exact performance of the player when the note is supposed to start (or fade). (Technically the derivative is even considerably high when the expression value itself is very low.)



    With either improvement either the SWAM engine could make use of same or I could do a plugin that constructs the Wind controller behavior very exactly.



    -Michael




    Hi-res MIDI is in our plans and it will be released in a future update soon.



    As for providing a separate stream for the derivative: it's a good idea, but it also needs extra-effort for both TEC and Audio Modeling to implement it. Also we (TEC and Audio Modeling) would agree on what the values sent by the Breath Controller really mean.

    In the SWAM processor we have full control on the computation, adaptation and "shape" of the derivative, but if this measurement is provided by an external MIDI stream, we really need a re-design of the interaction between the breath derivative and our models.




    MSchnell wrote:
    BTW.:

    AFAIK, (other than my old WX7) EWI uses capacitive sensors rather than mechanical switches for fingering, so technically, it could detect the finger movement speed. Hence it would be able to send this information to SWAM and have same be used for portamento speed control.



    So in the EWI there are two candidates as source for the Note-On velocity: derivative of breath pressure before a threshold is reached that actually generates the Note-On, and finger speed when a finger movement generates a note-transition and hence a Note-Off/Note-On sequence. Actually it would be most sensible to use note-off velocity for Finger-speed (while Note-On is Breath pressure derivative), but I have no Idea if such (rather unusual) Midi events are generated by EWI (and interpreted by SWAM). Maybe EWI even uses some CC and/or is configurable on that behalf.




    I don't think this is a good idea: on the EWI (as on the real instruments) notes are performed as a combination of keys. What speed do you take? The average of the various fingers? Or the latest?



    Also, you can touch the keys long time before breathing. So, is it that finger speed still "valid" for the note that you are going to perform?



    And... how do you manage the octave shift? They are performed shifting the thumb on the octave rollers, without moving any finger on the keys.



    Best,

    Lele

    Audio Modeling
  • edited 8:57PM
    Thanks for further explanations.



    In fact I don't intend to design a Wind Controller. I am just trying to find out how it (a good one, supposedly such as the EWI) works, mainly if and how it uses Note-On and/or Note-off velocity to provide relevant information to the sound engine. Maybe there is a paper somewhere describing it ...



    -Michael
  • edited 8:57PM
    Dear Lele,



    As I reported assigning Main Volume to CC2 fixes the problem of starting and ending a note very close to silence for Strings, so I'm very happy. So many Thanks for solving that problem so fast.



    I was hoping to find a similar parameter for SWAM instruments other than Strings, but I didn't see Main Volume, or anything like it. For these instruments I can get fairly close to an acceptable loudness level, unlike for the Strings where the abrupt onset/offset cutoff point was much larger, but it still could use some improvement.



    Since I decided to get the TEC BC2 primarily for the SWAM Strings, it is not a major issue for me that I can't get the really soft beginning and ending for notes with SWAM Wind instruments, I can certainly use the EWI for playing those instruments, but I would be surprised if none of the keyboard + TEC BC players were interested in finding a solution.



    Is there a quick fix for these instruments ?



    I have not had time to look for something similar to Main Volume parameter fix for the Kontakt Brass instruments, so if there is a solution for that I would be grateful.





    Thanks,



    Dan
  • edited 8:57PM
    Dear Michael,



    I'm sorry to hear that the specific Main Volume CC2 assignment which fixes the issue for Strings, doesn't clear up things to your satisfaction.



    Of course everyone who uses Samplemodeling Virtual Instruments (SmVI) as well as most MIDI users are eagerly awaiting Hi Res MID, but it is unlikely to appear overnight, in spite of your wish and mine. It will longer than we wish because I have no doubt it requires a tremendous amount of work (both programming and possibly some hardware re-design and implementation), because it has to be an Industry Wide implementation. I know you know all this but I'm hoping others will read this who are not as well informed about MIDI as you are.



    However, hopefully anyone who cares strongly about this may reduce the inertia for implementation by showing that there is strong demand for implementing Hi Res MIDI.



    Here is what I'm thinking (perhaps it's a naive idea):



    Perhaps you and everyone else may be willing to put together a list of Heads of Companies that are crucial to adopting this new MIDI standard for hardware (Yamaha, Akai, Roland etc. ) and software. Then we try to get as many people as possible to send individual letters to these people. Posting such a campaign on all of the most popular forums all over the web, we would hope elicit a lot of encouraging letters. Perhaps we could also create some Polls on these forums asking about the most wanted improvements which include Hi Res MIDI.



    As in the TV hardware industry, manufacturers are always looking for ways to encourage more purchasing by bringing newer hardware to the market -think HDTV to 4KTV and beyond. It's a way to get users to buy new improved products : )



    Thanks,



    Dan
  • edited September 2017
    dstong wrote: Is there a quick fix for these instruments ? I will try to get something going in the weekend. But this will be a Midi filter done as a JSFX pluging, and hence only run in Reaper.



    -Michael
  • edited 8:57PM
    dstong wrote: I have no doubt it requires a tremendous amount of work (both programming and possibly some hardware re-design and implementation), because it has to be an Industry Wide implementation.
    Happily the situation is not that bad.

    The high resolution Midi standard is very simple and it is well defined since years (e.g. by the companies you name) and already is available with a decent count of software and hardware product. E.G. Reaper does support it. (OK a DAW does not need much on that behalf as it only in rare cases in fact interprets the Midi data it transports, but e.g. the Midi Log display in Reaper does show high resolution stuff.)



    Moreover, High Resolution Midi is full fully compatible with normal Midi CC messages. It's just a second message that is sent to define the fine differences. If the receiver does not support high resolution it will simply automatically ignore that message. If the sender does not provide high resolution but the receiver can, the receiver for such senders simply automatically will just do coarse steps as appropriate.



    Of course the instrument (such as SWAM) will need to tweak the Model even more sophisticatedly to make a good use of high resolution program, and a (Breath) controller will need to be more carefully crafted so that the higher resolution does not create more Noise / Nonsense than usable information.



    In fact besides the "high resolution CC" (for transferring continuous parameters), there also is a standard for high resolution Note-On velocity which is very appropriate for high quality keyboards and Keyboards sound engines.



    I just bought a Kawai VPC1 keyboard, that features 88 nearly "traditional" wooden Kawai Grand Piano keys and hammers (including "let-off" feeling which is helpful to playing more precise when playing very soft ). This device provides a fantastic feeling, indeed, but unfortunately it does not feature sending high resolution velocity, even though the sensors do provide a lot more than 128 steps (which can be concluded from the velocity curves that can be set) :( . Moreover the Keyboard instruments I use are based on Kontakt, and the Kontakt engine does not (yet) support high resolution Midi.



    -Michael
  • edited 8:57PM
    In the docs for The Trumpet I found the statement that "Note On Velocity output by Wind Controllers generally reflects the current CC2 value".



    Regarding our recent discussion this is either an erroneous statement or silly engineering. In fact Note On velocity should reflect the derivative of the Breath pressure even when CC2 is very small.



    -Michael
  • edited 8:57PM
    leleswam wrote:
    Hi folks,



    I was pretty sure that we have already explained how things works.

    It is pretty simple.



    When the "Expr. Trigger Mode" is active (Normal or Fast) - and it is for the Default Breath Controller Preset - the instrument can perform NOTE RETRIGGER based on the input breath pressure.



    NOTE RETRIGGER means that a "virtual" note-on is triggered by the breath rising from zero while a note is still pressed on the keyboard.

    There is no other way to trigger a "virtual" note-on, with proper note-on velocity associated, than measuring the derivative of the rising breath pressure. This means that:

    1- we need a threshold to be sure that the new attack is deliberately performed

    2- we need to measure the derivative to understand what velocity to apply for the attack generation: it takes some millisecond to check the rising breath BEFORE the note-on is triggered



    If you switch-off the "Expr. Trigger Mode"​ (as in the Default Wind Controller preset), the sound does not stop until a note-off is received, even if the breath is zero: you hear just a very subtle tune.

    This does not happen for Wind Controllers, since the note-off is produced by the device itself. The device takes care to measure the breath, but it is made with much more resolution directly on the electrical signal taken from the sensor.



    The solution for SWAM is simple: just map the Main Volume CC to the same CC as the Expression (i.e. CC2 for Breath Controller, usually).

    Then you can act on the Expression Curve or to the Breath Controller sensitivity curve to compensate the different dynamic curve.



    Best,

    Emanuele

    Audio Modeling


    Hi all, I'm an happy SWAM libraries owner. I noticed too this problem with very quiet crescendos. Unfortunately for me the linking volume and dynamic (CC2) solution doesn't work so good to achieve realism, infact I have no problems when I want a slow crescendo but I completely loose the release of the instrument when I stop breathing in my TEC controller, because the volume turns completely down as expected.



    So, do you thinking about an instrument side solution or do we have to find it ourself? :)



    Thank you.



    PS I love those instruments, I never played something like this.
  • edited 8:57PM
    MSchnell wrote:
    dstong wrote: Is there a quick fix for these instruments ? I will try to get something going in the weekend. But this will be a Midi filter done as a JSFX pluging, and hence only run in Reaper.



    -Michael


    I'm a Reaper user. Do you find a way to write this JSFX plugin? I'd like to test it.



    Thank you.
  • edited 8:57PM
    I forgot to do so.

    I'll try to do it tonight....

    -Michael
  • edited 8:57PM
    MSchnell wrote:
    I forgot to do so.

    I'll try to do it tonight....

    -Michael


    Thank you Michael, take your time (I do not ask you to stay awake at night :mrgreen: ) and let me know.
  • edited 8:57PM
    Here a first version for testing



    BC min = start with vol = 0, set to e.g 5

    BC limit = volume normal as of here, set greater than BCmin.



    Other sliders are just for watching.



    Currently fixed to Midi channel 1.



    -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:5&lt;0,32,1&gt;BC min slider2:20&lt;0,32,1&gt;BC limit slider3:0&lt;0,127,1&gt;BC in slider4:0&lt;0,127,1&gt;VOL in slider5:0&lt;0,127,1&gt;VOL out @init vol = 0; bc = 0; f = 1; x = 1; xx = -1; //@slider @block while (midirecv(offset, msg1, msg2, msg3)) ( status = msg1 & $xF0; // Extract message type status == $xB0 ? ( // CC msg2 == 2 ? ( // BC slider3 = bc = msg3; (bc &gt; 0) && (bc &lt; slider1) ? ( msg3 = slider1; ); bc &lt; slider2 ? ( f = (bc-slider1) / (slider2-slider1); f &lt; 0 ? f = 0; x = f * vol; x |=0; x &gt; vol ? x = vol; ) : ( f = 1; x = vol; ); xx != x ? ( xx = x; slider5 = x; midisend(offset, $xB0, 7, x); ); ) : msg2 == 7 ? ( // Vol slider4 = vol = msg3; x = f * vol; x &gt; 127 ? x = 127; x |=0; slider5 = x; msg3 = x; ); ); midisend(offset, msg1, msg2, msg3); ); <e>
  • edited 8:57PM
    Great, thank you, I'll test it out after work and let you know.
  • edited 8:57PM
    Early this morning I did a slightly more "professional" Varant.

    - Code clean up

    - selectable Midi Channel

    - selectable CC Number for "Breat controller"

    - deactivated Debug sliders

    -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&lt;0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&gt;Midi Channel slider2:2&lt;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}&gt;BC CC slider3:5&lt;0,32,1&gt;BC min slider4:20&lt;0,32,1&gt;BC limit //** slider5:0&lt;0,127,1&gt;BC in //** slider6:0&lt;0,127,1&gt;VOL in //** slider7:0&lt;0,127,1&gt;VOL out @init vol = 0; bc = 0; f = 1; volout = 1; vold = -1; bcmin = -1; bclim = -1; @slider msg1ID = slider1 + $xB0; bcID = slider2; bcmin != slider3 ? ( bcmin = slider3; r = bclim-bcmin; ); bclim != slider4 ? ( bclim = slider4; r = bclim-bcmin; ); @block while (midirecv(offset, msg1, msg2, msg3)) ( msg1 == msg1ID ? ( // Channe / BC msg2 == bcID ? ( bc = msg3; //** slider5 = bc; (bc &gt; 0) && (bc &lt; bcmin) ? ( msg3 = bcmin; ); bc &lt; bclim ? ( f = (bc-bcmin) / r; f &lt; 0 ? f = 0; volout = f * vol; volout |=0; volout &gt; vol ? volout = vol; ) : ( f = 1; volout = vol; ); vold != volout ? ( vold = volout; midisend(offset, $xB0, 7, volout); //** slider7 = volout; ); ) : msg2 == 7 ? ( // Vol vol = msg3; //** slider6 = vol; volout = f * vol; volout &gt; 127 ? volout = 127; volout |=0; msg3 = volout; //** slider7 = volout; ); ); midisend(offset, msg1, msg2, msg3); ); <e>
  • edited 8:57PM
    MSchnell wrote:
    Early this morning I did a slightly more "professional" Varant.

    - Code clean up

    - selectable Midi Channel

    - selectable CC Number for "Breat controller"

    - deactivated Debug sliders

    -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&lt;0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&gt;Midi Channel slider2:2&lt;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}&gt;BC CC slider3:5&lt;0,32,1&gt;BC min slider4:20&lt;0,32,1&gt;BC limit //** slider5:0&lt;0,127,1&gt;BC in //** slider6:0&lt;0,127,1&gt;VOL in //** slider7:0&lt;0,127,1&gt;VOL out @init vol = 0; bc = 0; f = 1; volout = 1; vold = -1; bcmin = -1; bclim = -1; @slider msg1ID = slider1 + $xB0; bcID = slider2; bcmin != slider3 ? ( bcmin = slider3; r = bclim-bcmin; ); bclim != slider4 ? ( bclim = slider4; r = bclim-bcmin; ); @block while (midirecv(offset, msg1, msg2, msg3)) ( msg1 == msg1ID ? ( // Channe / BC msg2 == bcID ? ( bc = msg3; //** slider5 = bc; (bc &gt; 0) && (bc &lt; bcmin) ? ( msg3 = bcmin; ); bc &lt; bclim ? ( f = (bc-bcmin) / r; f &lt; 0 ? f = 0; volout = f * vol; volout |=0; volout &gt; vol ? volout = vol; ) : ( f = 1; volout = vol; ); vold != volout ? ( vold = volout; midisend(offset, $xB0, 7, volout); //** slider7 = volout; ); ) : msg2 == 7 ? ( // Vol vol = msg3; //** slider6 = vol; volout = f * vol; volout &gt; 127 ? volout = 127; volout |=0; msg3 = volout; //** slider7 = volout; ); ); midisend(offset, msg1, msg2, msg3); ); <e>


    Ok, I tested it. Unfortunately I don't know this language so well and actually I don't have time to learn it (I'm practical in programming) but I think I understand how it works.



    I linked volume and dynamic (with CC2), infact if I don't do this I doesn't heard benefits by using this JS.



    So you give the volume a time offset to give it time to release to be heard. Anyway I have to set the min volume very high to achieve this.



    But doing this cause the attack to be worse than before.



    If I use 5 every time I stop blowing in my controller I loose the release as before.



    Maybe I did wrong, in this case tell me what I should do to use correctly your script. ;)



    Thank you for your time. :)
  • edited 8:57PM
    This is a Midi "Filter". In Reaper any plugin is a Filter by default (even though you can activate other settings if required).



    With this Filter, you run all Midi messages to the Flute through the plugin by placing it above the Flutes plugin.



    This filter will pass through all Midi messages unchanged, but the volume is modified according to a very simple algorithm.



    First you need to set the midi channel and the CC Id you want to use as "BC". (By default this is "1" and "2".)



    All Midi messages that are not on that channel are just passed though.



    The plugin reads the BC and the Volume input, and modifies Volume (CC 7):

    a) if BC is below BC min (set in the slider) Volume is set to 0

    b) if BC is above BC limit (set in the slider) Volume not modified

    c) if BC is between BC min and BC limit volume is set to the appropriate interpolation between (a) and (b).



    The Flute will do it's attack when BC gets up to approximately 5.



    I got good results with setting BC min to 5 and BC limit to something between 20 and 32.



    If you want to "see" what happens, you can delete the //** string in the code wherever it is found. this will activate three additional sliders showing the thing at work.



    I just did some testing:



    I think the glitch that you found is that the pluigin needs at least once see a Volume message as a reference point. If you never move a volume pedal or fader, it does not work. (Supposedly vol needs to be set to 127 instead of 0 in the @init section.)



    It's rather ugly that the reverb is turned down with the volume. When using this plugin you can't use the internal reverb of Swam.



    -Michael
  • edited 8:57PM
    MSchnell wrote:
    This is a Midi "Filter". In Reaper any plugin is a Filter by default (even though you can activate other settings if required).



    With this Filter, you run all Midi messages to the Flute through the plugin by placing it above the Flutes plugin.



    This filter will pass through all Midi messages unchanged, but the volume is modified according to a very simple algorithm.



    First you need to set the midi channel and the CC Id you want to use as "BC". (By default this is "1" and "2".)



    All Midi messages that are not on that channel are just passed though.



    The plugin reads the BC and the Volume input, and modifies Volume (CC 7):

    a) if BC is below BC min (set in the slider) Volume is set to 0

    b) if BC is above BC limit (set in the slider) Volume not modified

    c) if BC is between BC min and BC limit volume is set to the appropriate interpolation between (a) and (b).



    The Flute will do it's attack when BC gets up to approximately 5.



    I got good results with setting BC min to 5 and BC limit to something between 20 and 32.



    If you want to "see" what happens, you can delete the //** string in the code wherever it is found. this will activate three additional sliders showing the thing at work.



    -Michael


    Yes I know where to put the FX, I've already used other JSFXs.



    OK now I understand better what the algorithm does and I have enabled the other sliders to see better how it works.



    In the TEC software I have Midi Channel on 1 and the CC on 2.



    I loaded a cello (for example) with the default breath controller preset without modifying anything else.



    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.
  • edited 8:57PM
    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

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.