marchingband / wvr

Home of WVR, an open source, Arduino compatible, ESP32-based Sample Player and Audio Framework.
GNU General Public License v3.0
65 stars 9 forks source link

Feature Request: More MIDI Controls #32

Open TheBatmosphere opened 2 years ago

TheBatmosphere commented 2 years ago

In V1.0.1, I found that WVR supports

Here's a starter list of additional controls I think would help:

Pending Future Synthesis Features

Handy summary here...

marchingband commented 2 years ago

I have added all of the first set, with 2 exceptions : pitch and attack. Pitch will fit neatly into the DSP version coming soon. I may come back and try to implement it in this engine later, depending on the outcome of the DSP engine, and its polyphony capabilities. So, I'll leave this issue open. If anyone really really wants attack, let me know, and I will write it!

Atonal-Circuits commented 2 years ago

Maybe a midi SYSEX command to turn ON / OFF wifi? This can save 1 or 2 pins when using WVR with another microcontroller?

marchingband commented 2 years ago

@robs81 this is a good idea, thank you! i will implement it this weekend. ill use CC 85 i think.

Atonal-Circuits commented 2 years ago

Cool! Isn't Sysex message more suited for this purpose because they don't depend on midi channel. Cc are midi channel related.

Le sam. 2 avr. 2022 à 11:43, marchingband @.***> a écrit :

this is a good idea, thank you! i will implement it this weekend. ill use CC 85 i think.

— Reply to this email directly, view it on GitHub https://github.com/marchingband/wvr/issues/32#issuecomment-1086603147, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHCK4U7QQRSDHYJQHZGNFR3VDAJFPANCNFSM5IO22QXA . You are receiving this because you commented.Message ID: @.***>

marchingband commented 2 years ago

True! I added sysex controls for WiFi on/off. 0x01 is WiFi On 0x02 is WiFi Off so the sysex would look like "F0 01 F7" for WiFi-on and "F0 02 F7" for WiFi-off.

marchingband commented 2 years ago

https://github.com/marchingband/wvr_binaries/tree/main/wvr_basic/3.2.0 and all the firmwares at v3.2.0 have this feature.

TheBatmosphere commented 1 year ago

Hello again. Any more thoughts on adding pitch bend? I wonder if it could be implemented by adjusting the sample playback rate rather than via fancier DSP. That would probably create all kinds of gritty artifacts, but might sound cool.

marchingband commented 1 year ago

Crude pitch-down can be done by doubling every n sample, but it sounds bad. Crude pitching up can be done by skipping every n sample, but then it requires reading more samples from eMMC and using larger buffers, so that's not possible without sacrificing voices of polyphony.

I have been looking at DSP using fixed-point math, for which there may be enough time in the processor to keep a decent number of voices of polyphony, but it will be a lot of work, and I may not get time for it soon. I am not sure if it will be worth it, if we end up with 1/2 as many voices, which is likely for 1 octave of pitch up.

The only easy option is low-quality pitch down, I could implement that for fun maybe within a weekend, and create a special binary with it enabled but it's not a high priority at the moment.

The real solution is to implement DSP for just up to 1 semitone up and one semitone down, generate samples for every semitone, and fade between them. This is quite a complex algorithm.

TheBatmosphere commented 1 year ago

Thank you for thinking about this. Most synths default to just two semitones up and down. An octave down could be cool for occasional special effects.

The render-and-crossfade approach strikes me as overly complicated, but I’m not a programmer. 😜 As a player, I’d be fine if the timbre changed radically as the pitch bent; it would give the instrument more character.

marchingband commented 1 year ago

Ok I will put it on my roadmap to experiment with 2-semitone pitch bend. It's possible it will not impact the polyphony too much with a small range like 200 cents, if I use fast fixed-point math. I don't think you will be happy with the low-quality pitch bend, its not so much a change in timbre, it creates all kinds of aliasing noise which are really horrible, almost like ring modulation sounds 🤢.

CarlosUnchained commented 9 months ago

Regarding WIFI on/off via midi, in my case would be easier to have a CC to toggle it additionally to sysex. Just make it so it can be modified by any midi channel.

marchingband commented 8 months ago

added pitch-bend in 3.9.0