1
0
Fork 0

audio and video

sd2
radex 2024-05-17 22:21:54 +02:00
parent 0a6ba79e8d
commit f46da1e22c
Signed by: radex
SSH Key Fingerprint: SHA256:hvqRXAGG1h89yqnS+cyFTLKQbzjWD4uXIqw7Y+0ws30
6 changed files with 51 additions and 52 deletions

View File

@ -46,3 +46,14 @@ bool gfx_decoder_loadNextFrame() {
free(buffer); free(buffer);
return true; return true;
} }
unsigned long frameLastChangedAt = 0;
bool gfx_decoder_handleLoop() {
auto now = millis();
if (now - frameLastChangedAt > MS_PER_FRAME) {
frameLastChangedAt = now;
return gfx_decoder_loadNextFrame();
}
return true;
}

View File

@ -9,5 +9,6 @@ extern uint16_t frameCount;
extern uint8_t gfxFrameBuffer[2048]; extern uint8_t gfxFrameBuffer[2048];
bool gfx_decoder_loadNextFrame(); bool gfx_decoder_loadNextFrame();
bool gfx_decoder_handleLoop();
#endif #endif

View File

@ -20,10 +20,6 @@ inline void outputEnable(uint8_t pin, bool enable) {
gpio_put(pin, !enable); gpio_put(pin, !enable);
} }
uint16_t frameIndex = 0;
uint16_t lastRenderedFrameIndex = 0;
unsigned long frameLastChangedAt;
// we have 4-bit color depth, so 16 levels of brightness // we have 4-bit color depth, so 16 levels of brightness
// we go from phase 0 to phase 3 // we go from phase 0 to phase 3
uint8_t brightnessPhase = 0; uint8_t brightnessPhase = 0;
@ -61,10 +57,6 @@ void leds_init() {
clearShiftReg(ROW_SRCLK, ROW_SRCLR); clearShiftReg(ROW_SRCLK, ROW_SRCLR);
pulsePin(ROW_RCLK); pulsePin(ROW_RCLK);
// clear frames
frameIndex = 0;
frameLastChangedAt = millis();
/* /*
// launch core1 // launch core1
// NOTE: For some reason, without delay, core1 doesn't start? // NOTE: For some reason, without delay, core1 doesn't start?

View File

@ -23,10 +23,7 @@ void setup() {
setupSD(); setupSD();
// // sd_getAudio(); sd_loadAudio();
// sd_getGfx();
// return;
if (!sd_loadGfxFrameLengths()) { if (!sd_loadGfxFrameLengths()) {
Serial.println("Failed to load gfx frame lengths"); Serial.println("Failed to load gfx frame lengths");
@ -40,26 +37,24 @@ void setup() {
} }
void loop() { void loop() {
if (Serial.available() > 0) { sd_loadNextAudio();
char c = Serial.read();
if (c == 'p') {
Serial.println("Paused. Press any key to continue.");
leds_disable();
while (Serial.available() == 0) {
Serial.read();
delay(50);
}
Serial.println("Continuing...");
}
}
// if (Serial.available() > 0) {
// char c = Serial.read();
// if (c == 'p') {
// Serial.println("Paused. Press any key to continue.");
// leds_disable();
// while (Serial.available() == 0) {
// Serial.read();
// delay(50);
// }
// Serial.println("Continuing...");
// }
// }
if (!gfx_decoder_loadNextFrame()) { if (!gfx_decoder_handleLoop()) {
Serial.println("Failed to load frame..."); Serial.println("Failed to load frame...");
} }
leds_render(); leds_render();
leds_render();
leds_render();
leds_render();
} }

View File

@ -156,54 +156,53 @@ void printSDStats(RP2040_SdVolume volume) {
Serial.println((float)volumesize / 1024.0); Serial.println((float)volumesize / 1024.0);
} }
File file; File audioFile;
void sd_getAudio() { void sd_loadAudio() {
if (!SD.exists("/badapple/audio.bin")) { if (!SD.exists("/badapple/audio.bin")) {
Serial.println("Audio not found :("); Serial.println("Audio not found :(");
return; return;
} }
if (file) { if (audioFile) {
file.close(); audioFile.close();
} }
file = SD.open("/badapple/audio.bin", FILE_READ); audioFile = SD.open("/badapple/audio.bin", FILE_READ);
Serial.println("Audio file opened"); Serial.println("Audio file opened");
audio_stop(); audio_stop();
// load two buffers' worth of audio // load two buffers' worth of audio
if (file.read(&wav_buffer_0, BUFFER_LEN) < BUFFER_LEN) { if (audioFile.read(&wav_buffer_0, BUFFER_LEN) < BUFFER_LEN) {
Serial.println("Could not read first sample"); Serial.println("Could not read first sample");
return; return;
} }
if (file.read(&wav_buffer_1, BUFFER_LEN) < BUFFER_LEN) { if (audioFile.read(&wav_buffer_1, BUFFER_LEN) < BUFFER_LEN) {
Serial.println("Could not read second sample"); Serial.println("Could not read second sample");
return; return;
} }
audio_start(); audio_start();
}
while (true) { void sd_loadNextAudio() {
if (!next_buffer_requested) { if (!next_buffer_requested) {
delay(50); return;
continue; }
} next_buffer_requested = false;
next_buffer_requested = false;
auto next_buffer = wav_buffer1_active ? &wav_buffer_0 : &wav_buffer_1; auto next_buffer = wav_buffer1_active ? &wav_buffer_0 : &wav_buffer_1;
auto bytesRead = file.read(next_buffer, BUFFER_LEN); auto bytesRead = audioFile.read(next_buffer, BUFFER_LEN);
if (bytesRead < BUFFER_LEN) { if (bytesRead < BUFFER_LEN) {
Serial.println("End of audio file"); Serial.println("End of audio file, rewinding...");
file.seek(0); audioFile.seek(0);
} else { } else {
Serial.print("Read "); Serial.print("Read ");
Serial.print(bytesRead); Serial.print(bytesRead);
Serial.println(" bytes from audio file"); Serial.println(" bytes from audio file");
}
} }
} }

View File

@ -5,7 +5,8 @@ void setupSD();
bool isSDCardInserted(); bool isSDCardInserted();
void sd_getAudio(); void sd_loadAudio();
void sd_loadNextAudio();
bool sd_loadGfxFrameLengths(); bool sd_loadGfxFrameLengths();
bool sd_loadGfxBlob(); bool sd_loadGfxBlob();
int32_t sd_loadNextFrame(); int32_t sd_loadNextFrame();