0x7b, 0x7c, 0x7d: all notes off - put all notes to release (except ones with hold or sustenuto)

The channel-specific level and overall 'duration' of reverb can be adjusted, "expression" adjusts the volume of audible notes on that channel, and pitch-wheel adjusts the note frequencies.

All 16 channels and multiple notes per channel are available. The total simultaneous audible notes depends on the clock frequency and what instruments are used (different instruments take varying amounts of processing power).

Reverbvs1053b: There are 15 different default Reverb settings in the low 4 bits of the parametric_x.config1 register (X:0x1e03). Values 2 to 15 select a default room size (internal 350 to 4900). 0 will enable the reverb depending on the value of CLOCKF (3.0x or higher clock enables reverb). 1 means reverb is disabled.vs1103b: There are 15 different default Reverb settings in the low 4 bits of the parametric_x.midiConfig register (X:0x1a03). Values 2 to 15 select a default room size (internal 350 to 4900). 0 will enable the reverb depending on the value of CLOCKF (3.0x or higher clock enables reverb). 1 means reverb is disabled.

When you control Reverb through MIDI controls (Parameter / effect control 1), all control values from 0 to 127 are valid (internal 0..4064).

Addendum
It seems the size of the UART FIFO is only an issue when sending the midi data through SDI. If my math below checks out, there should not be issue when you use the 31250bps RT-MIDI UART speed. Issues with the original 16-byte UART FIFO might arise due to MIDI messages that are longer than 15 bytes, specifically sysex and meta messages. These should be removed and not sent.

1. RT-MIDI can send 16 bytes in 16/3125=5.12ms
2. The MIDI decoder produces 64-sample blocks, so for full polyphony the sustained maximum time is 64/44100=1.45ms for 16 bytes of MIDI data. This time can be temporarily exceeded if a lot of notes come on at the same time and other notes need to be decayed/faded out. Even if it takes double time, there would still be plenty of time to get back to decoding MIDI messages. The higher the clock and the lower the polyphony, the shorter time is spent generating the instruments.

Instrument List for reference
Note that the instruments are enumerated from 1, while in the MIDI messages the instruments start from 0, so remember to do the conversion.

What's the difference in sound between bank 0 and bank 0x79? I went through all the instruments, playing a minor chord, and at best, the two banks sounded identical. For some instruments, bank 0x79 played only one of the three notes in the chord.

Are there parameter settings in which bank 0x79 sounds better than bank 0?

microtherion wrote:For some instruments, bank 0x79 played only one of the three notes in the chord.

All melodic banks should behave the same. The chord problem may be something related to note dropping (when notes are quiet enough or there are too many, the quietest ones are removed) or some bug in the real-time code.

For master volume I take it this is a SysEx command, and follows normal byte sequence for these. All of the other MIDI control statements appear to be working except this one. Do you have an example SysEx byte sequence for this?

In case it matters, I'm using a VS1053 and RT MIDI via UART. For testing I'm using only one channel with just one or two notes, turning them on and off after one second delays.

SCI isn't connected and can't be. For this particular project (it's for an article in a popular magazine here in the US) we're using the SparkFun MIDI Instrument Shield, which only supports UART RT-MIDI.

I have a prototype running the VS1103B and I can get some MIDI files to play and not others.

What are the things to look for in a MIDI file that would prevent it from playing? Do you know of any prohibited events or commands?

I am careful to use format 0 General Midi files. I also run in file mode, not real time MIDI using the SCI bus. I run ADPCM on the SDI bus and it mixes successfully when the MIDI file works. I suspect this chip does not fully support the MIDI command set.

Here are some other findings:

1. If I take working MIDI file, load it into Anvil and just save it with no modifications, the file will cease to work. It looks like Anvil adds some metadata at the beginning so the hex file is a little different, but it should be legal. Such metadata is in other files that work.

2. I always do a search for multiple instances of the text "Trk". There can be only one if it is to have a chance of working. However, having just one instance does not guarantee a working file.

3. Most files don't work. However, I did get a really complicated file to work. At first, I thought maybe you could only have one instrument play or something like that.

Hi,
I'm programming a sequencer program and use a VS1053 in real time midi mode. All worked fine but I have a problem with the midi control. Panning and volume worked fine, but i can't control the reverb. Source can found here https://create.arduino.cc/projecthub/ro ... -ii-b5d169. Have any a idea what I'm making wrong. For any help, I'm thankful.