Added fixed version of Synth_Dexed to third-party software folder.

pull/44/head
Holger Wirtz 3 years ago
parent 734b23dc35
commit 2c9c54c517
  1. 172
      third-party/Synth_Dexed/README.md
  2. 2
      third-party/Synth_Dexed/examples/synth_dexed.ino
  3. 5
      third-party/Synth_Dexed/src/synth_dexed.cpp
  4. 2
      third-party/Synth_Dexed/src/synth_dexed.h

@ -1,2 +1,172 @@
# synth_dexed # Synth_Dexed
Synth_Dexed is a port of the Dexed sound engine
(https://github.com/asb2m10/dexed) as library for the Teensy-3.5/3.6/4.x with
an audio shield. Dexed ist heavily based on
https://github.com/google/music-synthesizer-for-android .
Synth_Dexed ist SYSEX compatible with a famous 6-OP FM synth and is used in MicroDexed (https://codeberg.org/dcoredump/MicroDexed).
## License
MicroDexed is licensed on the GPL v3. The msfa component (acronym for music synthesizer for android, see https://github.com/google/music-synthesizer-for-android) stays on the Apache 2.0 license to able to collaborate between projects.
## Credits & thanks
* Dexed engine by Pascal Gauthier (asb2m10)
* DX Synth engine (as part of Dexed): Raph Levien and the msfa team
* PPPlay : Great OPL3 implementation, with documented code :D
* Thierry Pottier: for extreme testing, discussing about different options, images and many good suggestions for UI handling
* Lars Pelz: Testing and documentation
* Mark (@positionhigh) for testing
## Usage
See example sketch.
## API
AudioSynthDexed(uint8_t max_notes, uint16_t sample_rate);
// Global methods
void activate(void);
void deactivate(void);
void setMonoMode(bool mode);
bool getMonoMode(void);
void setRefreshMode(bool mode);
bool getRefreshMode(void);
void setMaxNotes(uint8_t n);
uint8_t getMaxNotes(void);
void doRefreshVoice(void);
bool decodeVoice(uint8_t* encoded_data, uint8_t* data);
bool encodeVoice(uint8_t* encoded_data);
bool getVoiceData(uint8_t* data_copy);
void setVoiceDataElement(uint8_t address, uint8_t value);
uint8_t getVoiceDataElement(uint8_t address);
void loadInitVoice(void);
void loadVoiceParameters(uint8_t* data);
uint8_t getNumNotesPlaying(void);
uint32_t getXRun(void);
uint16_t getRenderTimeMax(void);
void resetRenderTimeMax(void);
void ControllersRefresh(void);
// Sound methods
void keyup(int16_t pitch);
void keydown(int16_t pitch, uint8_t velo);
void setSustain(bool sustain);
bool getSustain(void);
void panic(void);
void notesOff(void);
void resetControllers(void);
void setMasterTune(int8_t mastertune);
int8_t getMasterTune(void);
void setPortamentoMode(uint8_t portamento_mode, uint8_t portamento_glissando, uint8_t portamento_time);
void setPBController(uint8_t pb_range, uint8_t pb_step);
void setMWController(uint8_t mw_range, uint8_t mw_assign, uint8_t mw_mode);
void setFCController(uint8_t fc_range, uint8_t fc_assign, uint8_t fc_mode);
void setBCController(uint8_t bc_range, uint8_t bc_assign, uint8_t bc_mode);
void setATController(uint8_t at_range, uint8_t at_assign, uint8_t at_mode);
void setModWheel(uint8_t value);
uint8_t getModWheel(void);
void setBreathController(uint8_t value);
uint8_t getBreathController(void);
void setFootController(uint8_t value);
uint8_t getFootController(void);
void setAftertouch(uint8_t value);
uint8_t getAftertouch(void);
void setPitchbend(int16_t value);
int16_t getPitchbend(void);
void setPitchbendRange(uint8_t range);
uint8_t getPitchbendRange(void);
void setPitchbendStep(uint8_t step);
uint8_t getPitchbendStep(void);
void setModWheelRange(uint8_t range);
uint8_t getModWheelRange(void);
void setModWheelTarget(uint8_t target);
uint8_t getModWheelTarget(void);
void setFootControllerRange(uint8_t range);
uint8_t getFootControllerRange(void);
void setFootControllerTarget(uint8_t target);
uint8_t getFootControllerTarget(void);
void setBreathControllerRange(uint8_t range);
uint8_t getBreathControllerRange(void);
void setBreathControllerTarget(uint8_t target);
uint8_t getBreathControllerTarget(void);
void setAftertouchRange(uint8_t range);
uint8_t getAftertouchRange(void);
void setAftertouchTarget(uint8_t target);
uint8_t getAftertouchTarget(void);
void setFilterCutoff(float cutoff);
float getFilterCutoff(void);
void setFilterResonance(float resonance);
float getFilterResonance(void);
void setGain(float gain);
float getGain(void);
// Voice configuration methods
void setOPAll(uint8_t ops);
void setOP(uint8_t op, bool state);
bool getOP(uint8_t op);
void setOPRateAll(uint8_t rate);
void setOPLevelAll(uint8_t level);
void setOPRateAllCarrier(uint8_t step, uint8_t rate);
void setOPLevelAllCarrier(uint8_t step, uint8_t level);
void setOPRateAllModulator(uint8_t step, uint8_t rate);
void setOPLevelAllModulator(uint8_t step, uint8_t level);
void setOPRate(uint8_t op, uint8_t step, uint8_t rate);
uint8_t getOPRate(uint8_t op, uint8_t step);
void setOPLevel(uint8_t op, uint8_t step, uint8_t level);
uint8_t getOPLevel(uint8_t op, uint8_t step);
void setOPKeyboardLevelScalingBreakPoint(uint8_t op, uint8_t level);
uint8_t getOPKeyboardLevelScalingBreakPoint(uint8_t op);
void setOPKeyboardLevelScalingDepthLeft(uint8_t op, uint8_t depth);
uint8_t getOPKeyboardLevelScalingDepthLeft(uint8_t op);
void setOPKeyboardLevelScalingDepthRight(uint8_t op, uint8_t depth);
uint8_t getOPKeyboardLevelScalingDepthRight(uint8_t op);
void setOPKeyboardLevelScalingCurveLeft(uint8_t op, uint8_t curve);
uint8_t getOPKeyboardLevelScalingCurveLeft(uint8_t op);
void setOPKeyboardLevelScalingCurveRight(uint8_t op, uint8_t curve);
uint8_t getOPKeyboardLevelScalingCurveRight(uint8_t op);
void setOPKeyboardRateScale(uint8_t op, uint8_t scale);
uint8_t getOPKeyboardRateScale(uint8_t op);
void setOPAmpModulationSensity(uint8_t op, uint8_t sensitivity);
uint8_t getOPAmpModulationSensity(uint8_t op);
void setOPKeyboardVelocitySensity(uint8_t op, uint8_t sensitivity);
uint8_t getOPKeyboardVelocitySensity(uint8_t op);
void setOPOutputLevel(uint8_t op, uint8_t level);
uint8_t getOPOutputLevel(uint8_t op);
void setOPMode(uint8_t op, uint8_t mode);
uint8_t getOPMode(uint8_t op);
void setOPFrequencyCoarse(uint8_t op, uint8_t frq_coarse);
uint8_t getOPFrequencyCoarse(uint8_t op);
void setOPFrequencyFine(uint8_t op, uint8_t frq_fine);
uint8_t getOPFrequencyFine(uint8_t op);
void setOPDetune(uint8_t op, uint8_t detune);
uint8_t getOPDetune(uint8_t op);
void setPitchRate(uint8_t step, uint8_t rate);
uint8_t getPitchRate(uint8_t step);
void setPitchLevel(uint8_t step, uint8_t level);
uint8_t getPitchLevel(uint8_t step);
void setAlgorithm(uint8_t algorithm);
uint8_t getAlgorithm(void);
void setFeedback(uint8_t feedback);
uint8_t getFeedback(void);
void setOscillatorSync(bool sync);
bool getOscillatorSync(void);
void setLFOSpeed(uint8_t speed);
uint8_t getLFOSpeed(void);
void setLFODelay(uint8_t delay);
uint8_t getLFODelay(void);
void setLFOPitchModulationDepth(uint8_t depth);
uint8_t getLFOPitchModulationDepth(void);
void setLFOAmpModulationDepth(uint8_t delay);
uint8_t getLFOAmpModulationDepth(void);
void setLFOSync(bool sync);
bool getLFOSync(void);
void setLFOWaveform(uint8_t waveform);
uint8_t getLFOWaveform(void);
void setLFOPitchModulationSensitivity(uint8_t sensitivity);
uint8_t getLFOPitchModulationSensitivity(void);
void setTranspose(uint8_t transpose);
uint8_t getTranspose(void);
void setName(char* name);
void getName(char* buffer);

@ -15,7 +15,7 @@ uint8_t fmpiano_sysex[156] = {
70, 77, 45, 80, 73, 65, 78, 79, 00, 00 // 10 * char for name ("DEFAULT ") 70, 77, 45, 80, 73, 65, 78, 79, 00, 00 // 10 * char for name ("DEFAULT ")
}; // FM-Piano }; // FM-Piano
AudioSynthDexed dexed(SAMPLE_RATE); AudioSynthDexed dexed(4,SAMPLE_RATE); // 4 voices max
AudioOutputI2S i2s1; AudioOutputI2S i2s1;
AudioControlSGTL5000 sgtl5000_1; AudioControlSGTL5000 sgtl5000_1;
AudioConnection patchCord1(dexed, 0, i2s1, 0); AudioConnection patchCord1(dexed, 0, i2s1, 0);

@ -48,9 +48,6 @@
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
extern int perform_attack_mod;
extern int perform_release_mod;
const float dc = 1e-18; const float dc = 1e-18;
inline static float tptpc(float& state, float inp, float cutoff) { inline static float tptpc(float& state, float inp, float cutoff) {
@ -594,7 +591,7 @@ void Dexed::doRefreshVoice(void)
refreshVoice = true; refreshVoice = true;
} }
void Dexed::setOPs(uint8_t ops) void Dexed::setOPAll(uint8_t ops)
{ {
controllers.opSwitch = ops; controllers.opSwitch = ops;
} }

@ -1156,7 +1156,7 @@ class Dexed
void setMaxNotes(uint8_t n); void setMaxNotes(uint8_t n);
uint8_t getMaxNotes(void); uint8_t getMaxNotes(void);
void doRefreshVoice(void); void doRefreshVoice(void);
void setOPs(uint8_t ops); void setOPAll(uint8_t ops);
bool decodeVoice(uint8_t* encoded_data, uint8_t* data); bool decodeVoice(uint8_t* encoded_data, uint8_t* data);
bool encodeVoice(uint8_t* encoded_data); bool encodeVoice(uint8_t* encoded_data);
bool getVoiceData(uint8_t* data_copy); bool getVoiceData(uint8_t* data_copy);

Loading…
Cancel
Save