Closed Synthematophon closed 3 months ago
Hi Synthematophon, thanks for the feedback, I appreciate it.
Regarding the issues:
CC7
). The swell is controller by the slider on the left - one for each division. Now, there is no dedicated CC assigned to those, when used as a plugin you can attach an automation or MIDI control to those parameters to your convenience. But I understand that your use case it to play it as a standalone application. I may offer to map those parameters to CC11
(expression), will this work for your controller? The swell
flag in the configuration tells whether an additional low-pass filter gets applied or not when controlling that slider on the left - it is supposed to emulate the swell box. I may revisit the swell modelling in the future.Cheers,
Arthur.
Hi Arthur, thanks a lot for your patience!
I controll the swell (like a swellbox in a real organ) with a swell-pedal. That affects only the third manual. Using the swell-pedel with Aeolus the over-alle volume is to be changed. You understood that correct.
Attached is a screenshot of my setup
I solved the problem changing the build in IR with own ones.
Great!
Thanks a lot and kind regards
Burkard
Gesendet: Montag, 30. Januar 2023 um 22:36 Uhr Von: "Arthur Benilov" @.> An: "Archie3d/aeolus_plugin" @.> Cc: "Synthematophon" @.>, "Author" @.> Betreff: Re: [Archie3d/aeolus_plugin] Swell-Pedal an other (Issue #18)
Hi Synthematophon, thanks for the feedback, I appreciate it.
Regarding the issues:
How exactly do you control the swell? It seems to me that you are controlling the global plugin volume (CC7). The swell is controller by the slider on the left - one for each division. Now, there is no dedicated CC assigned to those, when used as a plugin you can attach an automation or MIDI control to those parameters to your convenience. But I understand that your use case it to play it as a standalone application. I may offer to map those parameters to CC11 (expression), will this work for your controller? The swell flag in the configuration tells whether an additional low-pass filter gets applied or not when controlling that slider on the left - it is supposed to emulate the swell box. I may revisit the swell modelling in the future.
The plugin interface normally respects the scale factor set for the display in your OS. If you think it's too small, probably your scaling is set to 100%, but then everything else should appear also quite small to you. I would be curious to see a screenshot of your setup. But otherwise, it should be possible to add a scaling. Currently the window resize is meant to accommodate more stops from the configuration, but I can add an additional scaling factor.
Yes, this should be possible. Now, when you use it as a plugin from a DAW, you can use whatever reverb you like. Moving the reverb slider to the very left will disable the internal reverb (which will also save some CPU). But again, seems like you favour the standalone usage. I may add a possibility to load custom IRs for the reverb then.
Right, there are several optimisations that I need to do in this regard. Expect the performance to improve in the next release.
Cheers,
Arthur.
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
Hi Arthus,
BTW i could identify the pretty high CPU load. It only occurs using IR. You wrote ( @3. :"disable the internal reverb (which will also save some CPU)"). But in reality it saves a huge amount of CPU. Incredible much.
It would be so great to implement some improvements at that point.
Thanks a lot!
Synthematophon
Gesendet: Montag, 30. Januar 2023 um 22:36 Uhr Von: "Arthur Benilov" @.> An: "Archie3d/aeolus_plugin" @.> Cc: "Synthematophon" @.>, "Author" @.> Betreff: Re: [Archie3d/aeolus_plugin] Swell-Pedal an other (Issue #18)
Hi Synthematophon, thanks for the feedback, I appreciate it.
Regarding the issues:
How exactly do you control the swell? It seems to me that you are controlling the global plugin volume (CC7). The swell is controller by the slider on the left - one for each division. Now, there is no dedicated CC assigned to those, when used as a plugin you can attach an automation or MIDI control to those parameters to your convenience. But I understand that your use case it to play it as a standalone application. I may offer to map those parameters to CC11 (expression), will this work for your controller? The swell flag in the configuration tells whether an additional low-pass filter gets applied or not when controlling that slider on the left - it is supposed to emulate the swell box. I may revisit the swell modelling in the future.
The plugin interface normally respects the scale factor set for the display in your OS. If you think it's too small, probably your scaling is set to 100%, but then everything else should appear also quite small to you. I would be curious to see a screenshot of your setup. But otherwise, it should be possible to add a scaling. Currently the window resize is meant to accommodate more stops from the configuration, but I can add an additional scaling factor.
Yes, this should be possible. Now, when you use it as a plugin from a DAW, you can use whatever reverb you like. Moving the reverb slider to the very left will disable the internal reverb (which will also save some CPU). But again, seems like you favour the standalone usage. I may add a possibility to load custom IRs for the reverb then.
Right, there are several optimisations that I need to do in this regard. Expect the performance to improve in the next release.
Cheers,
Arthur.
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
Hi, Yes, the reverb is a zero-delay convolutional reverb, so it is quite CPU intensive indeed. But it also depends greatly on your hardware, could you tell me the CPU you are using? On my machine (i9-9900k) the reverb load is about 3%.
Since you were able to compile the plugin yourself, you can improve the reverb performance by disabling the zero-delay part of it. As result the reverb will sound about 100ms late, but in some cases this may even be more pleasant. Check how it's done for Elleden Hall
IR in engine.cpp
file:
_irs.push_back({
"Elveden Hall, Suffolk",
BinaryData::elveden_hall_suffolk_england_wav,
BinaryData::elveden_hall_suffolk_england_wavSize,
0.1f,
false, // <---- Setting this flag to false disables the zero-delay part of the convolver
{}
});
But there are also other optimisations besides the reverb that I have planned, so this will improve overall.
BTW, I cannot see your screenshot if you've attached any. Perhaps e-mail attachments do not go through, and you'd need to attach it in GitHub. Thanks.
Hi, that's a great tip! In fact it helps to cut the CPU load in half. Still pretty much... My CPU is a Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz Of course not so fast. The display runs with a resolution of 1920x1080.
Strange enough that my generated file size (Aeolus.exe) is (almost) double the size of yours.
Hi, please make sure you compile it in Release
mode, otherwise it will be big and slow. Also, if you've added additional IRs - these go into the executable as well. BTW for the IRs make sure they are at 44.1kHz sampling rate stereo (2 channels).
I've started adding some optimisations on the develop branch, this should improve the CPU usage a bit.
Hi, it's o great! You are my hero! Thanks a lot so far.
BTW. let me rise som other issues:
Hi,
Program Change
MIDI command - each step is an individual program. The forward button is not linked to anything, what would you link it to?/Documents/Aeolus
one is missing or does not have the organ_config.json
file.Hi,
Sorry, the next question: Since you developed the stop definition files (in json) i assume you "cracked" the code of the original *.aeo files, right? It's not so easy to understand the stop definitions inside the json-files. Could you provide some help at this point? Actually i produce my own stops using the original Aeolus which provides great opportunities to do so. How did you generate you new json files?
Thanks!
Hi,
Yes, I had to reverse engineer the .ae0
file format, but then found that something standard as JSON is much easier to work with. The JSON format follows the same data structures as in the .ae0
- it defines parameters for 64 harmonics of a pipe. These parameters are defined across the range of 11 keys (keys in between are interpolated by the engine). These parameters are a bit cryptic, but that's how they were named in the original .ae0
files. You may read through addsynth.h
and addsynth.cpp
where these get used.
To produce custom stops in JSON format I have some python scripts that you can find here. These are not meant to be easy to use, mind you :) But essentially, I use the samples from the real organ pipe recordings which I then fit to the Aeolus 64-harmonic model. For that I load the samples to SPEAR software which allows extracting partials from the samples. Organ recordings are usually quite noisy I would clean the harmonics in SPEAR to leave only the nice, loud and clean ones. Then the partials can be exported from SPEAR as a text file. This text file in then read by model_fit.py script that outputs the stop .json
file.
Stops like Vox Humana
and Violin
were created this way, for example. Others, I'd just edit JSON file directly after converting from an existing .ae0
file, for example to pitch the pipe up or down for mixtures.
I did not include the code for the .ae0
to .json
conversion tool into this project, let me know if you want it.
Hope this clarifies things.
Hi, Great work you did with the analysis of pipe sound! Congratulations! A bit to heavy for me i guess. ad 2: i understand your primary goal with VST plugin. No problem. If you could arrange two rows of sequenzer steps (wich i would expand to 25 steps each) it's mor than enough. ad 3: Ich thin that would work. I tested my console: it's in deed sending CC7. ad 4: thank you so much!
Hi from a fully blind organist. Firstly I'm really impressed that while running this in MacOS 12.6.6 with VoiceOver, I can successfully navigate this as a standalone instrument. I'm really pleased.
I find there's a few things missing that I'd like implemented within the app.
1: A Voicing Window to voice each stop, either per pipe or range based, 2: A MIDI edit window to allow custom midi functions such as multiple expression pedals, 3: support for sequencer mode to navigate between generals. 4: Ability to support divisional pistons. 5 I'd love to achieve a 4 manual spec with trems per division, as I am developing a speaking organ console. This would make a great test case.
keep up the amazing work.
lew
Hi, I am glad you were able to use it with a screen reader. The stops buttons implementation is not accessibility friendly I must admit, I will see how this could be improved. As for the rest of your points:
Hi,
I’d love some help with this. I started dealing with aeolus when it came to the organnery project, a total nightmare to the point where I gave in completely. Why? Linux is so poor for accessibility to the point where the screen reader built in to some versions of linux, or where it has to be custom installed, doesn’t even understand aeolus. and can’t work with it, surprising really as it was a linux based package in the first place.
It’s voiceover friendly as a standalone package, so accessibility isn’t an issue.
What I’d like to see come out of this amazing little app is the ability from within a menu to set up midi events like you can in grandorgue, hauptwerk and organteq, these setups are crucial to a midi console. Say you have a 4 manual console like I have which is a custom build , I am building the console purely myself including the cabinetry, the build consists of 2 stop jambs, left side loaded with 63 switch contacts, right loaded with 58 contact switches, 4 manuals with piston rails, pedalboard with 4 expression shoes (3 swell type, 1 crescendo) + toe studs, I’d like to build Aeolus to behave in a way that it works with the console and recognise the various specifications via midi learn as an example. so having a midi setup window where I can utilise the different midi controllers / encoder units to achieve the parameters I need, would help a heck of a lot.
at least there’s one good thing about the standalone version, you can set up the audio and midi interfaces directly, no JACK setup, thank god for that.
I’d like to have a stop system setup similar to that of a few English churches / cathedrals I’ve worked for over the years, including York Minster, Westminster Abbey, Kings College Cambridge, etc.
you mention loading custom stop libraries, are there any available and if so, how do I achieve this?
lew :)
On 28 May 2023, at 22:52, Arthur Benilov @.***> wrote:
Hi, I am glad you were able to use it with a screen reader. The stops buttons implementation is not accessibility friendly I must admit, I will see how this could be improved. As for the rest of your points:
- Yes, perhaps it makes sense to have an extensive MIDI configuration for the controls, but at the moment you can achieve this by mapping parameters from the DAW when using Aeolus as a plugin.
- I am not sure what you mean for the sequencer to navigate between generals. You can already access any sequencer position either by advancing forwards or backwards (via key switches for example) or by selecting the sequencer position directly in order to recall the entire organ registration. I will check whether this works with accessibility, perhaps some improvement is needed.
- I have not thought about divisional pistons, for now you can use the sequencer, which is also acts as general pistons I suppose. The sequencer is also controlled by the MIDI Program change (MIDI program number corresponds to the sequencer position), I am not sure what MIDI control one would need for divisional pistons.
- You can already use custom organ configurations and have as many divisions as you need. The custom configuration is described here: https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration Let me know if you need any assistance with this.
— Reply to this email directly, view it on GitHub https://github.com/Archie3d/aeolus_plugin/issues/18#issuecomment-1566276359, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATQDNKLJTI2OUBIPRXFEADDXIPCJRANCNFSM6AAAAAAUK6KX5A. You are receiving this because you commented.
out of curiosity, I installed this on my test bed, a macbook pro 2020 16” I9 running MacOS 12.6.6. Where do I find the contents to edit, it hasn’t created a folder in my documents or my user account, so these files must be embedded or elsewhere
I was just listening to the script and it’s certainly interesting. there’s a fair bit of scope available and chance to edit some parameters.
to clarify this,
Manual 3 = Swell, Manual 2 = Great, Manual 1 = Choir
if this is the case, I’d look at renaming the headers and descriptions to refer to them by their traditional naming standards.
If within the scripts, I change swells for great and choir divisions to True and Tremulant to True, will this create buttons for both instances?
lew :)
On 28 May 2023, at 22:52, Arthur Benilov @.***> wrote:
Hi, I am glad you were able to use it with a screen reader. The stops buttons implementation is not accessibility friendly I must admit, I will see how this could be improved. As for the rest of your points:
- Yes, perhaps it makes sense to have an extensive MIDI configuration for the controls, but at the moment you can achieve this by mapping parameters from the DAW when using Aeolus as a plugin.
- I am not sure what you mean for the sequencer to navigate between generals. You can already access any sequencer position either by advancing forwards or backwards (via key switches for example) or by selecting the sequencer position directly in order to recall the entire organ registration. I will check whether this works with accessibility, perhaps some improvement is needed.
- I have not thought about divisional pistons, for now you can use the sequencer, which is also acts as general pistons I suppose. The sequencer is also controlled by the MIDI Program change (MIDI program number corresponds to the sequencer position), I am not sure what MIDI control one would need for divisional pistons.
- You can already use custom organ configurations and have as many divisions as you need. The custom configuration is described here: https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration Let me know if you need any assistance with this.
— Reply to this email directly, view it on GitHub https://github.com/Archie3d/aeolus_plugin/issues/18#issuecomment-1566276359, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATQDNKLJTI2OUBIPRXFEADDXIPCJRANCNFSM6AAAAAAUK6KX5A. You are receiving this because you commented.
The default organ configuration in embedded into the plugin/executable. But you can provide your own configuration if you place organ_config.json
file into your Documents/Aeolus
folder as described here: https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration You can start from default_organ.json
from the source code, copy it to your Documents/Aeolus
folder and rename to organ_config.json
. You can also place the original Aeolus pipes definitions (ae0 files) in the very same folder and reference them in your custom config.
You can rename the manuals if you wish and you can indeed set tremulant
and swell
flags to true
. This will enable the tremulant button on corresponding division and will add a swell filter accordingly. For now the default configuration has the swell being enabled only on the 3rd division, as suggested by another gentlemen in this very same discussion thread :)
The current naming convention was suggested to me by another organist, so I can see there could be a degree of variability here :)
can swells be set as individual midi controller assignments?
any thoughts on the possibility to implement a crescendo pedal function? or would this be a real pain?
lew
On 29 May 2023, at 12:14, Arthur Benilov @.***> wrote:
The default organ configuration in embedded into the plugin/executable. But you can provide your own configuration if you place organ_config.json file into your Documents/Aeolus folder as described here: https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration https://github.com/Archie3d/aeolus_plugin#custom-organ-configuration You can start from default_organ.json from the source code, copy it to your Documents/Aeolus folder and rename to organ_config.json. You can also place the original Aeolus pipes definitions (ae0 files) in the very same folder and reference them in your custom config.
You can rename the manuals if you wish and you can indeed set tremulant and swell flags to true. This will enable the tremulant button on corresponding division and will add a swell filter accordingly. For now the default configuration has the swell being enabled only on the 3rd division, as suggested by another gentlemen in this very same discussion thread :)
The current naming convention was suggested to me by another organist, so I can see there could be a degree of variability here :)
— Reply to this email directly, view it on GitHub https://github.com/Archie3d/aeolus_plugin/issues/18#issuecomment-1566994280, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATQDNKPPDN44AMGHUP7APETXISAI3ANCNFSM6AAAAAAUK6KX5A. You are receiving this because you commented.
Yes, you can use CC7 controller on the MIDI channel selected for the swell control (drop box to the right from the virtual keyboard). CC7 on the global control MIDI channel will affect the entire organ volume. You can assign different MIDI channels to control the volume and tremulant (mod wheel) of individual divisions.
That’s brilliant. I look forward to putting this to test.
could a 4th manual be created? if so, do you have any stops available to initially test a 4th manual with?
lew
On 29 May 2023, at 13:35, Arthur Benilov @.***> wrote:
Yes, you can use CC7 controller on the MIDI channel selected for the swell control (drop box to the right from the virtual keyboard). CC7 on the global control MIDI channel will affect the entire organ volume. You can assign different MIDI channels to control the volume and tremulant (mod wheel) of individual divisions.
— Reply to this email directly, view it on GitHub https://github.com/Archie3d/aeolus_plugin/issues/18#issuecomment-1567085254, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATQDNKOC6FYWTABY6NKME6TXISJ2VANCNFSM6AAAAAAUK6KX5A. You are receiving this because you commented.
Yes, fourth manual can be added in the config the same way as the existing ones, but there are no more unique stops, so you either have to copy stops referenced from other manuals or move them. Don't take pedal stops, as they have limited keys range.
is there a way to create new pipes / stops? if so, how?
lew
On 29 May 2023, at 16:51, Arthur Benilov @.***> wrote:
Yes, fourth manual can be added in the config the same way as the existing ones, but there are no more unique stops, so you either have to copy stops referenced from other manuals or move them. Don't take pedal stops, as they have limited keys range.
— Reply to this email directly, view it on GitHub https://github.com/Archie3d/aeolus_plugin/issues/18#issuecomment-1567295452, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATQDNKKJ6VM2TXDO2RLY2GTXITAXXANCNFSM6AAAAAAUK6KX5A. You are receiving this because you commented.
This is not a trivial process. The pipes in Aeolus are modeled by their harmonics, so once have to specify the harmonics amplitudes, envelops, detune on attack and release. All this information is stored in the pipe model file. Original Aeolus has a Linux tool that allows defining harmonics and envelopes. I was never able to find this tool, tbh. My approach to model pipes is to fit the model to the raw audio samples. This however requires some manual work as well, since the recorded samples are usually quite noisy and reverberant. Do you have any particular stops you would like to model? Do you have samples for these stops?
- My console is sending the sequenzer forward on MIDI chanel 8 note 23
- Since i have only 10 buttons ten would be enough. In the case i would have different banks. That enebles me, to store different registrations for different pieces. But nevertheless: two rows would be better than nothing.
- I cannot answer that actually, not sitting at my console. Answer you tomorrow. But i assume, it is not so easy changable.
- Good idea. Thanks!
Hi, another question: since my console sends the sequencer steps via MIDI chanel 8 you implemented a controler dropdown list for choosing the chanel. Actually i have additionally foot-piston which are unfortunately sending at chanel 7. You were so kind to implement the issue with different notes for the sequencer. Would it be possible to choose different chanels (beside to choose "all" in the dropdown list) for example via checkboxes? Thanks a lot!
Sure, this should be possible. Requires a bit of UI work, so please stay put (see issue #30). Also, please create new separate issues for the future requests, since this thread becomes very long and filled with unrelated things.
Hi,
- Yes, I will think how to add a configurable key switch to advance the sequencer.
- Hm. I am not sure I actually like the banks idea. I understand your play it as a standalone from a console, but my vision for it is to be a VST plugin most of all, so you are supposed to operate it from a DAW. I think, this way you can create different DAW sessions with registrations you want that that will be saved in the DAW project.
- I think I can make the volume control affect the manuals when sent to a corresponding MIDI channel (the one selected on the right for each manual). But you'll need to make sure that the keys and the swell pedal send on the same MIDI channel for the manual 3 in this case, will this work?
- Will do this then.
Yes, I had to reverse engineer the
.ae0
file format, but then found that something standard as JSON is much easier to work with. The JSON format follows the same data structures as in the.ae0
- it defines parameters for 64 harmonics of a pipe. These parameters are defined across the range of 11 keys (keys in between are interpolated by the engine). These parameters are a bit cryptic, but that's how they were named in the original.ae0
files. You may read throughaddsynth.h
andaddsynth.cpp
where these get used.To produce custom stops in JSON format I have some python scripts that you can find here. These are not meant to be easy to use, mind you :) But essentially, I use the samples from the real organ pipe recordings which I then fit to the Aeolus 64-harmonic model. For that I load the samples to SPEAR software which allows extracting partials from the samples. Organ recordings are usually quite noisy I would clean the harmonics in SPEAR to leave only the nice, loud and clean ones. Then the partials can be exported from SPEAR as a text file. This text file in then read by model_fit.py script that outputs the stop
.json
file. Stops likeVox Humana
andViolin
were created this way, for example. Others, I'd just edit JSON file directly after converting from an existing.ae0
file, for example to pitch the pipe up or down for mixtures. I did not include the code for the.ae0
to.json
conversion tool into this project, let me know if you want it.Hope this clarifies things.
Could you please shortly explain how you did it. I understand to extract the partials via SPEAR to an .txt file. And then? Using the model.fit.py is not working. What is the job of the partials.py? Thanks a lot and kind regards
You need to extract partials for 11 samples and save them into these files (placed in the same folder as model_fit.py
):
036-C.txt,
042-F#.txt,
048-C.txt,
054-F#.txt,
060-C.txt,
066-F#.txt,
072-C.txt,
078-F#.txt,
084-C.txt,
090-F#.txt,
096-C.txt
Then run python model_fit.py
. This will perform the model fitting and output result.json
, which contains harmonics information to be used to construct a pipes rank model (this is only the harmonics part, not the complete JSON to be used by the plugin).
Mind, that this is never meant to be user friendly, so if you don't have python installed with the right modules the script will fail for you.
P.S. Partials.py
is the python module that performs the curves fitting, it is not meant to be executed directly.
Hi Archie, Great work you are doing. I appreciate it a lot. Thanks for your intensive work!
Let me raise some issues:
Thanks a lot and kind regards
Synthematophon 8