From 63f42d7036443e4bc071dd1eb98b552ac16a811f Mon Sep 17 00:00:00 2001 From: Holger Wirtz Date: Fri, 4 Jan 2019 21:53:47 +0100 Subject: [PATCH] Small additions and fixes. --- MicroMDAPiano.ino | 27 ++++++++++++++++++++++++--- mdaEPiano.cpp | 36 ++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/MicroMDAPiano.ino b/MicroMDAPiano.ino index 41b5460..7030950 100644 --- a/MicroMDAPiano.ino +++ b/MicroMDAPiano.ino @@ -64,6 +64,8 @@ uint8_t voice = 0; float vol = VOLUME; float vol_right = 1.0; float vol_left = 1.0; +elapsedMicros fill_audio_buffer; +const uint16_t audio_block_time_us = 1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES); #ifdef MASTER_KEY_MIDI bool master_key_enabled = false; @@ -173,6 +175,23 @@ void setup() sched_note_off.begin(note_off, 6333333); #endif +/* +0 decay +1 release +2 hardness +3 treble +4 pan_trem +5 lfo_rate +6 velocity_sense +7 stereo +8 max_poly +9 tune +10 detune +11 overdrive +*/ +//ep->setParameter(11,1.0); // overdrive +//ep->setParameter(10,1.0); // overdrive + Serial.println(F("")); #if defined (DEBUG) && defined (SHOW_CPU_LOAD_MSEC) @@ -188,8 +207,10 @@ void loop() const uint16_t audio_block_time_ms = 1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES); // Main sound calculation - if (queue_r.available() && queue_l.available()) + if (queue_r.available() && queue_l.available() && fill_audio_buffer > audio_block_time_us - 10) { + fill_audio_buffer = 0; + audio_buffer_r = queue_r.getBuffer(); audio_buffer_l = queue_l.getBuffer(); @@ -201,8 +222,6 @@ void loop() } #endif - handle_input(); - audio_buffer_r = queue_r.getBuffer(); if (audio_buffer_r == NULL) { @@ -242,6 +261,8 @@ void loop() queue_r.playBuffer(); queue_l.playBuffer(); } + + handle_input(); } void handle_input(void) diff --git a/mdaEPiano.cpp b/mdaEPiano.cpp index 76953b7..bd4ea9e 100644 --- a/mdaEPiano.cpp +++ b/mdaEPiano.cpp @@ -90,25 +90,25 @@ mdaEPiano::mdaEPiano() // mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) kgrp[31].pos = 406046; kgrp[31].end = 414486; kgrp[31].loop = 2306; //ghost kgrp[32].pos = 414487; kgrp[32].end = 422408; kgrp[32].loop = 2169; -/* - //extra xfade looping... - for (int32_t k = 0; k < 28; k++) - { - int32_t p0 = kgrp[k].end; - int32_t p1 = kgrp[k].end - kgrp[k].loop; + /* + //extra xfade looping... + for (int32_t k = 0; k < 28; k++) + { + int32_t p0 = kgrp[k].end; + int32_t p1 = kgrp[k].end - kgrp[k].loop; - float xf = 1.0f; - float dxf = -0.02f; + float xf = 1.0f; + float dxf = -0.02f; - while (xf > 0.0f) - { - waves[p0] = (short)((1.0f - xf) * (float)waves[p0] + xf * (float)waves[p1]); + while (xf > 0.0f) + { + waves[p0] = (short)((1.0f - xf) * (float)waves[p0] + xf * (float)waves[p1]); - p0--; - p1--; - xf += dxf; + p0--; + p1--; + xf += dxf; + } } - } */ //initialise... @@ -235,7 +235,7 @@ void mdaEPiano::process(int16_t *outputs_r, int16_t *outputs_l) } l += V->outl * x; r += V->outr * x; - + V++; } @@ -249,8 +249,8 @@ void mdaEPiano::process(int16_t *outputs_r, int16_t *outputs_l) l += l * lmod * lfo1; r += r * rmod * lfo1; //worth making all these local variables? - outputs_l[frame] = static_cast(l * 0x7fff) >> REDUCE_LOUDNESS; - outputs_r[frame] = static_cast(r * 0x7fff) >> REDUCE_LOUDNESS; + outputs_l[frame] += static_cast((l * 0.5) * 0x7fff); + outputs_r[frame] += static_cast((r * 0.5) * 0x7fff); } if (fabs(tl) < 1.0e-10) tl = 0.0f; //anti-denormal