diff --git a/README.md b/README.md index c189592..b6385ea 100644 --- a/README.md +++ b/README.md @@ -51,11 +51,11 @@ Then initialize the player and use as in following example: ```c++ player.begin(); +player.switchToMp3Mode(); if (player.getChipVersion() == 4) { // Only perform an update if we really are using a VS1053, not. eg. VS1003 player.loadDefaultVs1053Patches(); } player.setVolume(VOLUME); -player.switchToMp3Mode(); player.playChunk(sampleMp3, sizeof(sampleMp3)); ``` diff --git a/examples/MidiDemo/MidiDemo.ino b/examples/MidiDemo/MidiDemo.ino new file mode 100644 index 0000000..03da9e7 --- /dev/null +++ b/examples/MidiDemo/MidiDemo.ino @@ -0,0 +1,201 @@ +/** + A simple example to use ESP_VS1053_Library for MIDI + https://github.com/baldram/ESP_VS1053_Library + + Copyright (C) 2021 M. Hund (github.com/Dr-Dawg) + + Licensed under GNU GPLv3 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License or later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + + Wiring: + -------------------------------- + | VS1053 | ESP8266 | ESP32 | + -------------------------------- + | SCK | D5 | IO18 | + | MISO | D6 | IO19 | + | MOSI | D7 | IO23 | + | XRST | RST | EN | + | CS | D1 | IO5 | + | DCS | D0 | IO16 | + | DREQ | D3 | IO4 | + | 5V | 5V | 5V | + | GND | GND | GND | + -------------------------------- + + Note: It's just an example, you may use a different pins definition. + + + To run this example define the platformio.ini as below. + + [env:nodemcuv2] + platform = espressif8266 + board = nodemcuv2 + framework = arduino + lib_deps = + ESP_VS1053_Library + + [env:esp32dev] + platform = espressif32 + board = esp32dev + framework = arduino + lib_deps = + ESP_VS1053_Library + +*/ + +// This ESP_VS1053_Library +#include + +#include "patches/rtmidi1003b.h" +#include "patches/rtmidi1053b.h" + +// Wiring of VS1053 board (SPI connected in a standard way) +#ifdef ARDUINO_ARCH_ESP8266 +#define VS1053_CS D1 +#define VS1053_DCS D0 +#define VS1053_DREQ D3 +#endif + +#ifdef ARDUINO_ARCH_ESP32 +#define VS1053_CS 5 +#define VS1053_DCS 16 +#define VS1053_DREQ 4 +#endif + +#define VOLUME 100 // volume level 0-100 + +VS1053 player(VS1053_CS, VS1053_DCS, VS1053_DREQ); + +// noteOn and noteOff based on MP3_Shield_RealtimeMIDI demo +// by Matthias Neeracher, Nathan Seidle's Sparkfun Electronics example respectively + +//Send a MIDI note-on message. Like pressing a piano key +void noteOn(uint8_t channel, uint8_t note, uint8_t attack_velocity) { + player.sendMidiMessage( (0x90 | channel), note, attack_velocity); +} + +//Send a MIDI note-off message. Like releasing a piano key +void noteOff(uint8_t channel, uint8_t note, uint8_t release_velocity) { + player.sendMidiMessage( (0x80 | channel), note, release_velocity); +} + +void setup() { + + Serial.begin(115200); + + // initialize SPI + SPI.begin(); + + // initialize the player + player.begin(); + + if(player.getChipVersion() == 4) + Serial.println("Hello VS1053!"); + else if(player.getChipVersion()==3) + Serial.println("Hello VS1003!"); + else + Serial.println("Please check whether your device is properly connected!"); + + + if(player.getChipVersion()==4 /*4*/) { // MIDI using a VS1053 chip + player.loadUserCode(MIDI1053, MIDI1053_SIZE); + player.writeRegister(0xA /*SCI_AIADDR*/, 0x50); // setting VS1053 Start adress for user code + Serial.println(" MIDI plugin VS1053 loaded"); + } + + if(player.getChipVersion()==3) { // MIDI using a VS1003 chip + player.loadUserCode(MIDI1003, MIDI1003_SIZE); + player.writeRegister(0xA /*SCI_AIADDR*/, 0x30); // setting VS1003 Start adress for user code + Serial.println(" MIDI plugin VS1003 loaded"); + } + + player.setVolume(VOLUME); + +} + +void loop() { + + uint8_t channel = (uint8_t) random(16); + //channel = 9; //uncomment this, if you just want to hear percussion + uint8_t instrument = (uint8_t) random(128); + uint8_t note = (uint8_t) random(128); + uint8_t attack_velocity = (uint8_t) random(128); + uint8_t release_velocity = (uint8_t) random(128); + unsigned long duration = (unsigned long) (300 + random(2000)); + + +/** MIDI messages, 0x80 to 0xEF Channel Messages, 0xF0 to 0xFF System Messages + * a MIDI message ranges from 1 byte to three bytes + * the first byte consists of 4 command bits and 4 channel bits, i.e. 16 channels + * + * 0x80 Note Off + * 0x90 Note On + * 0xA0 Aftertouch + * 0xB0 Continuous controller + * 0xC0 Patch change + * 0xD0 Channel Pressure + * 0xE0 Pitch bend + * 0xF0 (non-musical commands) + */ + +/** 0xB0 Continuous controller commands, 0-127 + * 0 Bank Select (MSB) + * 1 Modulation Wheel + * 2 Breath controller + * 3 Undefined + * 4 Foot Pedal (MSB) + * 5 Portamento Time (MSB) + * 6 Data Entry (MSB) + * 7 Volume (MSB) + * 8 Balance (MSB) + * 9 Undefined + * 10 Pan position (MSB) + * 11 Expression (MSB) + * ... + */ + + // Continuous controller, set channel volume to high, i.e. 127 + player.sendMidiMessage(0xB0| channel, 0x07, 127); + + // Continuous controller 0, bank select: 0 gives you the default bank depending on the channel + // 0x78 (percussion) for Channel 10, i.e. channel = 9 , 0x79 (melodic) for other channels + player.sendMidiMessage(0xB0| channel, 0, 0x00); //0x00 default bank + + // Patch change, select instrument + player.sendMidiMessage(0xC0| channel, instrument, 0); + +// Serial output for the actual parameters + Serial.print("Channel: "); + Serial.println(channel, DEC); + Serial.print("Instrument: "); + Serial.println(instrument, DEC); + Serial.print("Note: "); + Serial.println(note, DEC); + Serial.print("Attack: "); + Serial.println(attack_velocity, DEC); + Serial.print("Release: "); + Serial.println(release_velocity, DEC); + Serial.print("Duration: "); + Serial.print(duration, DEC); + Serial.println(" milliseconds: "); + Serial.println("--------------------------------------"); + + //playing one (pseudo-)random note + noteOn(channel, note, attack_velocity); + delay(duration); + noteOff(channel, note, release_velocity); + delay(100); + +} diff --git a/examples/MidiDemo/patches/rtmidi1003b.h b/examples/MidiDemo/patches/rtmidi1003b.h new file mode 100644 index 0000000..0afcc5d --- /dev/null +++ b/examples/MidiDemo/patches/rtmidi1003b.h @@ -0,0 +1,89 @@ +#ifndef SKIP_PLUGIN_VARNAME +const unsigned short MIDI1003[] = { /* Compressed plugin */ +#endif + 0x0007,0x0001, /*copy 1*/ + 0x8030, + 0x0006,0x01ee, /*copy 494*/ + 0x2800,0x38c0,0x0006,0x2016,0x3613,0x0024,0x0006,0x0057, + 0x3e15,0x1c15,0x0020,0x1fd4,0x3580,0x3802,0xf204,0x3804, + 0x0fff,0xfe44,0xa244,0x1804,0xf400,0x4094,0x2800,0x0f85, + 0x3009,0x1bc2,0xf400,0x4500,0x2000,0x0000,0x36f5,0x3c15, + 0x3009,0x3857,0x0030,0x0a57,0x3e14,0xf806,0x3701,0x8024, + 0x0006,0x0017,0x3e04,0x9c13,0x0020,0x1fd2,0x3b81,0x8024, + 0x36f4,0xbc13,0x36f4,0xd806,0x0030,0x0717,0x2100,0x0000, + 0x3f05,0xdbd7,0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814, + 0x3615,0x0024,0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000, + 0x36f2,0x9815,0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814, + 0x3615,0x0024,0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000, + 0x36f2,0x9815,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x3e10,0xb804,0x3e01,0x7810,0x0030,0x00d0,0x2900,0x0400, + 0x3001,0x0024,0x4080,0x03cc,0x3000,0x0024,0x2800,0x36c5, + 0x4090,0x0024,0x0000,0x0024,0x2800,0x2485,0x0000,0x0024, + 0x0000,0x0081,0x3000,0x0024,0x6012,0x0024,0x0000,0x0401, + 0x2800,0x3305,0x0000,0x0024,0x6012,0x0024,0x0000,0x0024, + 0x2800,0x2885,0x0000,0x0024,0x2900,0x0c80,0x0000,0x0024, + 0x4088,0x008c,0x0000,0x2000,0x6400,0x0024,0x0000,0x3c00, + 0x2800,0x2118,0x0000,0x0024,0x2800,0x2540,0x3801,0x0024, + 0x6400,0x038c,0x0000,0x0024,0x2800,0x2558,0x0000,0x0024, + 0x3013,0x0024,0x2900,0x0400,0x3801,0x0024,0x4080,0x0024, + 0x0000,0x0024,0x2800,0x2495,0x0000,0x0024,0x6890,0x03cc, + 0x2800,0x36c0,0x3800,0x0024,0x2900,0x0c80,0x0030,0x0110, + 0x3800,0x0024,0x0000,0x3c00,0x6400,0x0024,0x003f,0xff00, + 0x2800,0x2d48,0x0000,0x0024,0x0000,0x3fc0,0x6400,0x0024, + 0x0000,0x3c00,0x2800,0x3605,0x6400,0x0024,0x0000,0x0024, + 0x2800,0x3615,0x0000,0x0024,0xb880,0x184c,0x2900,0x0400, + 0x3009,0x3800,0x4082,0x9bc0,0x6014,0x0024,0x0000,0x3c04, + 0x2800,0x2b81,0x0000,0x3dc1,0x2900,0x0c80,0x0000,0x0024, + 0xf400,0x4004,0x0000,0x3dc1,0x6412,0x0024,0x0030,0x0090, + 0x2800,0x2cc5,0x0000,0x0000,0x0000,0x0400,0x2800,0x36c0, + 0x3800,0x0024,0x0030,0x00d0,0x3001,0x4024,0xa50a,0x0024, + 0x0000,0x03c0,0xb50a,0x0024,0x0000,0x0300,0x6500,0x0024, + 0x0000,0x0024,0x2900,0x0408,0x0000,0x3188,0x0000,0x0380, + 0x6500,0x0024,0x0000,0x0024,0x2800,0x33d5,0x0000,0x0024, + 0x2900,0x0400,0x0000,0x0024,0x4080,0x03cc,0x0000,0x0080, + 0x2800,0x3315,0x0000,0x0024,0x2800,0x36c0,0x3800,0x0024, + 0x2900,0x0c80,0x0000,0x0024,0x408a,0x0024,0x0030,0x0110, + 0x3613,0x0024,0x3e11,0x4024,0x30f0,0x0024,0x3e10,0x0024, + 0x3000,0x4024,0x2926,0xa140,0x3e00,0x4024,0x36d3,0x0024, + 0x0000,0x0000,0x0030,0x0090,0x3800,0x0024,0x36f1,0x5810, + 0x36f0,0x9804,0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024, + 0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817,0x002b,0x1105, + 0x0030,0x00d2,0x0030,0x0690,0x0030,0x0291,0x0000,0x0084, + 0x0006,0x6853,0x3e05,0xb814,0x3635,0x0024,0x0000,0x800a, + 0xb880,0x0024,0x3800,0x0024,0x3910,0x0024,0x0000,0xc0c0, + 0x3900,0x0024,0x0006,0x0051,0x0030,0x0000,0x2910,0x3740, + 0x3a00,0x0024,0xb880,0x010c,0x38e0,0x184c,0x3800,0x0024, + 0x3800,0x0024,0x0000,0x0f00,0x0006,0x0010,0x3009,0x2c00, + 0x0003,0x1e40,0x3009,0x2410,0x0006,0x0011,0x3009,0x2410, + 0x0030,0x0ad0,0x3800,0x0024,0x0000,0x09c0,0x0030,0x0690, + 0x2910,0x7780,0x3800,0x0024,0x0001,0x0010,0xb882,0x0024, + 0x291d,0x5800,0x0002,0xdc00,0x001f,0xff00,0x0003,0xda90, + 0x2926,0x1440,0x3800,0x0024,0x2926,0x0e40,0x0030,0x0490, + 0x6890,0x0024,0x3800,0x0024,0x2900,0x1740,0x0000,0x8001, + 0x2919,0x8180,0x3613,0x0024,0x6012,0x0024,0x0003,0xd950, + 0x2800,0x4498,0x0000,0x0024,0x2919,0x8180,0x3613,0x104c, + 0x2928,0xce40,0x3c00,0x0024,0x0000,0x1000,0x2900,0x0a80, + 0x34f1,0x0024,0xb882,0x0042,0x30f0,0xc024,0x4dc2,0x0024, + 0x3810,0x0024,0x2800,0x4480,0x38f0,0x4024, + 0x0007,0x0001, /*copy 1*/ + 0x5800, + 0x0006, 0x8002, 0x1800, /*Rle(2)*/ + 0x0007,0x0001, /*copy 1*/ + 0x8010, + 0x0006,0x0016, /*copy 22*/ + 0xf400,0x4095,0x0006,0x0017,0x3009,0x1c40,0x3009,0x1fc2, + 0x6020,0x0024,0x0000,0x1fc2,0x2000,0x0000,0xb020,0x4542, + 0x3009,0x3857,0x2800,0x1080,0x0030,0x0457, + 0x0007,0x0001, /*copy 1*/ + 0x8025, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x100e, + 0x0007,0x0001, /*copy 1*/ + 0x8022, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x060e, +#define MIDI1003_SIZE 546 +#ifndef SKIP_PLUGIN_VARNAME +}; +#endif diff --git a/examples/MidiDemo/patches/rtmidi1053b.h b/examples/MidiDemo/patches/rtmidi1053b.h new file mode 100644 index 0000000..8f19eda --- /dev/null +++ b/examples/MidiDemo/patches/rtmidi1053b.h @@ -0,0 +1,148 @@ +#ifndef SKIP_PLUGIN_VARNAME +const unsigned short MIDI1053[] = { /* Compressed plugin */ +#endif + 0x0007,0x0001, /*copy 1*/ + 0x8050, + 0x0006,0x03f0, /*copy 1008*/ + 0x2800,0x8080,0x0006,0x2016,0xf400,0x4095,0x0006,0x0017, + 0x3009,0x1c40,0x3009,0x1fc2,0x6020,0x0024,0x0000,0x1fc2, + 0x2000,0x0000,0xb020,0x4542,0x3613,0x0024,0x0006,0x0057, + 0x3e15,0x1c15,0x0020,0x1fd4,0x3580,0x3802,0xf204,0x3804, + 0x0fff,0xfe44,0xa244,0x1804,0xf400,0x4094,0x2800,0x1985, + 0x3009,0x1bc2,0xf400,0x4500,0x2000,0x0000,0x36f5,0x3c15, + 0x3009,0x3857,0x2800,0x1b40,0x0030,0x0457,0x3009,0x3857, + 0x0030,0x0a57,0x3e14,0xf806,0x3701,0x8024,0x0006,0x0017, + 0x3e04,0x9c13,0x0020,0x1fd2,0x3b81,0x8024,0x36f4,0xbc13, + 0x36f4,0xd806,0x0030,0x0717,0x2100,0x0000,0x3f05,0xdbd7, + 0x0030,0xf80f,0x0000,0x1f0e,0x2800,0x7680,0x0000,0x004d, + 0xf400,0x4595,0x3e00,0x17cc,0x3505,0xf802,0x3773,0x0024, + 0x3763,0x0024,0x3700,0x0024,0x0000,0x09c2,0x6024,0x0024, + 0x3600,0x1802,0x2830,0xf855,0x0000,0x004d,0x2800,0x2240, + 0x36f3,0x0024,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3625,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x3e10,0xb803,0x3e11,0x3810,0x3e04,0x7812,0x34c3,0x0024, + 0x3440,0x0024,0x4080,0x0024,0x001b,0x3301,0x2800,0x2c85, + 0x0000,0x0180,0x0000,0x0551,0x0000,0xaf02,0x293c,0x1f40, + 0x0007,0xffc1,0xb010,0x134c,0x0018,0x0001,0x4010,0x10d0, + 0x0007,0xffc1,0xfe20,0x020c,0x0000,0x0591,0x48b6,0x0024, + 0x4dd6,0x0024,0x0001,0x2202,0x293c,0x1f40,0x4380,0x2003, + 0xb010,0x134c,0x0018,0x0001,0x4010,0x1010,0xfe20,0x020c, + 0x48b6,0x844c,0x4dd6,0x0024,0xb880,0x2003,0x3434,0x0024, + 0x2800,0x5280,0x3083,0x0024,0x001c,0xccc2,0x0000,0x05d1, + 0x34d3,0x0024,0x3404,0x0024,0x3404,0x420c,0x3001,0x05cc, + 0xa408,0x044c,0x3100,0x0024,0x6010,0x0024,0xfe20,0x0024, + 0x48b6,0x0024,0x4dd6,0x0024,0x4310,0x0024,0x4488,0x2400, + 0x0000,0x0551,0x2800,0x3295,0x3404,0x0024,0xf290,0x00cc, + 0x3800,0x0024,0x3434,0x0024,0x3073,0x0024,0x3013,0x0024, + 0x2800,0x4340,0x3800,0x0024,0x3083,0x0024,0x3000,0x0024, + 0x6402,0x0024,0x0000,0x1001,0x2800,0x3618,0x0018,0x0002, + 0x3434,0x4024,0x3133,0x0024,0x3100,0x0024,0xfe20,0x0024, + 0x48b6,0x0024,0x4dd6,0x0024,0x2800,0x4340,0x3900,0xc024, + 0x4010,0x1011,0x6402,0x0024,0x0000,0x0590,0x2800,0x3918, + 0x0000,0x0024,0xf290,0x04cc,0x3900,0x0024,0x3434,0x0024, + 0x3073,0x0024,0x3013,0x0024,0x2800,0x4340,0x3800,0x0024, + 0x3183,0x0024,0x3100,0x0024,0x6402,0x0024,0x0000,0x1001, + 0x2800,0x3c98,0x0019,0x9982,0x3434,0x0024,0x3033,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x2800,0x4340,0x3800,0xc024,0x4010,0x0024,0x6402,0x0024, + 0x001d,0x7082,0x2800,0x4198,0x0000,0x0024,0xf290,0x1010, + 0x3033,0x0024,0x3800,0x0024,0x3404,0x0024,0x3073,0x0024, + 0x3013,0x0024,0x3800,0x0024,0x0004,0x4d50,0x3010,0x0024, + 0x30f0,0x4024,0x3434,0x4024,0x3143,0x0024,0x3910,0x0024, + 0x2800,0x4340,0x39f0,0x4024,0x3434,0x0024,0x3033,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x3800,0xc024,0x001e,0x9982,0x0001,0x1012,0x0000,0x0381, + 0x34d3,0x184c,0x3444,0x0024,0x3073,0x0024,0x3013,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x4380,0x3003,0x3400,0x0024,0x293d,0x2900,0x3e00,0x0024, + 0x3009,0x33c0,0x293b,0xc540,0x0010,0x0004,0x34d3,0x184c, + 0x3444,0x0024,0x3073,0x13c0,0x3073,0x0024,0x293b,0xf880, + 0x0001,0x1011,0x0001,0x0010,0x0001,0x1011,0x34d3,0x184c, + 0x3430,0x0024,0x4010,0x0024,0x0000,0x05c1,0x3e10,0x0024, + 0x293b,0xac80,0x0006,0x0092,0x0000,0x05d1,0x36f3,0x134c, + 0x3404,0x0024,0x3083,0x0024,0x3000,0x0024,0x6012,0x0024, + 0x0013,0x3304,0x2800,0x5198,0x0001,0xc682,0x0000,0x0500, + 0x0001,0x0012,0x3404,0x584c,0x3133,0x0024,0x3100,0x4024, + 0x0000,0x05d1,0xfe22,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x3e10,0xc024,0x3430,0x8024,0x4204,0x0024,0x293b,0xb580, + 0x3e00,0x8024,0x36e3,0x134c,0x3434,0x0024,0x3083,0x0024, + 0x3000,0x0024,0x6090,0x0024,0x3800,0x1812,0x36f4,0x4024, + 0x36f1,0x1810,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb804, + 0x3e01,0x7810,0x0008,0x04d0,0x2900,0x1480,0x3001,0x0024, + 0x4080,0x03cc,0x3000,0x0024,0x2800,0x7485,0x4090,0x0024, + 0x0000,0x0024,0x2800,0x6245,0x0000,0x0024,0x0000,0x0081, + 0x3000,0x0024,0x6012,0x0024,0x0000,0x0401,0x2800,0x70c5, + 0x0000,0x0024,0x6012,0x0024,0x0000,0x0024,0x2800,0x6645, + 0x0000,0x0024,0x2900,0x1680,0x0000,0x0024,0x4088,0x008c, + 0x0000,0x2000,0x6400,0x0024,0x0000,0x3c00,0x2800,0x5ed8, + 0x0000,0x0024,0x2800,0x6300,0x3801,0x0024,0x6400,0x038c, + 0x0000,0x0024,0x2800,0x6318,0x0000,0x0024,0x3013,0x0024, + 0x2900,0x1480,0x3801,0x0024,0x4080,0x0024,0x0000,0x0024, + 0x2800,0x6255,0x0000,0x0024,0x6890,0x03cc,0x2800,0x7480, + 0x3800,0x0024,0x2900,0x1680,0x0008,0x0510,0x3800,0x0024, + 0x0000,0x3c00,0x6400,0x0024,0x003f,0xff00,0x2800,0x6b08, + 0x0000,0x0024,0x0000,0x3fc0,0x6400,0x0024,0x0000,0x3c00, + 0x2800,0x73c5,0x6400,0x0024,0x0000,0x0024,0x2800,0x73d5, + 0x0000,0x0024,0xb880,0x184c,0x2900,0x1480,0x3009,0x3800, + 0x4082,0x9bc0,0x6014,0x0024,0x0000,0x3c04,0x2800,0x6941, + 0x0000,0x3dc1,0x2900,0x1680,0x0000,0x0024,0xf400,0x4004, + 0x0000,0x3dc1,0x6412,0x0024,0x0008,0x0490,0x2800,0x6a85, + 0x0000,0x0000,0x0000,0x0400,0x2800,0x7480,0x3800,0x0024, + 0x0008,0x04d0,0x3001,0x4024,0xa50a,0x0024,0x0000,0x03c0, + 0xb50a,0x0024,0x0000,0x0300,0x6500,0x0024,0x0000,0x0024, + 0x2900,0x1488,0x0000,0x6f48,0x0000,0x0380,0x6500,0x0024, + 0x0000,0x0024,0x2800,0x7195,0x0000,0x0024,0x2900,0x1480, + 0x0000,0x0024,0x4080,0x03cc,0x0000,0x0080,0x2800,0x70d5, + 0x0000,0x0024,0x2800,0x7480,0x3800,0x0024,0x2900,0x1680, + 0x0000,0x0024,0x408a,0x0024,0x0008,0x0510,0x3613,0x0024, + 0x3e11,0x4024,0x30f0,0x0024,0x3e10,0x0024,0x3000,0x4024, + 0x2931,0xe080,0x3e00,0x4024,0x36d3,0x0024,0x0000,0x0000, + 0x0008,0x0490,0x3800,0x0024,0x36f1,0x5810,0x36f0,0x9804, + 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, + 0x2000,0x0000,0x36f2,0x9817,0x0005,0xbe51,0x0001,0x0010, + 0x3613,0x0024,0x3e05,0xb814,0x3635,0x0024,0x0000,0x800a, + 0xb880,0x104c,0xb882,0x33c0,0x2914,0xbec0,0x0004,0xc580, + 0x0019,0x98c0,0x0004,0x4e90,0x3800,0x0024,0x001f,0xff00, + 0x2931,0x6c40,0x3900,0x0024,0x2931,0x6640,0x0000,0x0024, + 0x2900,0x5500,0x0000,0x8001,0x2912,0x0d00,0x3613,0x0024, + 0x6012,0x0024,0x0000,0x8005,0x2800,0x7b18,0x0004,0x4d50, + 0x2912,0x0d00,0x3613,0x108c,0x2934,0x4180,0x3ce0,0x0024, + 0x0000,0x1000,0x3423,0x0024,0x2900,0x0a80,0x34e1,0x0024, + 0xb882,0x0042,0x30f0,0xc024,0x4dc2,0x0024,0x3810,0x0024, + 0x2800,0x7b00,0x38f0,0x4024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x0000,0x0081,0xb880,0xb811,0x0030,0x0291,0x3e14,0x0024, + 0x0030,0x0690,0x3e14,0xb813,0x0030,0x00d3,0x0007,0x9252, + 0x3800,0x0024,0x3910,0x0024,0x3a00,0x0024,0x0000,0xc0c0, + 0x3900,0x0024,0x0030,0x0000,0x0006,0x0051,0x2908,0x6400, + 0x3b00,0x0024,0xb880,0x008c,0x3800,0x0024,0x3800,0x0024, + 0x0003,0x0d40,0x0006,0xc490,0x2908,0x7f80,0x3009,0x2000, + 0x0030,0x0ad0,0x3800,0x184c,0x002b,0x1100,0x3e10,0x0024, + 0x2909,0xa9c0,0x3e10,0x4024,0x000a,0x8001,0x2908,0x7f80, + 0x36e3,0x0024,0xb880,0x2000,0x0006,0x0010,0x3009,0x2410, + 0x0006,0x0011,0x3009,0x2410,0x0008,0x0490,0x3810,0x0024, + 0x3800,0x0024,0x0000,0x0890,0x290f,0xfcc0,0x0006,0x8380, + 0x000a,0x8001,0x0000,0x0950,0x290f,0xfcc0,0x0006,0xb380, + 0x0000,0x09c0,0x0030,0x0690,0x6890,0x2000,0x0030,0x1310, + 0x6890,0x2000,0x0030,0x0490,0x2900,0x1e00,0x3800,0x0024, + 0x36f4,0x9813,0x36f4,0x1811,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x0007,0x0001, /*copy 1*/ + 0x5800, + 0x0006,0x0004, /*copy 4*/ + 0x1800,0x1800,0x98cc,0x7395, + 0x0007,0x0001, /*copy 1*/ + 0x8025, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x1ace, + 0x0007,0x0001, /*copy 1*/ + 0x8022, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x1a0e, +#define MIDI1053_SIZE 1036 +#ifndef SKIP_PLUGIN_VARNAME +}; +#endif diff --git a/examples/Mp3PlayerDemo/Mp3PlayerDemo.ino b/examples/Mp3PlayerDemo/Mp3PlayerDemo.ino index 4633bb4..702dde3 100644 --- a/examples/Mp3PlayerDemo/Mp3PlayerDemo.ino +++ b/examples/Mp3PlayerDemo/Mp3PlayerDemo.ino @@ -74,13 +74,13 @@ void setup() { // initialize SPI SPI.begin(); - Serial.println("Hello VS1053!\n"); + Serial.println("Hello VS1003/53!"); // initialize a player player.begin(); + player.switchToMp3Mode(); // optional, some boards require this if (player.getChipVersion() == 4) { // Only perform an update if we really are using a VS1053, not. eg. VS1003 player.loadDefaultVs1053Patches(); } - player.switchToMp3Mode(); // optional, some boards require this player.setVolume(VOLUME); } diff --git a/examples/WebRadioDemo/WebRadioDemo.ino b/examples/WebRadioDemo/WebRadioDemo.ino index d9889f1..a5b7dc8 100644 --- a/examples/WebRadioDemo/WebRadioDemo.ino +++ b/examples/WebRadioDemo/WebRadioDemo.ino @@ -101,10 +101,10 @@ void setup() { SPI.begin(); player.begin(); + player.switchToMp3Mode(); if (player.getChipVersion() == 4) { // Only perform an update if we really are using a VS1053, not. eg. VS1003 player.loadDefaultVs1053Patches(); } - player.switchToMp3Mode(); player.setVolume(VOLUME); Serial.print("Connecting to SSID "); diff --git a/src/VS1053.cpp b/src/VS1053.cpp index 15fd575..3f9c000 100644 --- a/src/VS1053.cpp +++ b/src/VS1053.cpp @@ -244,6 +244,46 @@ void VS1053::playChunk(uint8_t *data, size_t len) { sdi_send_buffer(data, len); } + +/** + * send a MIDI message + * + * a MIDI message ranges from 1 byte to three bytes + * the first byte consists of 4 command bits and 4 channel bits + * + * based on talkMIDI function in MP3_Shield_RealtimeMIDI demo by Matthias Neeracher, + * which is based on Nathan Seidle's Sparkfun Electronics example + */ + +void VS1053::sendMidiMessage(uint8_t cmd, uint8_t data1, uint8_t data2) { + + digitalWrite(dcs_pin, LOW); //data_mode_on() does not seem to work here + + // await_data_request() works for VS1053 and provides from overrunning the input buffer, + // which is unlikely to happen in RTMidi + // for VS1003 for some reason sometimes DREQ is ALWAYS down + // Hence, in case of running to an infinite loop, commenting await_data_request() is the solution + await_data_request(); + + SPI.write(0x00); + SPI.write(cmd); + + // Some commands only have one data byte. All cmds less than 0xBn have 2 data bytes + // (sort of: http://253.ccarh.org/handout/midiprotocol/) + if( (cmd & 0xF0) <= 0xB0 || (cmd & 0xF0) >= 0xE0) { + SPI.write(0x00); + SPI.write(data1); + SPI.write(0x00); + SPI.write(data2); + } else { + SPI.write(0x00); + SPI.write(data1); + } + + digitalWrite(dcs_pin, HIGH); //data_mode_off() does not seem to work here + +} + void VS1053::stopSong() { uint16_t modereg; // Read from mode register int i; // Loop control diff --git a/src/VS1053.h b/src/VS1053.h index 9faf7b6..1dc83a6 100644 --- a/src/VS1053.h +++ b/src/VS1053.h @@ -135,7 +135,10 @@ class VS1053 { // Play a chunk of data. Copies the data to the chip. Blocks until complete void playChunk(uint8_t *data, size_t len); - + + // performs a MIDI command + void sendMidiMessage(uint8_t cmd, uint8_t data1, uint8_t data2); + // Finish playing a song. Call this after the last playChunk call void stopSong(); diff --git a/src/patches/rtmidi1003b.h b/src/patches/rtmidi1003b.h new file mode 100644 index 0000000..0afcc5d --- /dev/null +++ b/src/patches/rtmidi1003b.h @@ -0,0 +1,89 @@ +#ifndef SKIP_PLUGIN_VARNAME +const unsigned short MIDI1003[] = { /* Compressed plugin */ +#endif + 0x0007,0x0001, /*copy 1*/ + 0x8030, + 0x0006,0x01ee, /*copy 494*/ + 0x2800,0x38c0,0x0006,0x2016,0x3613,0x0024,0x0006,0x0057, + 0x3e15,0x1c15,0x0020,0x1fd4,0x3580,0x3802,0xf204,0x3804, + 0x0fff,0xfe44,0xa244,0x1804,0xf400,0x4094,0x2800,0x0f85, + 0x3009,0x1bc2,0xf400,0x4500,0x2000,0x0000,0x36f5,0x3c15, + 0x3009,0x3857,0x0030,0x0a57,0x3e14,0xf806,0x3701,0x8024, + 0x0006,0x0017,0x3e04,0x9c13,0x0020,0x1fd2,0x3b81,0x8024, + 0x36f4,0xbc13,0x36f4,0xd806,0x0030,0x0717,0x2100,0x0000, + 0x3f05,0xdbd7,0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814, + 0x3615,0x0024,0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000, + 0x36f2,0x9815,0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814, + 0x3615,0x0024,0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000, + 0x36f2,0x9815,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x3e10,0xb804,0x3e01,0x7810,0x0030,0x00d0,0x2900,0x0400, + 0x3001,0x0024,0x4080,0x03cc,0x3000,0x0024,0x2800,0x36c5, + 0x4090,0x0024,0x0000,0x0024,0x2800,0x2485,0x0000,0x0024, + 0x0000,0x0081,0x3000,0x0024,0x6012,0x0024,0x0000,0x0401, + 0x2800,0x3305,0x0000,0x0024,0x6012,0x0024,0x0000,0x0024, + 0x2800,0x2885,0x0000,0x0024,0x2900,0x0c80,0x0000,0x0024, + 0x4088,0x008c,0x0000,0x2000,0x6400,0x0024,0x0000,0x3c00, + 0x2800,0x2118,0x0000,0x0024,0x2800,0x2540,0x3801,0x0024, + 0x6400,0x038c,0x0000,0x0024,0x2800,0x2558,0x0000,0x0024, + 0x3013,0x0024,0x2900,0x0400,0x3801,0x0024,0x4080,0x0024, + 0x0000,0x0024,0x2800,0x2495,0x0000,0x0024,0x6890,0x03cc, + 0x2800,0x36c0,0x3800,0x0024,0x2900,0x0c80,0x0030,0x0110, + 0x3800,0x0024,0x0000,0x3c00,0x6400,0x0024,0x003f,0xff00, + 0x2800,0x2d48,0x0000,0x0024,0x0000,0x3fc0,0x6400,0x0024, + 0x0000,0x3c00,0x2800,0x3605,0x6400,0x0024,0x0000,0x0024, + 0x2800,0x3615,0x0000,0x0024,0xb880,0x184c,0x2900,0x0400, + 0x3009,0x3800,0x4082,0x9bc0,0x6014,0x0024,0x0000,0x3c04, + 0x2800,0x2b81,0x0000,0x3dc1,0x2900,0x0c80,0x0000,0x0024, + 0xf400,0x4004,0x0000,0x3dc1,0x6412,0x0024,0x0030,0x0090, + 0x2800,0x2cc5,0x0000,0x0000,0x0000,0x0400,0x2800,0x36c0, + 0x3800,0x0024,0x0030,0x00d0,0x3001,0x4024,0xa50a,0x0024, + 0x0000,0x03c0,0xb50a,0x0024,0x0000,0x0300,0x6500,0x0024, + 0x0000,0x0024,0x2900,0x0408,0x0000,0x3188,0x0000,0x0380, + 0x6500,0x0024,0x0000,0x0024,0x2800,0x33d5,0x0000,0x0024, + 0x2900,0x0400,0x0000,0x0024,0x4080,0x03cc,0x0000,0x0080, + 0x2800,0x3315,0x0000,0x0024,0x2800,0x36c0,0x3800,0x0024, + 0x2900,0x0c80,0x0000,0x0024,0x408a,0x0024,0x0030,0x0110, + 0x3613,0x0024,0x3e11,0x4024,0x30f0,0x0024,0x3e10,0x0024, + 0x3000,0x4024,0x2926,0xa140,0x3e00,0x4024,0x36d3,0x0024, + 0x0000,0x0000,0x0030,0x0090,0x3800,0x0024,0x36f1,0x5810, + 0x36f0,0x9804,0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024, + 0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817,0x002b,0x1105, + 0x0030,0x00d2,0x0030,0x0690,0x0030,0x0291,0x0000,0x0084, + 0x0006,0x6853,0x3e05,0xb814,0x3635,0x0024,0x0000,0x800a, + 0xb880,0x0024,0x3800,0x0024,0x3910,0x0024,0x0000,0xc0c0, + 0x3900,0x0024,0x0006,0x0051,0x0030,0x0000,0x2910,0x3740, + 0x3a00,0x0024,0xb880,0x010c,0x38e0,0x184c,0x3800,0x0024, + 0x3800,0x0024,0x0000,0x0f00,0x0006,0x0010,0x3009,0x2c00, + 0x0003,0x1e40,0x3009,0x2410,0x0006,0x0011,0x3009,0x2410, + 0x0030,0x0ad0,0x3800,0x0024,0x0000,0x09c0,0x0030,0x0690, + 0x2910,0x7780,0x3800,0x0024,0x0001,0x0010,0xb882,0x0024, + 0x291d,0x5800,0x0002,0xdc00,0x001f,0xff00,0x0003,0xda90, + 0x2926,0x1440,0x3800,0x0024,0x2926,0x0e40,0x0030,0x0490, + 0x6890,0x0024,0x3800,0x0024,0x2900,0x1740,0x0000,0x8001, + 0x2919,0x8180,0x3613,0x0024,0x6012,0x0024,0x0003,0xd950, + 0x2800,0x4498,0x0000,0x0024,0x2919,0x8180,0x3613,0x104c, + 0x2928,0xce40,0x3c00,0x0024,0x0000,0x1000,0x2900,0x0a80, + 0x34f1,0x0024,0xb882,0x0042,0x30f0,0xc024,0x4dc2,0x0024, + 0x3810,0x0024,0x2800,0x4480,0x38f0,0x4024, + 0x0007,0x0001, /*copy 1*/ + 0x5800, + 0x0006, 0x8002, 0x1800, /*Rle(2)*/ + 0x0007,0x0001, /*copy 1*/ + 0x8010, + 0x0006,0x0016, /*copy 22*/ + 0xf400,0x4095,0x0006,0x0017,0x3009,0x1c40,0x3009,0x1fc2, + 0x6020,0x0024,0x0000,0x1fc2,0x2000,0x0000,0xb020,0x4542, + 0x3009,0x3857,0x2800,0x1080,0x0030,0x0457, + 0x0007,0x0001, /*copy 1*/ + 0x8025, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x100e, + 0x0007,0x0001, /*copy 1*/ + 0x8022, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x060e, +#define MIDI1003_SIZE 546 +#ifndef SKIP_PLUGIN_VARNAME +}; +#endif diff --git a/src/patches/rtmidi1053b.h b/src/patches/rtmidi1053b.h new file mode 100644 index 0000000..8f19eda --- /dev/null +++ b/src/patches/rtmidi1053b.h @@ -0,0 +1,148 @@ +#ifndef SKIP_PLUGIN_VARNAME +const unsigned short MIDI1053[] = { /* Compressed plugin */ +#endif + 0x0007,0x0001, /*copy 1*/ + 0x8050, + 0x0006,0x03f0, /*copy 1008*/ + 0x2800,0x8080,0x0006,0x2016,0xf400,0x4095,0x0006,0x0017, + 0x3009,0x1c40,0x3009,0x1fc2,0x6020,0x0024,0x0000,0x1fc2, + 0x2000,0x0000,0xb020,0x4542,0x3613,0x0024,0x0006,0x0057, + 0x3e15,0x1c15,0x0020,0x1fd4,0x3580,0x3802,0xf204,0x3804, + 0x0fff,0xfe44,0xa244,0x1804,0xf400,0x4094,0x2800,0x1985, + 0x3009,0x1bc2,0xf400,0x4500,0x2000,0x0000,0x36f5,0x3c15, + 0x3009,0x3857,0x2800,0x1b40,0x0030,0x0457,0x3009,0x3857, + 0x0030,0x0a57,0x3e14,0xf806,0x3701,0x8024,0x0006,0x0017, + 0x3e04,0x9c13,0x0020,0x1fd2,0x3b81,0x8024,0x36f4,0xbc13, + 0x36f4,0xd806,0x0030,0x0717,0x2100,0x0000,0x3f05,0xdbd7, + 0x0030,0xf80f,0x0000,0x1f0e,0x2800,0x7680,0x0000,0x004d, + 0xf400,0x4595,0x3e00,0x17cc,0x3505,0xf802,0x3773,0x0024, + 0x3763,0x0024,0x3700,0x0024,0x0000,0x09c2,0x6024,0x0024, + 0x3600,0x1802,0x2830,0xf855,0x0000,0x004d,0x2800,0x2240, + 0x36f3,0x0024,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3625,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x3e10,0xb803,0x3e11,0x3810,0x3e04,0x7812,0x34c3,0x0024, + 0x3440,0x0024,0x4080,0x0024,0x001b,0x3301,0x2800,0x2c85, + 0x0000,0x0180,0x0000,0x0551,0x0000,0xaf02,0x293c,0x1f40, + 0x0007,0xffc1,0xb010,0x134c,0x0018,0x0001,0x4010,0x10d0, + 0x0007,0xffc1,0xfe20,0x020c,0x0000,0x0591,0x48b6,0x0024, + 0x4dd6,0x0024,0x0001,0x2202,0x293c,0x1f40,0x4380,0x2003, + 0xb010,0x134c,0x0018,0x0001,0x4010,0x1010,0xfe20,0x020c, + 0x48b6,0x844c,0x4dd6,0x0024,0xb880,0x2003,0x3434,0x0024, + 0x2800,0x5280,0x3083,0x0024,0x001c,0xccc2,0x0000,0x05d1, + 0x34d3,0x0024,0x3404,0x0024,0x3404,0x420c,0x3001,0x05cc, + 0xa408,0x044c,0x3100,0x0024,0x6010,0x0024,0xfe20,0x0024, + 0x48b6,0x0024,0x4dd6,0x0024,0x4310,0x0024,0x4488,0x2400, + 0x0000,0x0551,0x2800,0x3295,0x3404,0x0024,0xf290,0x00cc, + 0x3800,0x0024,0x3434,0x0024,0x3073,0x0024,0x3013,0x0024, + 0x2800,0x4340,0x3800,0x0024,0x3083,0x0024,0x3000,0x0024, + 0x6402,0x0024,0x0000,0x1001,0x2800,0x3618,0x0018,0x0002, + 0x3434,0x4024,0x3133,0x0024,0x3100,0x0024,0xfe20,0x0024, + 0x48b6,0x0024,0x4dd6,0x0024,0x2800,0x4340,0x3900,0xc024, + 0x4010,0x1011,0x6402,0x0024,0x0000,0x0590,0x2800,0x3918, + 0x0000,0x0024,0xf290,0x04cc,0x3900,0x0024,0x3434,0x0024, + 0x3073,0x0024,0x3013,0x0024,0x2800,0x4340,0x3800,0x0024, + 0x3183,0x0024,0x3100,0x0024,0x6402,0x0024,0x0000,0x1001, + 0x2800,0x3c98,0x0019,0x9982,0x3434,0x0024,0x3033,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x2800,0x4340,0x3800,0xc024,0x4010,0x0024,0x6402,0x0024, + 0x001d,0x7082,0x2800,0x4198,0x0000,0x0024,0xf290,0x1010, + 0x3033,0x0024,0x3800,0x0024,0x3404,0x0024,0x3073,0x0024, + 0x3013,0x0024,0x3800,0x0024,0x0004,0x4d50,0x3010,0x0024, + 0x30f0,0x4024,0x3434,0x4024,0x3143,0x0024,0x3910,0x0024, + 0x2800,0x4340,0x39f0,0x4024,0x3434,0x0024,0x3033,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x3800,0xc024,0x001e,0x9982,0x0001,0x1012,0x0000,0x0381, + 0x34d3,0x184c,0x3444,0x0024,0x3073,0x0024,0x3013,0x0024, + 0x3000,0x0024,0xfe20,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x4380,0x3003,0x3400,0x0024,0x293d,0x2900,0x3e00,0x0024, + 0x3009,0x33c0,0x293b,0xc540,0x0010,0x0004,0x34d3,0x184c, + 0x3444,0x0024,0x3073,0x13c0,0x3073,0x0024,0x293b,0xf880, + 0x0001,0x1011,0x0001,0x0010,0x0001,0x1011,0x34d3,0x184c, + 0x3430,0x0024,0x4010,0x0024,0x0000,0x05c1,0x3e10,0x0024, + 0x293b,0xac80,0x0006,0x0092,0x0000,0x05d1,0x36f3,0x134c, + 0x3404,0x0024,0x3083,0x0024,0x3000,0x0024,0x6012,0x0024, + 0x0013,0x3304,0x2800,0x5198,0x0001,0xc682,0x0000,0x0500, + 0x0001,0x0012,0x3404,0x584c,0x3133,0x0024,0x3100,0x4024, + 0x0000,0x05d1,0xfe22,0x0024,0x48b6,0x0024,0x4dd6,0x0024, + 0x3e10,0xc024,0x3430,0x8024,0x4204,0x0024,0x293b,0xb580, + 0x3e00,0x8024,0x36e3,0x134c,0x3434,0x0024,0x3083,0x0024, + 0x3000,0x0024,0x6090,0x0024,0x3800,0x1812,0x36f4,0x4024, + 0x36f1,0x1810,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb804, + 0x3e01,0x7810,0x0008,0x04d0,0x2900,0x1480,0x3001,0x0024, + 0x4080,0x03cc,0x3000,0x0024,0x2800,0x7485,0x4090,0x0024, + 0x0000,0x0024,0x2800,0x6245,0x0000,0x0024,0x0000,0x0081, + 0x3000,0x0024,0x6012,0x0024,0x0000,0x0401,0x2800,0x70c5, + 0x0000,0x0024,0x6012,0x0024,0x0000,0x0024,0x2800,0x6645, + 0x0000,0x0024,0x2900,0x1680,0x0000,0x0024,0x4088,0x008c, + 0x0000,0x2000,0x6400,0x0024,0x0000,0x3c00,0x2800,0x5ed8, + 0x0000,0x0024,0x2800,0x6300,0x3801,0x0024,0x6400,0x038c, + 0x0000,0x0024,0x2800,0x6318,0x0000,0x0024,0x3013,0x0024, + 0x2900,0x1480,0x3801,0x0024,0x4080,0x0024,0x0000,0x0024, + 0x2800,0x6255,0x0000,0x0024,0x6890,0x03cc,0x2800,0x7480, + 0x3800,0x0024,0x2900,0x1680,0x0008,0x0510,0x3800,0x0024, + 0x0000,0x3c00,0x6400,0x0024,0x003f,0xff00,0x2800,0x6b08, + 0x0000,0x0024,0x0000,0x3fc0,0x6400,0x0024,0x0000,0x3c00, + 0x2800,0x73c5,0x6400,0x0024,0x0000,0x0024,0x2800,0x73d5, + 0x0000,0x0024,0xb880,0x184c,0x2900,0x1480,0x3009,0x3800, + 0x4082,0x9bc0,0x6014,0x0024,0x0000,0x3c04,0x2800,0x6941, + 0x0000,0x3dc1,0x2900,0x1680,0x0000,0x0024,0xf400,0x4004, + 0x0000,0x3dc1,0x6412,0x0024,0x0008,0x0490,0x2800,0x6a85, + 0x0000,0x0000,0x0000,0x0400,0x2800,0x7480,0x3800,0x0024, + 0x0008,0x04d0,0x3001,0x4024,0xa50a,0x0024,0x0000,0x03c0, + 0xb50a,0x0024,0x0000,0x0300,0x6500,0x0024,0x0000,0x0024, + 0x2900,0x1488,0x0000,0x6f48,0x0000,0x0380,0x6500,0x0024, + 0x0000,0x0024,0x2800,0x7195,0x0000,0x0024,0x2900,0x1480, + 0x0000,0x0024,0x4080,0x03cc,0x0000,0x0080,0x2800,0x70d5, + 0x0000,0x0024,0x2800,0x7480,0x3800,0x0024,0x2900,0x1680, + 0x0000,0x0024,0x408a,0x0024,0x0008,0x0510,0x3613,0x0024, + 0x3e11,0x4024,0x30f0,0x0024,0x3e10,0x0024,0x3000,0x4024, + 0x2931,0xe080,0x3e00,0x4024,0x36d3,0x0024,0x0000,0x0000, + 0x0008,0x0490,0x3800,0x0024,0x36f1,0x5810,0x36f0,0x9804, + 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, + 0x2000,0x0000,0x36f2,0x9817,0x0005,0xbe51,0x0001,0x0010, + 0x3613,0x0024,0x3e05,0xb814,0x3635,0x0024,0x0000,0x800a, + 0xb880,0x104c,0xb882,0x33c0,0x2914,0xbec0,0x0004,0xc580, + 0x0019,0x98c0,0x0004,0x4e90,0x3800,0x0024,0x001f,0xff00, + 0x2931,0x6c40,0x3900,0x0024,0x2931,0x6640,0x0000,0x0024, + 0x2900,0x5500,0x0000,0x8001,0x2912,0x0d00,0x3613,0x0024, + 0x6012,0x0024,0x0000,0x8005,0x2800,0x7b18,0x0004,0x4d50, + 0x2912,0x0d00,0x3613,0x108c,0x2934,0x4180,0x3ce0,0x0024, + 0x0000,0x1000,0x3423,0x0024,0x2900,0x0a80,0x34e1,0x0024, + 0xb882,0x0042,0x30f0,0xc024,0x4dc2,0x0024,0x3810,0x0024, + 0x2800,0x7b00,0x38f0,0x4024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x0000,0x0081,0xb880,0xb811,0x0030,0x0291,0x3e14,0x0024, + 0x0030,0x0690,0x3e14,0xb813,0x0030,0x00d3,0x0007,0x9252, + 0x3800,0x0024,0x3910,0x0024,0x3a00,0x0024,0x0000,0xc0c0, + 0x3900,0x0024,0x0030,0x0000,0x0006,0x0051,0x2908,0x6400, + 0x3b00,0x0024,0xb880,0x008c,0x3800,0x0024,0x3800,0x0024, + 0x0003,0x0d40,0x0006,0xc490,0x2908,0x7f80,0x3009,0x2000, + 0x0030,0x0ad0,0x3800,0x184c,0x002b,0x1100,0x3e10,0x0024, + 0x2909,0xa9c0,0x3e10,0x4024,0x000a,0x8001,0x2908,0x7f80, + 0x36e3,0x0024,0xb880,0x2000,0x0006,0x0010,0x3009,0x2410, + 0x0006,0x0011,0x3009,0x2410,0x0008,0x0490,0x3810,0x0024, + 0x3800,0x0024,0x0000,0x0890,0x290f,0xfcc0,0x0006,0x8380, + 0x000a,0x8001,0x0000,0x0950,0x290f,0xfcc0,0x0006,0xb380, + 0x0000,0x09c0,0x0030,0x0690,0x6890,0x2000,0x0030,0x1310, + 0x6890,0x2000,0x0030,0x0490,0x2900,0x1e00,0x3800,0x0024, + 0x36f4,0x9813,0x36f4,0x1811,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x0007,0x0001, /*copy 1*/ + 0x5800, + 0x0006,0x0004, /*copy 4*/ + 0x1800,0x1800,0x98cc,0x7395, + 0x0007,0x0001, /*copy 1*/ + 0x8025, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x1ace, + 0x0007,0x0001, /*copy 1*/ + 0x8022, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x1a0e, +#define MIDI1053_SIZE 1036 +#ifndef SKIP_PLUGIN_VARNAME +}; +#endif