cpu overloading playing 8 streams at once

This commit is contained in:
Sebastian
2025-06-16 01:31:09 +02:00
parent ecbd6ab3ee
commit 3b63123c76
3 changed files with 27 additions and 32 deletions

View File

@ -6,11 +6,11 @@ class RingBuffer{
RingBuffer() {} RingBuffer() {}
RingBuffer(size_t size) : bufferSize(size) {} RingBuffer(size_t size) : bufferSize(size) {}
void setSize(size_t size) { void setSize(size_t size) {
bufferSize = size; bufferSize = size;
} }
void begin(){ void begin(){
buffer = new T[bufferSize]; buffer = new T[bufferSize];
} }

View File

@ -97,12 +97,13 @@ size_t tape_write = 0;
void codec_transmit() { void codec_transmit() {
for(int i = 0; i < count; i++){ for(int i = 0; i < count; i++){
int16_t sample = 0;
int j = active % NSTREAMS; int j = active % NSTREAMS;
sample = stream[j].get(); for(int k = 0; k < NSTREAMS; k++){
buffer[i] = sample >> 2; int16_t sample = 0;
sample = stream[k].get();
buffer[i] += sample >> 2;
}
} }
i2s.write((const uint8_t *)&buffer, count * sizeof(int16_t)); i2s.write((const uint8_t *)&buffer, count * sizeof(int16_t));
} }
@ -269,7 +270,7 @@ void setup() {
Serial.print(stream[i].wavefile.blockalign); Serial.print(stream[i].wavefile.blockalign);
Serial.println(" bytes"); Serial.println(" bytes");
stream[i].play(); //stream[i].play();
stream[i].wavefile.loop = true; stream[i].wavefile.loop = true;
} else { } else {
Serial.println("file loading error"); Serial.println("file loading error");
@ -370,6 +371,7 @@ void loop() {
Serial.println("vol down"); Serial.println("vol down");
codec.volumeDown(); codec.volumeDown();
} }
if(buttons[CVOUTL]) { if(buttons[CVOUTL]) {
Serial.println("vol up"); Serial.println("vol up");
codec.volumeUp(); codec.volumeUp();
@ -386,21 +388,26 @@ void loop() {
dac.setValue(1, !dactest ? 0 : 65535); dac.setValue(1, !dactest ? 0 : 65535);
} }
if(buttons[SELECT]){
stream[active % NSTREAMS].toggle();
}
Serial.println(codec.getVolumeL()); Serial.println(codec.getVolumeL());
for(int i = 0; i < NSTREAMS; i++){ //for(int i = 0; i < NSTREAMS; i++){
stream[i].pause(); // stream[i].pause();
} // }
stream[active % NSTREAMS].play(); //stream[active % NSTREAMS].play();
buttonChanged = false; 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 // empty LED matrix
for (int i = 0; i < 13; i++) { for (int i = 0; i < 13; i++) {
ui_leds[lut_matrix[i]] = CRGB(0, 0, 0); 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 // set active LED matrix LED
@ -426,22 +433,4 @@ void loop() {
//delay(20); // wait 1ms //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(){
} }

View File

@ -119,6 +119,8 @@ class WaveStream{
return true; return true;
} }
void toggle(){playing = !playing;}
void play(){playing = true;} void play(){playing = true;}
void stop(){ void stop(){
@ -142,6 +144,10 @@ class WaveStream{
return playing ? wavefile.get() : 0; return playing ? wavefile.get() : 0;
} }
bool isPlaying(){
return playing;
}
//private: //private:
WaveFile wavefile; WaveFile wavefile;