GrandOrgue / OdfEdit

A tool for GrandOrgue ODF edition, and Hauptwerk to GrandOrgue ODF conversion.
GNU General Public License v3.0
9 stars 1 forks source link

Wave tremulant samples are not handled correctly #33

Closed larspalo closed 1 year ago

larspalo commented 1 year ago

In GrandOrgue, the wave tremulant files should normally not be placed in a rank of their own. They "should" be added into the rank which is the normal un-tremmed version of the pipes, as (additional) attacks with Pipe999Attack999IsTremulant=1 (whereas the un-tremmed version should normally be specified as Pipe999IsTremulant=0, as should any other additional attacks that's not tremmed - but then Pipe999Attack999IsTremulant=0).

Why this can be considered important is because, when done "the right way", GO will fade between the tremmed and un-tremmed attack samples correctly. With the current implementation in OdfEdit there's a whole new attack happening in the transitions of (wave) trem on/off or change from wave to synth.

Another more puristic reason why two separate ranks is "wrong approach" was discussed at length in https://github.com/GrandOrgue/grandorgue/discussions/878.

I attach a small example demonstrating (one way of) how it can be done.

DoubleTrems.zip

eturpault commented 1 year ago

I made the choice to have a dedicated rank for the wave tremulant samples to make the conversion HW to GO easier, and considering that an organist will never, or quite never, enable/disable a tremulant while playing pipes. But I agree that one day I should try to handle it as you describe, it would be better.

I have a question : The sample sets of Sonus Paradisi have often an artificial tremulant and a wave based tremulant, the user can decide in a settings panel which one he wants to use, then another switch in the jamp panels permit to enable or disable the tremulant. This is currently managed well by OdfEdit with the current implementation. If OdfEdit places the tremmed pipes in the same rank as the non tremmed pipes, how to apply a synthetized tremulant or a wave tremulant depending on the user's choice ? Is it by having two tremulant sections in the WindchestGroup, one with synthetized type, one with wave based type, and if the user enables the tremulant only one of the two tremulants is enabled depenting on the tremulant type selection ? Or has it to be implemented differently ?

larspalo commented 1 year ago

@eturpault In the example above, you have the choice of both a synth and a wave tremulant done.

eturpault commented 1 year ago

Ok it is clear with the example DoubleTrems, thank you. I like the stop/tremulant noises :smile:

larspalo commented 1 year ago

I like the stop/tremulant noises 😄

Thanks! They were created in Audacity just for demonstration...

eturpault commented 1 year ago

@larspalo : I am working on implementing in OdfEdit the placement of the tremmed sample files in the ranks where are the normal un-tremmed sample files (let's call it mode 1), as you recommanded in this issue. An option in the menu would permit to have the tremmed samples placed in separate ranks (let's call it mode 2), as requested by @ahall41 in this issue https://github.com/GrandOrgue/grandorgue/issues/1659#issuecomment-1732329602

In order to make easier the implementation of the mode 2, with reduced implementation differences compared to the mode 1, my idea would be :

But I have observed that the tremmed samples of the tremmed rank are no played when the wave tremulant is enabled, it is the samples of the un-tremmed rank which are played instead. It seems that each pipe of a rank needs to have necessarily a un-tremmed sample defined, else the tremmed sample is ignored, do you know why ? Here is your example that I adapted to test this concept in the ODF DoubleTrems_double_ranks.organ. What is wrong in the definition of the Rank002 according to you ? Why the tremmed samples are not played when the wave tremulant is selected ? DoubleTrems_double_ranks.zip

eturpault commented 1 year ago

If a rank with only tremmed samples pipes inside (Pipe999IsTremulant=1) can work, I could have a single stop linked to two ranks, one rank with un-tremmed samples and another for tremmed samples, if the user asks in the OdfEdit menu for separate tremmed ranks.

Otherwise the simplest solution when the user wants to exclude the tremmend ranks is that he generates with OdfEdit a decidated ODF in which the tremmed samples are not converted from HW to GO, there is already an option for that in OdfEdit.

ahall41 commented 1 year ago

@eturpault. For mode 2 (the way I have implemented it, as per Chorzow).

The only problem with this arrangement is you don't get a smooth transition when enabling/disabling the tremulant.

Bottom line: A realistic tremulant model, please!

larspalo commented 1 year ago

@eturpault For me your test kind of works (ie. the tremmed samples do play). But with the lost crossfade ability while a tone is held (I have to hit the key again for it to take effect). For the seamless switching to work both the isTremulant=1 and isTremulant=0 must be in the same rank as they are supposed to be the same pipe - while two ranks are in fact two different rows of pipes, otherwise they are by definition not ranks!

A possibility would be to create the ranks (and ultimately the odf) according to the users wish like suggested, separate ranks like you've done earlier is one option - or true integrated tremulant samples in one and the same rank would be the other. There are benefits and drawbacks for each option depending on how one looks at it - so maybe it's a good thing to let the users decide how they want it.

ahall41 commented 1 year ago

But with the lost crossfade ability while a tone is held (I have to hit the key again for it to take effect).

You don't need to hit the key again in Chorzow (or any of the ODFs I've modelled the tremulant similarly). BTW in my model, there are 3 types of tremulant. Synthesised, Wave and Switched (the latter been Eric's mode 2).

eturpault commented 1 year ago

Ok it is clear : "both the isTremulant=1 and isTremulant=0 must be in the same rank". So I am going to keep the existing implementation for the mode 2 (separate ranks, will be an option to be chosen by the user in the OdfEdit menu) and to make a new implementation for the mode 1 (true integrated tremulant samples in the same rank as the un-tremmed samples), this will be the default mode. Thanks for your feedbacks.

eturpault commented 1 year ago

This is implemented in OdfEdit v2.7