diff --git a/soundcube-firmware/ringbuffer.h b/soundcube-firmware/ringbuffer.h index b80bfa5..c3f5339 100644 --- a/soundcube-firmware/ringbuffer.h +++ b/soundcube-firmware/ringbuffer.h @@ -6,11 +6,11 @@ class RingBuffer{ RingBuffer() {} RingBuffer(size_t size) : bufferSize(size) {} - void setSize(size_t size) { - bufferSize = size; - } + void setSize(size_t size) { + bufferSize = size; + } - void begin(){ + void begin(){ buffer = new T[bufferSize]; } diff --git a/soundcube-firmware/soundcube-firmware.ino b/soundcube-firmware/soundcube-firmware.ino index a7b1ee7..431a94a 100644 --- a/soundcube-firmware/soundcube-firmware.ino +++ b/soundcube-firmware/soundcube-firmware.ino @@ -97,12 +97,13 @@ size_t tape_write = 0; void codec_transmit() { for(int i = 0; i < count; i++){ - int16_t sample = 0; int j = active % NSTREAMS; - sample = stream[j].get(); - buffer[i] = sample >> 2; + for(int k = 0; k < NSTREAMS; k++){ + int16_t sample = 0; + sample = stream[k].get(); + buffer[i] += sample >> 2; + } } - i2s.write((const uint8_t *)&buffer, count * sizeof(int16_t)); } @@ -269,7 +270,7 @@ void setup() { Serial.print(stream[i].wavefile.blockalign); Serial.println(" bytes"); - stream[i].play(); + //stream[i].play(); stream[i].wavefile.loop = true; } else { Serial.println("file loading error"); @@ -370,6 +371,7 @@ void loop() { Serial.println("vol down"); codec.volumeDown(); } + if(buttons[CVOUTL]) { Serial.println("vol up"); codec.volumeUp(); @@ -386,21 +388,26 @@ void loop() { dac.setValue(1, !dactest ? 0 : 65535); } + if(buttons[SELECT]){ + stream[active % NSTREAMS].toggle(); + } + Serial.println(codec.getVolumeL()); - for(int i = 0; i < NSTREAMS; i++){ - stream[i].pause(); - } - stream[active % NSTREAMS].play(); + //for(int i = 0; i < NSTREAMS; i++){ + // stream[i].pause(); + // } + //stream[active % NSTREAMS].play(); buttonChanged = false; } - //ac.setValue(0, dactest ? 0 : sin((float)millis() / 100.0f) * 32768 + 32768); + //dac.setValue(0, dactest ? 0 : sin((float)millis() / 100.0f) * 32768 + 32768); // empty LED matrix for (int i = 0; i < 13; i++) { ui_leds[lut_matrix[i]] = CRGB(0, 0, 0); + if(stream[i % NSTREAMS].isPlaying()) ui_leds[lut_matrix[i % NSTREAMS]] = CRGB(0, 50, 0); } // set active LED matrix LED @@ -426,22 +433,4 @@ void loop() { //delay(20); // wait 1ms -} - -void setup1(){ - // while(1){ - // if(streams_loaded){ - // int16_t l, r; - // i2s.read16(&l, &r); - - // int j = active % NSTREAMS; - // l = stream[j].get() >> 2; - // r = stream[j].get() >> 2; - - // i2s.write16(l, r); - // } - // } -} - -void loop1(){ } \ No newline at end of file diff --git a/soundcube-firmware/wavestream.h b/soundcube-firmware/wavestream.h index f42d01d..db79420 100644 --- a/soundcube-firmware/wavestream.h +++ b/soundcube-firmware/wavestream.h @@ -119,6 +119,8 @@ class WaveStream{ return true; } + void toggle(){playing = !playing;} + void play(){playing = true;} void stop(){ @@ -142,6 +144,10 @@ class WaveStream{ return playing ? wavefile.get() : 0; } + bool isPlaying(){ + return playing; + } + //private: WaveFile wavefile;