Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switchable performance files improvements + Poly/Mono + Fix to #298 and #83 issues #267

Merged
merged 46 commits into from
Aug 6, 2022
Merged

Switchable performance files improvements + Poly/Mono + Fix to #298 and #83 issues #267

merged 46 commits into from
Aug 6, 2022

Conversation

arsamus
Copy link
Contributor

@arsamus arsamus commented Jun 2, 2022

Hi @probonopd , in order to complement the swichable Performance solution, I have added these additional features to improve the usability of the solution:
-Custom defined new performance name: predefined Performance name can be modified. Characters are input by the rotary encoder, to move the cursor, hold down the encoder and turn right or left. Then just double click to confirm.
-Delete Performance files: This allows to delete perfomance files from the list. To do that, just double click on the already loaded performance and confirm yes or no. The default performance.ini file in the root directory can't be deleted.
-Change voice name: Edited voice can have a custom name (and will be saved on performance file).
-Some minor improvements on related Methods.

@miotislucifugis
Copy link

nice!

@miotislucifugis
Copy link

Unfortunately, I cant get this build to work- using a pi3. MiniDexed appears to boot, LCD shows "home screen"= TG1... but it does not respond to the encoder/switch or make sound when I play the keyboard.

@arsamus
Copy link
Contributor Author

arsamus commented Jun 3, 2022

Unfortunately, I cant get this build to work- using a pi3. MiniDexed appears to boot, LCD shows "home screen"= TG1... but it does not respond to the encoder/switch or make sound when I play the keyboard.

Hi @miotislucifugis, I just realized that I had missed to initialize a variable when I've copy the code here, may be that was the reason of the bug. Unfortunatly, I don't have a RPI3 to test it and I have no problems on a RPI2, so let me know if on this last build the issue has been resolved.

@miotislucifugis
Copy link

That fixed it. Just did a quick check and everything seems to be working. great work

@arsamus
Copy link
Contributor Author

arsamus commented Jun 3, 2022

Great! 😃

@BobanSpasic
Copy link

@arsamus - did you take a look at this: #261
Thx for all your work

@arsamus
Copy link
Contributor Author

arsamus commented Jun 4, 2022

@arsamus - did you take a look at this: #261
Thx for all your work

Yes. I've got it. I upload asap with this pr.

@probonopd
Copy link
Owner

Great @arsamus. Please give me a ping once you think this should be merged. Thanks!

@arsamus
Copy link
Contributor Author

arsamus commented Jul 8, 2022

Hi everybody and @miotislucifugis, I've just submit the PR that fixed Foot Controller, Breath Controller and Aftertouch message handling. Right now all modulation paths are working as expected (like Dx7 is supposed to do it, unfortunely I don't have a real one to test it) and also complement #298 and #83 solution. New build is ready to test it: https://github.com/probonopd/MiniDexed/suites/7282549823/artifacts/293357205

@BobanSpasic
Copy link

@arsamus - I would have one more request - could you add to the performance.ini one more key (PerformanceName=char[1..30])?
This way, we could get all the parameters of a DX/TX performance dump into performance.ini

@arsamus
Copy link
Contributor Author

arsamus commented Jul 9, 2022

Hi @BobanSpasic. Yes, it could be added, but take in mind that performance.ini (and the rest of switchable files) save in one file the eight performance parameters of each TG of MiniDexed so we will have to face with this things:

  1. we will have two "performance" meanings, one for the whole instrument (the eight TG as a whole) and one for each TG (for each TX/DX instance). Right now when we talk about performance we refer to the first one. So, when we will talk about performance in TG (DX instance) context we have to use another name in order to avoid user confusion.
  2. we have to think how to handle 30 chars on 16 chars displays (we may need to add some code for scrolling animation or something like that)
  3. this name it doesn't take any utility (it only is my point of view, I could be wrong) on MiniDexed context since performance.ini save all TG in one file. On other hand, it is supposed that each TG mimics a basic DX7 (of course I think that this project have the potencial to be more than that on a future, adding more features backward compatible with DX FM synthesis, for examaple having other waveforms for Ops, adding extra algorithms, adding multi effect send channels, etc )

Other approach could be having the name just for inport/export TX Sysex tasks, but hidden on UI. Names could be stored on performance.ini (users could be edited there if they want) and can be added on future feature that export sysex messages on TX format.
Performance created on MiniDexed could have a default names, for example TG1, TF2, etc.

@probonopd what it's your point of view?

@BobanSpasic
Copy link

DX7II can play 2-voice performance, either as solo (just Voice A), split or dual. There is a defined SysEx bulk dump for such Performance. The performances have names and there are 64 storage positions on DX7II for the performances (32 on TX7) according to the documentation.
I still must search for TX816, how is the situation there. I got the manual, but I can't find any definition of performance bulk dumps for TX816.
MiniDexed have much more possibilities than any of DX/TX. At some point, velocity layering could be implemented (e.g. TG1 - TG7 plays all the notes from the whole velocity range and TG8 plays some explosive brass section if the velocity is over 90).
No DX/TX has this implemented (as far as I know).
I would use the name "performance" just like it is - the setup of the whole MiniDexed in one file. This would follow the logic of DX7mkII, DX11 etc. where Performance sets up all the voice generators.

  1. "Performance" per TG can be called Addition, Supplement etc. Yamaha did it so for all the extra parameters the new generations have, but original DX7 do not have. DX7mkII uses SysEx with original DX7 voice + supplement. If you sent the same SysEx to original DX7 - it will use just the Voice part and the Supplement part is ignored. Do MiniDexed really needs supplement per TG?

  2. We don't need to show 30 chars on 16 chars display, we can edit the names. Let it be 30 defined just for compatibility. Or make it 16, no problem here either.

  3. There is no use at the moment, but at some point we will or could have a SysEx dump for performances (PC to MiniDexed), and MiniDexed could take this 30 char name for file name (for storage on the SD Card).

  4. Forget about importing TX performance SysEx directly, without conversion software on a PC. The performance dump from a DX7mkII or TX alone, without the same voice banks setups, means nothing. Here comes the advantage of performance.ini files, where the voices are integrated into the performance files. I just love this idea. That is also the reason for my question earlier, if we really need the VoiceNumber and BankNumber in the performance.ini files - with just these two parameters, the performance gets lost when you load another bank in the same place (just like it is lost on a real DX). Another problem is incompatibility between DX/TX series itself - one series have some parameter in the range 0-15 where the same parameter on other series is in the range 0-99. It needs to be converted.

@BobanSpasic
Copy link

Got some info:
TX816 = 8 x independent DX7 (mkI, alias original DX7), no global performance file.
TX802 = 8 x DX7mkII (alias DX7II) - performance files are something like MiniDexed's performance.

@arsamus
Copy link
Contributor Author

arsamus commented Jul 9, 2022

I would use the name "performance" just like it is - the setup of the whole MiniDexed in one file. This would follow the logic of DX7mkII, DX11 etc. where Performance sets up all the voice generators.

The last build of this PR (https://github.com/probonopd/MiniDexed/suites/7282549823/artifacts/293357205) allows to save the whole MiniDexed parameters in one file and named with a 14 chars name that can be editable before save it (renaming saved files is pending). This covers what you think about performance management? Why do you think that it is necessary to add a name parameter inside the file? The loaded performance name can be checked on Perfrormance->load menu. Since the file is loaded at the time the user wants, there are no limit for performance files (just de SD card capacity limit)

TX816 = 8 x independent DX7 (mkI, alias original DX7), no global performance file.
TX802 = 8 x DX7mkII (alias DX7II) - performance files are something like MiniDexed's performance.

Respect to tx802. Performance files save the whole unit as a whole (8 TF modules on the same file (or sysex dump) like MiniDexed) or each module has it own performance file?

MiniDexed have much more possibilities than any of DX/TX. At some point, velocity layering could be implemented (e.g. TG1 - TG7 plays all the notes from the whole velocity range and TG8 plays some explosive brass section if the velocity is over 90).

Velocity layering, global transpose and key range are relatively easy to implement with a few lines of code, but of course, this is not part of dx7 features. Maybe on other PR I can suggest some of this features, this PR has a lot of new features and covers, as I know, the DX7 performance parameters that are missing on the Productive build.

@BobanSpasic
Copy link

BobanSpasic commented Jul 9, 2022

I would use the name "performance" just like it is - the setup of the whole MiniDexed in one file. This would follow the logic of DX7mkII, DX11 etc. where Performance sets up all the voice generators.

The last build of this PR (https://github.com/probonopd/MiniDexed/suites/7282549823/artifacts/293357205) allows to save the whole MiniDexed parameters in one file and named with a 14 chars name that can be editable before save it (renaming saved files is pending). This covers what you think about performance management? Why do you think that it is necessary to add a name parameter inside the file? The loaded performance name can be checked on Perfrormance->load menu. Since the file is loaded at the time the user wants, there are no limit for performance files (just de SD card capacity limit)

Because one day we will want to SysEx dump the performance file, and in such case the name must be written inside the file.
I am writing a Librarian app for MiniDexed, and my points are going in this direction - how to transfer the performance from a PC app to MiniDexed.

TX816 = 8 x independent DX7 (mkI, alias original DX7), no global performance file.
TX802 = 8 x DX7mkII (alias DX7II) - performance files are something like MiniDexed's performance.

Respect to tx802. Performance files save the whole unit as a whole (8 TF modules on the same file (or sysex dump) like MiniDexed) or each module has it own performance file?

One file for performance:
tx802
The other parameters from MiniDexed's performance.ini (portamento parameters, poly/mono etc.) are part of Voice (this is the difference between DX7/TX816 and DX7II/TX802) as Supplement:
DX7II

For TX802, the performance name is 20 char long, for TX816 is 30, for V50 is 10 etc...

MiniDexed have much more possibilities than any of DX/TX. At some point, velocity layering could be implemented (e.g. TG1 - TG7 plays all the notes from the whole velocity range and TG8 plays some explosive brass section if the velocity is over 90).

Velocity layering, global transpose and key range are relatively easy to implement with a few lines of code, but of course, this is not part of dx7 features. Maybe on other PR I can suggest some of this features, this PR has a lot of new features and covers, as I know, the DX7 performance parameters that are missing on the Productive build.

I agree.

@probonopd
Copy link
Owner

Dear all, thanks for your hard work on this PR. Please test the new build MiniDexed_2022-07-15-144ef8d which is based on top of the now merged #274.

@arsamus
Copy link
Contributor Author

arsamus commented Jul 16, 2022

Please test the new build MiniDexed_2022-07-15-144ef8d which is based on top of the now merged #274.

Hi @probonopd I've tested it and everything works as expected and compatible with #274

@probonopd
Copy link
Owner

@arsamus - I would have one more request - could you add to the performance.ini one more key (PerformanceName=char[1..30])?
This way, we could get all the parameters of a DX/TX performance dump into performance.ini

we will have two "performance" meanings, one for the whole instrument (the eight TG as a whole) and one for each TG (for each TX/DX instance)

I was under the impression that on the TX, a "performance" describes the settings how the various TG instances work together (and possibly which effects are added). So I would not use the word "performance" to describe the individual TGs, unless I am overlooking something.

So, when we will talk about performance in TG (DX instance) context we have to use another name in order to avoid user confusion.

How is Yamaha calling those things in their TX documentation?

"Performance" per TG can be called Addition, Supplement etc. Yamaha did it so for all the extra parameters the new generations have, but original DX7 do not have. DX7mkII uses SysEx with original DX7 voice + supplement.

So, I'd be fine with "Supplement".

I would use the name "performance" just like it is - the setup of the whole MiniDexed in one file.

I tend to agree, unless this is confusing because Yamaha users expect something entirely different.

we have to think how to handle 30 chars on 16 chars displays

Frankly, I would not care too much at this point and just show the first characters. This is purely cosmetic and maybe people will use larger displays with more characters soon.

We don't need to show 30 chars on 16 chars display, we can edit the names.

Yes. Allow 30 chars to be stored but only show what fits on the respective display.

import/export TX Sysex tasks

Once we get to the point that MiniDexed can do this, one could consider to use the TX sysex data format for storing things locally (instead of performance.ini files) as I had originally assumed we would do. But then, by now it has become clear that performance.ini files are easier to work with than .syx files, and - most importantly - they contain the voice data so that everything ends up together in just one file that can easily be moved from machine to machine, so probably using the TX sysex data format for storing things locally should not be our goal anymore. Wdyt?

Performance created on MiniDexed could have a default names, for example TG1, TF2, etc.

Agree.

Testing MiniDexed_2022-07-15-144ef8d now. @arsamus do you think this PR is ready for merging? Additional features and improvements to existing features could always be brought in through additional PRs later. I'd like to have major changes (like this one) in main rather sooner than later, so that other PRs won't run into merge conflicts eventually.

Thanks for your great work!

@arsamus
Copy link
Contributor Author

arsamus commented Jul 16, 2022

@arsamus do you think this PR is ready for merging? Additional features and improvements to existing features could always be brought in through additional PRs later.

Hi @probonopd, yes I think is ready to merge. This PR adds a lot of new important features. We can continue discussing about other features, improvements and ideas that can be included on future PRs.

@probonopd
Copy link
Owner

Great @arsamus. Could you suggest edits for https://github.com/probonopd/MiniDexed/wiki/Menu?

@arsamus
Copy link
Contributor Author

arsamus commented Jul 16, 2022

Yes, I will post it here as soon as I can.

@probonopd
Copy link
Owner

probonopd commented Jul 16, 2022

Which defaults do we have do change so that the "silent" BC voices #83 play by default? Or ar they silent by default on Yamaha instruments as well?

@BobanSpasic
Copy link

Explanation about the performances on real DX7
DX7 - single TG, performance is global (and just for one TG). Performance parameters are these that we have in MiniDexed performance.
TX816 - 8xTG, performance per TG. No global performance file. Every TG in TX816 is a separate device.

DX7mkII - 2xTG. Most of the parameters from performance is moved to voice parameters (supplement data). The remaining parameters in performance are for setting both the TGs (keyboard split, dual etc.)
TX802 - 8xTG. same logic like DX7mkII

MiniDexed uses DX7 (not mkII) parameters and performance.ini is DX7-alike, but for 8 TGs.
Importing DX7mkII voices would mean splitting it at DX7 Sysex + parameters that are going into performance.ini.

@arsamus
Copy link
Contributor Author

arsamus commented Jul 16, 2022

I don't know which are factory default values for this controllers. Intuition tell me that just Pitch would be setted 'on' and amplitude and EG Bias setted 'off'. I don't think Yamaha default roms have voices that are muted by default. But maybe someone who have a real DX7 can confirm. Maybe @SurvivalHacking can (if this doesn't bother him), I saw some of his YT videos and he have one.

@arsamus
Copy link
Contributor Author

arsamus commented Jul 17, 2022

Hi, @probonopd here are the insertions and changes for Wiki->Menu. Default values for Mod Wheel is Range=99, Pitch=ON, Amplitude=OFF, EG BIAS=OFF; rest of controllers: Range=99, Pitch=OFF, Amplitude=OFF, EG BIAS=OFF to avoid unpredictive behavior (like muted voices);

[insert Poly/Mono and Modulation between Portamento and Channel inside TG menu]
Poly/Mono: Enable and Disable monophonic (single note synth with upper note prioroty) or polyphonic mode of each TG.

[Modulation:
Allows to set (On and Off) modulation wheel, foot controllers, breath controller and after touch targets. For any of this controllers there are three main components of voice to witch LFO modulation can be applied: to the PITCH, to the AMPLITUDE and to EG (Envelope Generator) BIAS. Actually each Operator may or may not be progremmed to be sensitive to modulation sources. Range parameter allows to set the amount of effect that will be apply to targets. Some settings could result in little or no audible sound, especially when EG BIAS is On.

[on main menu replace "save" with this "performance" menu]
Performance:
->Load: allows to switch between different performance files. Right now move the rotary encoder or increment/decrement buttons in order to select the desired Performance file, then press select to load it. The flag "[L]" at the upper left of the display indicate the current loaded file

->Save:
-->Overwrite: write changes to the current performance file
-->New: create a new performance file. By default a suggested name will be generated, but it can be edited before the new file will be created. To do that, Push Select button and move rotary encoder or increment/decrement buttons to move cursor. Select to confirm and back to abort
-->Set as default: Save the current performance parameters to default file (performance.ini file on root directory). Default file contains the parameters that are going to be loaded when MiniDexed is turned on. Take in mind that performance.ini file will be overwritten after this action.

->Delete: this function allows to delete custom performance files. Default file (performance.ini at root directory) can't be deleted.

[After Transpose and before TG2]
Voice name: Change current voice name. Right now, this changes, like other voice changes, will not be saved on rom banks. Any voice parameter change can be saved on performance files. See Performance menu. Shortcut to switch between TGs in disabled on this menu because the functionality is used for change the cursor position

@probonopd
Copy link
Owner

probonopd commented Jul 18, 2022

EG BIAS=OFF to avoid unpredictive behavior (like muted voices)

Are you saying that by default you are not getting muted voices anymore? Then in my last test I must have done something wrong, because I still got muted voices as in #83 (this was the reason why I asked about "detaults"). Maybe because I had pre-existing Performance files. Will delete those and try again.

@arsamus
Copy link
Contributor Author

arsamus commented Jul 18, 2022

EG BIAS=OFF to avoid unpredictive behavior (like muted voices)

Are you saying that by default you are not getting muted voices anymore? Then in my last test I must have done something wrong, because I still got muted voices as in #83 (this was the reason why I asked about "detaults"). Maybe because I had pre-existing Performance files. Will delete those and try again.

This defaults are defined on performance.ini file submited on this PR. But to facilitete users to use their former performances files, I've just set default values on the code. This defaults values applyes only in case the following properties don't exist on the performance file:
ModulationWheelRange# ModulationWheelTarget# FootControlRange# FootControlTarget# BreathControlRange# BreathControlTarget# AftertouchRange# AftertouchTarget#

@miotislucifugis
Copy link

By leaving EG Bias "off" on all mod sources, you will have "muted" voices. The patch expects EG bias to be controlled by a modulation source (usually BC, but can be the mod wheel or aftertouch;) as it is set to a minimum. Only when "modulated" will it open up and produce audible sound. I dont think that there is such a thing as "default" mod setting on the DX7... unless you mean what the setting is after changing the internal battery or what it was set to right out of the box. Unless I am mistaken, the DX7 remembers the last user settings for stuff like modulation, pitchbend, and potamento, etc. I would need to test to confirm 100%( perhaps tomorrow), but i suspect that is is totally normal for the DX7 to produce no sound on these patches if no EG Bias modulation source is connected and value wiggled. often these patches are labeled with the letters "BC" to indicated that they are expecting this to be set up. for example voice #14 on rom 2A= "Brass 6 BC" ... tho' others like "train" (i forget which rom this was on) make sound by default(chug chug), but rely on something to modulate the EG bias to animate the sound and add the train whistle effect. All the original yamaha patch that require this seem to be on the supplementary rom carts... perhaps there was a note in the original paperwork/ documentation that made note of the modulation requirements?

@arsamus
Copy link
Contributor Author

arsamus commented Jul 19, 2022

By leaving EG Bias "off" on all mod sources, you will have "muted" voices.

I don't know what happens on a real DX7 but on Desktop Dexed and on Minidexed, setting off EG Bias unmute those "muted" voices.

The patch expects EG bias to be controlled by a modulation source (usually BC, but can be the mod wheel or aftertouch;) as it is set to a minimum. Only when "modulated" will it open up and produce audible sound.[...]often these patches are labeled with the letters "BC" to indicated that they are expecting this to be set up.

I didn't notice that BC means Breath Controller... And what you say sounds convincent.

unless you mean what the setting is after changing the internal battery or what it was set to right out of the box

Yes. This is what I mean, but since DX7 remembers the last user settings until someone disconnect the battery, because DX7 doesn't have a factory reset, and these controllers parameters are not part of voice parameters, I'd think that it doesn't matters these default values. Eventhough, we can define as default values the most "standard" behavior, for example pitch on and amplitude and eg bias off, or set the factory values if some who have a DX7 can check them.

@miotislucifugis
Copy link

I tested the some of "quiet" patches today on a DX7. Patches were sent via desktop dexed. the patches were a few of the "BC" patches from yamaha roms 3a and 4a = "brass BC", "sax BC" and "voice BC". As i suspected, when EQ Bias is turn off for all the mod sources (or mod source level is at 0) the patch remains quiet. (by the way, for me, these patch are also quiet on desktop dexed: As i sent the patches to the DX7, I tested the sound in Dexed with the little on screen keyboard, and there was no sound. What patches were quiet in Minidexed, but had sound in Dexed?)

One small difference between dexed/minidexed and the real DX7- on both dexed variants, when the EQ Bias is down or not being modulated, there is no sound from the patch... on the dx7, while it is quiet and muted, you can hear the sound... it seems like the filter effect it isnt fully being closed... if that makes sense. I know that the DX7 uses a range of 100 for the velocity. just a guess, but perhaps it also uses this range internally for other variables like modulation level...while Dexed uses 0-127. however I would think that the range would be higher, not lower? ....shrug?

regardless, its not really an issue... i kinda prefer how it behaves in dexed vs the original anyway. That aside, the behavior in this merge request seems constant with both the DX7 and Desktop dexed.

@probonopd
Copy link
Owner

Change voice name: How do I move to the next character? (I only have one button: the one in the rotary encoder).

@arsamus
Copy link
Contributor Author

arsamus commented Jul 19, 2022

Change voice name: How do I move to the next character? (I only have one button: the one in the rotary encoder).

You have to mantain the button pushed and move the rotary encoder left or right. Same as shortcut, that is not activated on this menu.

@probonopd
Copy link
Owner

Thank you very much @arsamus. You are a true master of the subject! Sorry it took a bit longer, but I have now tested the PR and updated the documentation. Merging.

Thanks for this very valuable contribution! 👍

@probonopd probonopd merged commit aa5a7c7 into probonopd:main Aug 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants