diff --git a/MicroMDAPiano.ino b/MicroMDAPiano.ino index 95c2b6e..aad14e5 100644 --- a/MicroMDAPiano.ino +++ b/MicroMDAPiano.ino @@ -1,9 +1,22 @@ -void setup() { - // put your setup code here, to run once: +#include "mdaEPianoData.h" +void setup() { + Serial.begin(38400); + delay(500); + Serial.println("START"); + Serial.println(sizeof(epianoData),DEC); + uint32_t i; + + for(i=0;i + + 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 + (at your option) any 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include "midinotes.h" + +// ATTENTION! For better latency you have to redefine AUDIO_BLOCK_SAMPLES from +// 128 to 64 in /cores/teensy3/AudioStream.h + +// Initial values +#define USE_ONBOARD_USB_HOST 1 +#define TEENSY_AUDIO_BOARD 1 +#define VOLUME 0.6 +#define DEFAULT_MIDI_CHANNEL MIDI_CHANNEL_OMNI +#define AUDIO_MEM 2 +#define SAMPLE_RATE 44100 + +#if !defined(__MK66FX1M0__) // check for Teensy-3.6 +#define MAX_NOTES 11 // No? +#undef USE_ONBOARD_USB_HOST +#else +#define MAX_NOTES 16 // Yes +#endif + +// Debug output +#define SERIAL_SPEED 38400 +#define DEBUG 1 +#define SHOW_MIDI_EVENT 1 +#define SHOW_XRUN 1 +#define SHOW_CPU_LOAD_MSEC 5000 + +// Use these with the Teensy Audio Shield +//#define SDCARD_CS_PIN 10 +//#define SDCARD_MOSI_PIN 7 +//#define SDCARD_SCK_PIN 14 +// Use these with the Teensy 3.5 & 3.6 SD card +#define SDCARD_CS_PIN BUILTIN_SDCARD +#define SDCARD_MOSI_PIN 11 // not actually used +#define SDCARD_SCK_PIN 13 // not actually used + +// Encoder with button +#define ENC1_PIN_A 14 +#define ENC1_PIN_B 15 +#define BUT1_PIN 16 +#define INITIAL_ENC1_VALUE 0 + +// EEPROM address +#define EEPROM_OFFSET 0 +#define EEPROM_DATA_LENGTH 5 + +#define EEPROM_CRC32_ADDR EEPROM.length()-sizeof(uint32_t) +#define EEPROM_BANK_ADDR 0 +#define EEPROM_VOICE_ADDR 1 +#define EEPROM_MASTER_VOLUME_ADDR 2 +#define EEPROM_VOLUME_RIGHT_ADDR 3 +#define EEPROM_VOLUME_LEFT_ADDR 4 + diff --git a/mdaEPiano.cpp b/mdaEPiano.cpp index 6606fb9..f69d89d 100644 --- a/mdaEPiano.cpp +++ b/mdaEPiano.cpp @@ -4,12 +4,12 @@ #include #include -AudioEffect *createEffectInstance(audioMasterCallback audioMaster) -{ - return new mdaEPiano(audioMaster); -} +// AudioEffect *createEffectInstance(audioMasterCallback audioMaster) +//{ +// return new mdaEPiano(audioMaster); +//} -mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NPROGS, NPARAMS) +mdaEPiano::mdaEPiano() // mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NPROGS, NPARAMS) { Fs = 44100.0f; iFs = 1.0f/Fs; //just in case... @@ -17,7 +17,7 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster if(programs) { //fill patches... - VstInt32 i=0; + int32_t i=0; fillpatch(i++, "Default", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); fillpatch(i++, "Bright", 0.500f, 0.500f, 1.000f, 0.800f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.500f); fillpatch(i++, "Mellow", 0.500f, 0.500f, 0.000f, 0.000f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f); @@ -29,6 +29,7 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster setProgram(0); } +/* if(audioMaster) { setNumInputs(0); @@ -37,8 +38,8 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster isSynth(); setUniqueID('MDAe'); /// } - - waves = epianoData; +*/ + waves = (short*)epianoData; //Waveform data and keymapping kgrp[ 0].root = 36; kgrp[ 0].high = 39; //C1 @@ -88,10 +89,10 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster kgrp[32].pos = 414487; kgrp[32].end = 422408; kgrp[32].loop = 2169; //extra xfade looping... - for(VstInt32 k=0; k<28; k++) + for(int32_t k=0; k<28; k++) { - VstInt32 p0 = kgrp[k].end; - VstInt32 p1 = kgrp[k].end - kgrp[k].loop; + int32_t p0 = kgrp[k].end; + int32_t p1 = kgrp[k].end - kgrp[k].loop; float xf = 1.0f; float dxf = -0.02f; @@ -106,7 +107,7 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster } //initialise... - for(VstInt32 v=0; v 0.5f) tfrq = 14000.0f; else tfrq = 5000.0f; //treble freq @@ -142,7 +143,7 @@ void mdaEPiano::update() //parameter change if(param[6] < 0.25f) velsens -= 0.75f - 3.0f * param[6]; width = 0.03f * param[7]; - poly = 1 + (VstInt32)(31.9f * param[8]); + poly = 1 + (int32_t)(31.9f * param[8]); fine = param[9] - 0.5f; random = 0.077f * param[10] * param[10]; stretch = 0.0f; //0.000434f * (param[11] - 0.5f); parameter re-used for overdrive! @@ -152,11 +153,12 @@ void mdaEPiano::update() //parameter change void mdaEPiano::resume() { - Fs = getSampleRate(); + //Fs = getSampleRate(); + Fs=44100; iFs = 1.0f / Fs; dlfo = 6.283f * iFs * (float)exp(6.22f * programs[curProgram].param[5] - 2.61f); //lfo rate - DECLARE_VST_DEPRECATED (wantEvents) (); + //DECLARE_VST_DEPRECATED (wantEvents) (); } @@ -166,14 +168,14 @@ mdaEPiano::~mdaEPiano () //destroy any buffers... } -void mdaEPiano::setProgram(VstInt32 program) +void mdaEPiano::setProgram(int32_t program) { curProgram = program; update(); } -void mdaEPiano::setParameter(VstInt32 index, float value) +void mdaEPiano::setParameter(int32_t index, float value) { programs[curProgram].param[index] = value; update(); @@ -184,7 +186,7 @@ void mdaEPiano::setParameter(VstInt32 index, float value) } -void mdaEPiano::fillpatch(VstInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, +void mdaEPiano::fillpatch(int32_t p, char *name, float p0, float p1, float p2, float p3, float p4, float p5, float p6, float p7, float p8, float p9, float p10,float p11) { strcpy(programs[p].name, name); @@ -196,17 +198,17 @@ void mdaEPiano::fillpatch(VstInt32 p, char *name, float p0, float p1, float p2, programs[p].param[10]= p10; programs[p].param[11] = p11; } - -float mdaEPiano::getParameter(VstInt32 index) { return programs[curProgram].param[index]; } +/* +float mdaEPiano::getParameter(int32_t index) { return programs[curProgram].param[index]; } void mdaEPiano::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaEPiano::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } -void mdaEPiano::setBlockSize(VstInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } +void mdaEPiano::setBlockSize(int32_t blockSize) { AudioEffectX::setBlockSize(blockSize); } bool mdaEPiano::getEffectName(char* name) { strcpy(name, "ePiano"); return true; } bool mdaEPiano::getVendorString(char* text) { strcpy(text, "mda"); return true; } bool mdaEPiano::getProductString(char* text) { strcpy(text, "mda ePiano"); return true; } -bool mdaEPiano::getOutputProperties(VstInt32 index, VstPinProperties* properties) +bool mdaEPiano::getOutputProperties(int32_t index, VstPinProperties* properties) { if(index