From f8e5a84bd1f1bc52a1ab18b37387f064752d400b Mon Sep 17 00:00:00 2001 From: Ellen Arvidsson Date: Wed, 18 Jun 2025 12:57:17 +0200 Subject: [PATCH] remove drum code and read from audio hw instead --- daisy/scope/osclsk.cpp | 2 +- daisy/scope/osclsk.hpp | 2 +- daisy/scope/scope.cpp | 100 ++--------------------------------------- 3 files changed, 6 insertions(+), 98 deletions(-) diff --git a/daisy/scope/osclsk.cpp b/daisy/scope/osclsk.cpp index 7744024..853158b 100644 --- a/daisy/scope/osclsk.cpp +++ b/daisy/scope/osclsk.cpp @@ -201,7 +201,7 @@ osclsk_scope::is_triggering(float sample) void osclsk_scope::trig_lkb_wr_block(void) { - size_t lkb_start, n; + size_t lkb_start; size_t lkb_cpy, lkb_cpy_part; if (trig_mode == osc_trig_mode::INSTANT) diff --git a/daisy/scope/osclsk.hpp b/daisy/scope/osclsk.hpp index 96a82c1..de27549 100644 --- a/daisy/scope/osclsk.hpp +++ b/daisy/scope/osclsk.hpp @@ -12,7 +12,7 @@ using namespace daisy; #define OSCLSK_SCREEN_YSZ ILI9341_TFTWIDTH -#define OSCLSK_RATE_DIV 48 +#define OSCLSK_RATE_DIV 16 #define OSCLSK_LKB_AMOUNT 10 #define OSCLSK_BLOCK_LEN OSCLSK_SCREEN_XSZ diff --git a/daisy/scope/scope.cpp b/daisy/scope/scope.cpp index fe75e89..d5bd58c 100644 --- a/daisy/scope/scope.cpp +++ b/daisy/scope/scope.cpp @@ -26,13 +26,6 @@ uint8_t DMA_BUFFER_MEM_SECTION dma_area[DMA_AREA_SIZE]; static void audio_cb(AudioHandle::InputBuffer in, AudioHandle::OutputBuffer out, size_t sz); -Oscillator osc; -WhiteNoise noise; - -AdEnv kickVolEnv, kickPitchEnv, snareEnv; - -Switch kick, snare; - RingBuffer scope_in; void @@ -42,52 +35,15 @@ audio_cb(AudioHandle::InputBuffer in, #ifdef AUDIOC_DEBUG load_meter.OnBlockStart(); #endif - float osc_out, noise_out, snr_env_out, kck_env_out; float sig[AUDIO_BLOCK_SIZE]; + size_t i; - //Get rid of any bouncing - snare.Debounce(); - kick.Debounce(); - - //If you press the kick button... - if(kick.RisingEdge()) - { - //Trigger both envelopes! - kickVolEnv.Trigger(); - kickPitchEnv.Trigger(); - } - - //If press the snare button trigger its envelope - if(snare.RisingEdge()) - { - snareEnv.Trigger(); - } - - //Prepare the audio block - for(size_t i = 0; i < sz; i++) - { - //Get the next volume samples - snr_env_out = snareEnv.Process(); - kck_env_out = kickVolEnv.Process(); - - //Apply the pitch envelope to the kick - osc.SetFreq(kickPitchEnv.Process()); - //Set the kick volume to the envelope's output - osc.SetAmp(kck_env_out); - //Process the next oscillator sample - osc_out = osc.Process(); - - //Get the next snare sample - noise_out = noise.Process(); - //Set the sample to the correct volume - noise_out *= snr_env_out; - - //Mix the two signals at half volume - sig[i] = .5 * noise_out + .5 * osc_out; + for (i = 0; i < sz; i++) { + sig[i] = in[0][i]; } /* write to output */ - for (size_t i = 0; i < sz; i++) { + for (i = 0; i < sz; i++) { out[0][i] = sig[i]; out[1][i] = sig[i]; } @@ -99,51 +55,6 @@ audio_cb(AudioHandle::InputBuffer in, #endif } -static void -setup_drums(void) -{ - float samplerate; - - /* kick n snare */ - samplerate = daisy_hw.AudioSampleRate(); - - //Initialize oscillator for kickdrum - osc.Init(samplerate); - osc.SetWaveform(Oscillator::WAVE_TRI); - osc.SetAmp(1); - - //Initialize noise - noise.Init(); - - //Initialize envelopes, this one's for the snare amplitude - snareEnv.Init(samplerate); - snareEnv.SetTime(ADENV_SEG_ATTACK, .01); - snareEnv.SetTime(ADENV_SEG_DECAY, .2); - snareEnv.SetMax(1); - snareEnv.SetMin(0); - - //This envelope will control the kick oscillator's pitch - //Note that this envelope is much faster than the volume - kickPitchEnv.Init(samplerate); - kickPitchEnv.SetTime(ADENV_SEG_ATTACK, .01); - kickPitchEnv.SetTime(ADENV_SEG_DECAY, .05); - kickPitchEnv.SetMax(400); - kickPitchEnv.SetMin(50); - - //This one will control the kick's volume - kickVolEnv.Init(samplerate); - kickVolEnv.SetTime(ADENV_SEG_ATTACK, .01); - kickVolEnv.SetTime(ADENV_SEG_DECAY, 1); - kickVolEnv.SetMax(1); - kickVolEnv.SetMin(0); - - //Initialize the kick and snare buttons on pins 27 and 28 - //The callback rate is samplerate / blocksize (48) - snare.Init(daisy_hw.GetPin(27), samplerate / (float)AUDIO_BLOCK_SIZE); - kick.Init(daisy_hw.GetPin(28), samplerate / (float)AUDIO_BLOCK_SIZE); -} - - #define LOAD_FREQ 5 #define LOAD_PERIOD (1000u / LOAD_FREQ) int @@ -167,13 +78,10 @@ main(void) scope_in.Init(); - setup_drums(); - daisy_hw.StartAudio(audio_cb); while (true) { - switch (scope.state()) { case osclsk_scope::osc_state::SAMPLE_DONE: scope.render_block();