-
Notifications
You must be signed in to change notification settings - Fork 244
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
Add MIDI portamento #183
base: master
Are you sure you want to change the base?
Add MIDI portamento #183
Conversation
I've just build it my self and I have the same error reported by travis: dx7note.cc:266: undefined reference to `Porta::rates' |
You're correct, msfa/porta* files have to be added to the project. |
Actually it would be cool if this would implement the original DX7 controls for MONO and POLY mode portamento. Eg. Sysex Group 2 'Function Parameters', 64, 67-69 as is already mentioned by Documentation/sysex-format.txt. The missing MONO / POLY implementation is the largest difference between Dexed and the DX7 for me, so I like to see this fixed, and this pull request is the first attempt I see. Cool! |
Having just checked 64 MONO/POLY MODE CHANGE 0-1 O=POLY I observe parameter 64 is unused in Dexed source, there exists however a "Mono" control which exists in the editor only. I guess I can work with this. For the portamento case in mono mode, I guess it means to resume from the newest note's current pitch, as opposed to poly which resume from the newest note key value. 67/69 no problem, being identical to MIDI CC. Please correct if I'm wrong, as I don't have DX7. |
Hi @jpcima, great work that the portamento is now also implemented! I have taken the pull request and added it to MicroDexed - an implementation of Dexed which works on the Teensy Microprocessor (see https://codeberg.org/dcoredump/MicroDexed) and it works nicely. I have a "real" DX7(II) and can try to compare - just have to take it out of the case (perhaps at weekend). I will also try to check the glissando-mode. Manual says: "... Observe how the pitch moves to the most recent note(s) in 1/2 step increments..." The DX7 has two (four) different modes for portamento:
Both are explained in the manual on page 14. From the text explanation I have no real idea what the modes are doing. Will try this on the original DX7. Thanks for your work! Holger |
Hello @dcoredump. Please examine some work I had done in a WIP branch, which I just pushed. A thing: I am confused about interpretation of this sysex data. I believe to have figured out mony/poly from the manual, but I remain somewhat confused at parameters. Also my friend @farvardin has accepted recently to do some quick testing on a DX7 (thanks), he has seemed to reach a preliminary conclusions that portamento settings operate as global on the synth. About portamento times, I measured these myself on Yamaha synth other than DX7. |
@dcoredump modo-mode: "fingered" and "fulltime": "fingered": Only apply portamento if one key is already down while a new key is pressed. Play fresh note otherwise. Note for the original DX7, there is no such thing as "note playing", as all voices are always computed, even if the envelope has reached L4 and all carriers are at level zero. The implementation is all about keys pressed or not. |
@dcoredump poly-mode: "retain" and "follow": |
Hi @jpcima,
Many thnaks! I have added the changes to my code and will test later (currently no keyboard available).
Hm, strange: my reference for the SYSEX parameters is currently https://homepages.abdn.ac.uk/d.j.benson/pages/dx7/sysex-format.txt:
So this must be a garbled SYSEX file or perhaps you used the wrong offset and it's another parameter.
The Dexed implementation seems to work, since in mono-mode I can clearly glide from one note to another (with portamento) and only the pitch changes - not the envelopes.
Right. Also pitchbend and the other controllers (modwheel, footswitch, aftertouch, breathcontoller). That's why I am implementing a "per sound" configuration of those parameters (for MicroDexed).
I set up my DX7II yesterday, but unfortunately my mixer has some problems, so I couldn't test anything yet. |
What happens in "retain" mode when releasing the keys and holding the sustain pedal, when the tones haven't reached their target pitch? Do they "freeze" at the actual pitch they had when releasing? |
Hello,
I set up my DX7II yesterday, but unfortunately my mixer has some
problems, so I couldn't test anything yet.
I've made some recordings of portamento mode this morning (from time 0 to time 99), i've sent the audio to @jpcima for analysis!
|
Thanks to you both! I posted the file sound.dat, it's analysis of peak frequency over time, where variation of pitch can be observed. It's a 3 column data file, having: time position, frequency (Hz), midi note (semitone) sound.dat.gz It's the range of portamento in steps of 5, as 0,5,10,...,90,95,99. When it's zoomed into each part, it doesn't appear linear in the semitones domain. |
Hi @jpcima, I have a question about your glissando code: Regards, Holger |
Oh yeah, I interpreted it wrong (part of wrong kind of message). dexed/Documentation/sysex-format.txt Line 200 in 760f9ef
|
No, this is different from portamento_enable, which is just a On/Off based on standard MIDI. Gliss=1 changes the way supposedly how portamento is traveling through notes (chromatic). |
@jpcima Yes, that is correct. Glissando mode rounds the glide to semitones. Also I think the curvature of the glide is probably exponential rather than linear. Linear glide isn't particularly useful for live playing, it's more useful for sequencers, I find. |
After a long time I am coming back to this. I manually added your PR to dexed.lv2 and MicroDexed. Portamento without glissando works as excepcted (I havn't tested the mono version yet). But enabling glissando does sound a little bit wired. It sounds disharmonic when portamento stops. I uploaded a recorded demo to soundcloud: https://soundcloud.com/codemanrhodes/dexed_lv2-portamento I played a C4, aG4 and again a C4. I hope you have an idea what is going wrong? TIA, Holger |
I saw the TODO item on portamento, and I implemented something.
It has a formula based on measurements I did quite long ago on Yamaha SY77 portamento delays.
DX7 may or may not have used identical values. I don't know DX7, this should be checked.
It's the kind of operation obtained when portamento is configured in poly mode.
It implements the CC 5 and 65.