mirror of https://github.com/radex/radmatrix.git
audio and video
parent
0a6ba79e8d
commit
f46da1e22c
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue