#midi

2025-05-28

NS MIDI Player 3.2 is out!

This update contains the following improvements:
• Significant improvements to Playing Next: View the duration of each MIDI file, sort by duration, and go backward and forward.
• Tip Jar: Support NS MIDI Player development by purchasing tip(s).
• User interface improvements
• Accessibility improvements
• Bug fixes and performance improvements

apps.nitinseshadri.com/midipla

#iOS #iPadOS #macOS #midi #MIDIPlayer #NSMIDIPlayer #MacCatalyst

Tod Kurt (todbot)todbot
2025-05-27
screenshot of guitarcenter page show both front and back of this DMX-controlled fan
2025-05-27

Water Music: How Does Tap-water Temperature Sound in Time-lapse? - Sonification: listening to my kitchen tap water mains inlet temperature #podcast #audification #MIDI - earth.org.uk/water-music-1.htm

Ronnie / Rekkerd.orgrekkerd
2025-05-27
Arturia AstroLab 88
concretedogconcretedog
2025-05-27

The new issue of @rpimag has just landed on my doormat.. there's a heap of excellence (Rob Miles stuff is ace!) and my contributions are part 2 of the series looking at building a solar node and using things like ATAK. I've also written a review of the fab from Clockworkpi. Hoping to write more about and PicoCalc in the coming!

Photo of the PicoCalc article. Photo of the meshtastic article.
2025-05-26

Crazy Audio Production in the 2000s
#audio #music #midi #synths #keyboards #vinyl #turntables

a few images of my audio studio in the 2000s
Ronnie / Rekkerd.orgrekkerd
2025-05-26
ADSR Nu Dance for Orbit
Ronnie / Rekkerd.orgrekkerd
2025-05-26
Elevated Trance 10 in 1 Uplifting Trance Bundle
2025-05-26
diyelectromusicdiyelectromusic
2025-05-25

An ESP32-S3 DevKitC prototyping board with MIDI, PWM audio output, potentiometers and its own power circuit.

diyelectromusic.com/2025/05/25

Photo of a custom, largely square, PCB with a long (twin 22-pin headers) dev board in the centre, power ,MIDI and PWM filter circuit off to the left, and 8 potentiometers off to the right.  There is also a prototyping area at the bottom.
Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-25

ESP32 S3 DevKit Experimenter PCB Build Guide

Here are the build notes for my ESP32 S3 DevKit Experimenter PCB Design.

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

If you are new to electronics and microcontrollers, see the Getting Started pages.

Bill of Materials

  • ESP32S3 DevKit Experimenter PCB (GitHub link below)
  • ESP32S2 DevKitC (official or clone – see ESP32 S3 DevKit)
  • MIDI Circuit:
    • 1x H11L1 optoisolator
    • 1x 1N4148 or 1N914 signal diode
    • Resistors: 1x 10Ω, 1x 33Ω, 1x 220Ω, 1×470Ω
    • 1x 100nF capacitor
    • Either: 2x MIDI DIN sockets (see photos and PCB for footprint)
    • Or: 2x 3.5mm stereo TRS sockets (see photos and PCB for footprint)
    • Pin headers and jumpers
    • Optional: 6-way DIP socket
  • Audio Output Circuit:
    • Resistors: 2x 1K, 2x 2K
    • 2x 10uF non-polar capacitors
    • 2x 33nF ceramic capacitors
    • 1x 3.5mm stereo TRS socket
  • Power Circuit:
    • 1x 7805 regulator
    • Electrolytic Capacitors: 1x 100uF, 1x 10uF
    • 1x 100nF Ceramic Capacitor
    • SPST switch with 2.54mm pitch connectors
    • 2-way header pins
    • 2.1mm barrel jack socket (see photos and PCB for footprint)
  • 8x 10K potentiometers (see photos and PCB for footprint)
  • Optional: 2x 22-way pin header sockets
  • Additional pin headers or sockets as required

Each circuit module is effectively optional. The position of the 22-way headers will depend on which type of module is used. The clone versions are 1 pin row wider than the official version.

There are some solder-bridge configuration options too, which will be discussed later.

Build Steps

Taking a typical “low to high” soldering approach, this is the suggested order of assembly:

  • All resistors and diode.
  • DIP socket (if used) and TRS socket(s).
  • Disc capacitors.
  • Switch
  • Jumper and pin headers.
  • 22-way pin sockets (if used).
  • Non-polar and electrolytic capacitors.
  • 7805 regulator.
  • Potentiometers.
  • DIN sockets.

Here are some build photos for the MIDI DIN version of the board. If using MIDI TRS sockets, then these can be installed at the same time as the audio socket.

If using 22-way headers for the DevKit, then the position will depend on which type of DevKit module is being used. In the photo below, I’ve installed 3 sets of 22-way headers to allow me to use either a clone or official module.

The remaining components can almost be installed in any order that makes sense at the time.

Once the main build is complete, two additional capacitors are required for the audio PWM output circuit. Two 33nF capacitors should be soldered across the 1K resistors. This is probably best done on the underside of the PCB as shown below.

Ignore the red patch wire. I managed to cut through a track whilst clipping the excess leads after soldering.

Configuration Options

The following are configurable and can be set by using pin headers and jumpers; solder bridges; or possibly wire links.

  • UART for MIDI – pin header + jumpers.
  • Audio Output – can be disconnected by breaking solder jumpers on rear of the board under 1K/2K resistors.
  • GPIO used for RV3 and RV8 – can be set using solder jumpers on rear of the board under RV3 and RV8.

Testing

I recommend performing the general tests described here: PCBs.

WARNING: The DevKit can be powered from either the USB sockets or the new power circuit, but not both at the same time.

The sample application section includes some simple sketches that can be used to test the functionality of the board.

PCB Errata

There are the following issues with this PCB:

  • I should have oriented the DevKit the other way up so that the USB sockets were on the edge of the board, not overhanging the prototyping area!
  • The Audio filter requires additional capacitors (see notes).

Enhancements:

  • None 

Find it on GitHub here.

Sample Applications

Analog Potentiometers

The following will read all 8 pots and echo the values to the serial monitor.

void setup() {
Serial.begin(115200);
}
void loop() {
for (int i=0; i<8; i++) {
int aval = analogRead(A0+i);
Serial.print(aval);
Serial.print("\t");
}
Serial.print("\n");
delay(100);
}

Audio PWM Output

The following will output a 440 Hz sine wave on the PWM channel on GPIO 15. Change to 16 to see the other one.

int pwm_pin = 15;#define NUM_SAMPLES   256uint8_t sinedata[NUM_SAMPLES];#define PWM_RESOLUTION 8#define PWM_FREQUENCY  48000#define TIMER_FREQ 10000000#define TIMER_RATE 305#define FREQ2INC(f) (f*2)uint16_t acc, inc;void ARDUINO_ISR_ATTR timerIsr (void) {  acc += inc;  ledcWrite (pwm_pin, sinedata[acc >> 8]);}hw_timer_t *timer = NULL;void setup () {  ledcSetClockSource(LEDC_AUTO_CLK);  for (int i=0; i<NUM_SAMPLES; i++) {    sinedata[i] = 127 + (uint8_t) (127.0 * sin (((float)i * 2.0 * 3.14159) / (float)NUM_SAMPLES));  }  timer = timerBegin(TIMER_FREQ);  timerAttachInterrupt(timer, &timerIsr);  timerAlarm(timer, TIMER_RATE, true, 0);  ledcAttach(pwm_pin, PWM_FREQUENCY, PWM_RESOLUTION);  inc = FREQ2INC(440);}void loop () { }

I’m getting a pretty good signal with a 33nF filter capacitor, but the signal still retails some bias. I’m getting a Vpp of around 1.1V.

But it starts out with a swing from around -200mV to +900mV. But this slowly improves over time and after a few minutes is much closer to a nominal -500mV to +600mV. I guess that is probably my cheap capacitors!

MIDI

Most of the MIDI monitors, routers and sending projects I have should work with the MIDI setup. In the default configuration, using UART0 (GPIO 43/44) for MIDI, that appears as Serial0 or the default MIDI configuration (more on serial ports on the ESP32S3 here: ESP32 S3 DevKit).

So the Simple MIDI Serial Monitor should just work and anything sent to the board should:

  • Illuminate the on-board (RGB) LED.
  • Echo back out to the MIDI OUT port.

Here is the full test code:

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
MIDI.begin(MIDI_CHANNEL_OMNI);
pinMode (LED_BUILTIN, OUTPUT);
}

void loop() {
if (MIDI.read()) {
if (MIDI.getType() == midi::NoteOn) {
digitalWrite (LED_BUILTIN, HIGH);
delay (100);
digitalWrite (LED_BUILTIN, LOW);
}
}
}

Note: as the MIDI is (probably) hanging of UART0 which is also routed to the USB “COM” port, it will be easier to upload via the USB “USB” port. This won’t clash with the MIDI circuitry on UART0.

Closing Thoughts

I seem to be having a run of “doh” moments with a few of these PCBs, but then that is the price I pay for taking shortcuts by only designing them in my head rather than prototyping them first!

But arguably, it is still a lot easier using a soldered PCB than attempting to build the various elements on solderless breadboard, so in a way that is what these prototypes are largely for.

So apart from the filter issue which is actually fairly easily solved, this seems to work pretty well.

Kevin

#define #ESP32s3 #include #midi #pcb #potentiometer #pwm

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-25

ESP32 S3 DevKit Experimenter PCB Design

This a version of the ESP32 WROOM Mozzi Experimenter PCB for the latest ESP32-S3 DevKitC board I’ve found.

For the background on the boards themselves, see my notes here: ESP32 S3 DevKit.

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

If you are new to Microcontrollers, see the Getting Started pages.

The Circuit

This is mostly just breaking out the pins of the ESP32S3 DevKitC to header pins, but there are a couple of additional features too:

  • There are additional rows of headers. The idea is to support the official and clone boards, which means coping with the fact the clone boards are 1 row of pins wider than the official boards.
  • There is MIDI IN and OUT with jumpers to select UART0 or UART1.
  • There is a stereo PWM output circuit (see notes below).
  • There are 8 potentiometers connected to ADC1.
  • There is a 7805 or equivalent regulator to provide power if required.

One slight complication is the possibility that GPIO3 (ADC1_CH2) is required as a STRAPPING pin or that GPIO8 (ADC1_CH7) is required for I2C (more in the previous post) so there is a solder bridge option for either of them to switch over to GPIO10 (ADC1_CH9) instead.

The complete GPIO usage is as follows:

GPIO0On board BOOT buttonGPIO 1-8Potentiometer 1-8GPIO 10Optional replacement for GPIO 3 or 8GPIO 15, 16PWM audio outputGPIO 43, 44MIDI if UART0 is selectedGPIO 17, 18MIDI if UART1 is selectedGPIO 1-20Analog breakout area*GPIO 21, 38-49Digital breakout area*GPIO 38 or 48Onboard RGB LED

* As already mentioned some of these have alternative or preferred functions.

Audio PWM Output

I based this on the output circuit for my ESP32 WROOM Mozzi Experimenter PCB Design, but I was forgetting that the original ESP32 has a DAC and so only requires a potential divider to reduce the voltage levels and a capacitor to remove the DC bias.

The ESP32S3 does not have a DAC, so the output will have to be via PWM if no external DAC is added. This means this output circuit really needs a low-pass filter to smooth out the pulses from the PWM signal.

That hasn’t been included in the design, but can be implemented by adding capacitors across the terminals of the 1K resistors, as shown below.

Following the discussion from Arduino PWM Output Filter Circuit, we can see that a 2K/1K potential divider can (loosely) be treated as a ~666K resistor for the purposes of a low-pass filter calculation. So this gives me various options in terms of capacitor size as follows.

ResistorCapacitorRoll-off frequency666K10nF24 kHz666K33nF7 kHz666K68nF3.5 kHz666K100nF2.4 kHz

The greatest smoothing will come with the lowest cut-off, but 2.4kHz or 3.5kHz will limit the higher audio frequencies somewhat. But a 10nF might not give me enough smoothing.

It will also depend somewhat on the PWM frequency chosen. The higher, i.e. above the audio frequency range required, the better.

I’ll start with adding 33nF and see how that looks then might change with some experimentation.

If an external DAC is used, then there are solder jumpers provided that can be broken to disconnect this part of the circuit anyway.

PCB Design

I initially considered only breaking out GPIO pins that weren’t being used for additional functions, but then decided I’d just break them all out alongside the prototyping area. Any pins that might be problematic or have an existing function on the board are labelled in brackets – e.g. (GPIO 43).

The solder jumpers for the GPIO/ADC choices are on the underside of the board.

As previously mentioned, the headers are arranged such that it will support the official DevKitC or the slightly wider clones.

The jumper for UART selection for MIDI can serve as a “disable MIDI to allow use of the serial port” function too if required.

There is also a twin jumper option for direct 5V input instead of going via the barrel jack and regulator.

Closing Thoughts

The omission of the capacitors in the PWM filter is a small annoyance, but it is relatively easily fixed.

Apart from that, there is a fair bit included on this board. It should serve as a good platform for further experimentation.

Kevin

#ESP32s3 #midi #pcb #potentiometer #pwm

diyelectromusicdiyelectromusic
2025-05-25

Another video. This time doing the USB to Serial MIDI and CV/GATE at the same time, so it can drive both a Korg Volca Modular and Korg Volca Keys...

makertube.net/w/puRwMGeELa5zq3

2025-05-25

Arduino USB MIDI to Serial MIDI, CV and GATE

makertube.net/w/puRwMGeELa5zq3

Ronnie / Rekkerd.orgrekkerd
2025-05-24
Yurt Rock Memorial Day Sale
2025-05-24

Arduino USB MIDI to CV and GATE

makertube.net/w/cPjFeqigcrBHgM

diyelectromusicdiyelectromusic
2025-05-24

Using my USB MIDI to Serial/CV board as a Korg Volca Modular compatible USB MIDI to CV converter.

diyelectromusic.com/2025/05/24

Note: Please don't do this. Your Volca deserves better than my electronic fumblings! :)

Photo of my custom USB MIDI to CV PCB previously mentioned, with a USB MIDI controller plugged in; and connected via the CV/GATE link to a Korg Volca Modular synth.
Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-24

USB MIDI to Serial and CV/GATE

This project uses my Arduino Pro Mini MIDI USB CV PCB for a USB MIDI to Serial MIDI and CV/GATE device that has a CV/GATE that is compatible with my Korg Volca Modular.

It takes MIDI NoteOn/NoteOff and translates them into CV that can be used to set the pitch of a CV/GATE synth.

IMPORTANT: I strongly recommend that you do not connect this to your Volcas. I am not an electronics person but have accepted the risk of causing a possibly expensive problem. I will not be held responsible if you end up doing the same.

https://makertube.net/w/puRwMGeELa5zq3YhMrMC4h

https://makertube.net/w/cPjFeqigcrBHgMMPLjPNPb

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

If you are new to Arduino, see the Getting Started pages.

The Circuit

This is an application for my completed Arduino Pro Mini MIDI USB CV PCB.

The Code

The board was designed to require a PWM output on D3. With hindsight, D9 might have been more useful as D9 is a “Timer 1” timer on the ATMega328, but D3 is a “Timer 2” timer. The former are 16-bit timer/counters. The latter are only 8-bit.

No matter. I still have 255 levels of PWM to play with.

The initial PWM criteria I wanted were:

  • No prescalar – run at full CPU speed. In the case of a 3V3 Pro Mini this is 8MHz.
  • Use FastPWM mode – this will count up and then reset to zero.
  • Use a TOP value of 255 – the maximum.
  • Use the OC2B output, which is connected to D3. OC2A is not used.
  • Use the mode where OC2B is cleared on compare match; set at 0 (BOTTOM).
  • The PWM value is therefore written into OCR2B.

At some point the code will have to translate from MIDI note number over to a PWM value. My previous project mapped MIDI note C2 (36) onto 0V and went up from there for 5 octaves to C7 (96). This is a range of 60 steps, so actually, revisiting the PWM code, if we change the mode to use an alternative TOP Value of 239, that means each MIDI note corresponds to a specific step of 4. That would be pretty useful!

So the updated PWM criteria is now as follows:

  • No prescalar – still run at full CPU speed. In the case of a 3V3 Pro Mini this is 8MHz.
  • Use FastPWM mode – this will count up and then reset to zero.
  • Use a TOP value of OCR2A, which will be set to 239.
  • Use the OC2B output, which is connected to D3. OC2A is not used.
  • Use the mode where OC2B is cleared on compare match; set at 0 (BOTTOM).
  • The PWM value is therefore written into OCR2B.

The PWM operating frequency is given by a formula in the datasheet, but is basically the time it takes for the counter to count from 0 to 239 and reset, whilst running at 8MHZ. So the PWM frequency = 8000000 / 240 = 33.3kHz.

At such a frequency the (now updated) PWM filter components chosen give a pretty smooth output between 0V and 3.3V, which are them amplified using the OpAmp for a 0V to 5V range.

Note: No interrupts are required for the operating of PWM in this manner. We can just update the PWM value whenever is useful during the operation of the code.

The complete PWM code is thus as follows

void initPwm() {
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20);
OCR2A = 239;
}

void setPwm (uint8_t pwmval) {
OCR2B = pwmval;
}

The value used for PWM will only be active for 0-239. Any value of 240 or higher will just be considered “always on”.

This all means that converting from MIDI to PWM value is now pretty trivial:

#define MIDI_LOWEST_NOTE  36 // C2
#define MIDI_HIGHEST_NOTE 95 // C7
uint8_t midi2pwm (uint8_t note) {
if (note < MIDI_LOWEST_NOTE) note = MIDI_LOWEST_NOTE;
if (note > MIDI_HIGHEST_NOTE) note = MIDI_HIGHEST_NOTE;
return (note - MIDI_LOWEST_NOTE) * 4;
}

Logging the average voltage for each MIDI note (pre and post amplification) gives me the following:

C20.080.08C30.721.06C41.352.03C52.023.01C62.653.95C73.284.90

Plotting these on a graph looks like this:

That is a pretty good linear response, but is slightly under in terms of the top-end output. At 1V/oct a semitone is around 83mV, so dropping 0.1V at the top ought to be dropping a semitone.

But jumping through the octaves it sounds all right to me. It’s definitely not dropping a semitone anyway, so I’m not sure what is going on. I might need to come back to this one!

The rest of the code is fairly straightforward MIDI reception and processing that I’ve done several times before now. There are a few design notes:

  • Automatic MIDI THRU is turned off or both serial and USB MIDI.
  • When a note that is not on the required channel or is out of the C2-C7 range is received, it is ignored.
  • Anything received over USB is automatically sent to the serial OUT and anything received over serial is automatically sent to the USB OUT.
  • NoteOff is only processed if received for the currently playing note.
  • Consecutive NoteOn messages update the CV and replace the previously playing note.
  • There is an option for a GATE type operation:
    • GATE goes HIGH on NoteOn.
    • GATE goes LOW on NoteOff.
  • Or for a TRIGGER pulse type operation:
    • GATE goes HIGH on NoteOn.
    • GATE remains HIGH for a defined time (e.g. 10mS) then automatically goes off.
  • On reception of NoteOff there are several possible options for what to do with the CV:
    • Leave it and do nothing. This allows any envelopes to complete on removal of the GATE signal with no change of CV. But the CV will remain at the last level until a new note is received.
    • Set it to the NoteOff pitch received. Although in reality this is probably going to be the same as “do nothing”.
    • Set the CV to 0. This means there is no “dangling” CV voltage, but the synth will probably respond to the changing CV.
  • I’ve left in a compile-time PWMTEST mode that just plays the different Cs for measuring voltages, and so on.

Find it on GitHub here.

Closing Thoughts

This actually seems to work surprisingly well. I did wonder if the apparent inaccuracies of the output might cause an issue, but it doesn’t seem to.

The PWM filter issue was annoying, but on the one hand, it was a lot easier to build and debug with a PCB in hand; but of course on the other hand, if I’d done it first on solderless breadboard, the problem would have almost certainly be spotted and the design would probably have been right.

This has only looked at a pitch CV. It would be interesting at some point to do some kind of MIDI CC to CV control device.

Kevin

#arduinoProMini #cv #define #korg #midi #midi2cv #usbMidi #volca

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst