Skip to content

Commit

Permalink
add pause/loop, gpio init on config change
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed Dec 26, 2023
1 parent f51e96b commit 37023a3
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 29 deletions.
4 changes: 2 additions & 2 deletions src/bundle.h

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/file_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ enum play_back_mode {
LOOP,
PAUSE,
ASR_LOOP,
PAUSE_LOOP,
};

enum retrigger_mode {
Expand Down
57 changes: 51 additions & 6 deletions src/gpio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ extern "C" {
QueueHandle_t wav_player_queue;
}

bool cacheUseFTDI = 1;
bool cacheUseUsbMidi = 1;

void on_release_per_config(int pin_num)
{
uint8_t *channel_lut = get_channel_lut();
Expand Down Expand Up @@ -102,20 +105,56 @@ void on_press_per_config(int pin_num)
}
}

void wvr_gpio_init(bool useFTDI, bool useUsbMidi)
void wvr_gpio_clear(void){
if(buttons[0] != NULL) buttons[0]->onPress(NULL);
if(buttons[0] != NULL) buttons[0]->onRelease(NULL);
if(buttons[1] != NULL) buttons[1]->onPress(NULL);
if(buttons[1] != NULL) buttons[1]->onRelease(NULL);
if(buttons[2] != NULL) buttons[2]->onPress(NULL);
if(buttons[2] != NULL) buttons[2]->onRelease(NULL);
if(buttons[3] != NULL) buttons[3]->onPress(NULL);
if(buttons[3] != NULL) buttons[3]->onRelease(NULL);
if(buttons[4] != NULL) buttons[4]->onPress(NULL);
if(buttons[4] != NULL) buttons[4]->onRelease(NULL);
if(buttons[5] != NULL) buttons[5]->onPress(NULL);
if(buttons[5] != NULL) buttons[5]->onRelease(NULL);
if(buttons[6] != NULL) buttons[6]->onPress(NULL);
if(buttons[6] != NULL) buttons[6]->onRelease(NULL);
if(buttons[7] != NULL) buttons[7]->onPress(NULL);
if(buttons[7] != NULL) buttons[7]->onRelease(NULL);
if(buttons[8] != NULL) buttons[8]->onPress(NULL);
if(buttons[8] != NULL) buttons[8]->onRelease(NULL);
if(buttons[9] != NULL) buttons[9]->onPress(NULL);
if(buttons[9] != NULL) buttons[9]->onRelease(NULL);
if(buttons[10] != NULL) buttons[10]->onPress(NULL);
if(buttons[10] != NULL) buttons[10]->onRelease(NULL);
if(buttons[11] != NULL) buttons[11]->onPress(NULL);
if(buttons[11] != NULL) buttons[11]->onRelease(NULL);
if(buttons[12] != NULL) buttons[12]->onPress(NULL);
if(buttons[12] != NULL) buttons[12]->onRelease(NULL);
if(buttons[13] != NULL) buttons[13]->onPress(NULL);
if(buttons[13] != NULL) buttons[13]->onRelease(NULL);
}

void wvr_gpio_start()
{
log_i("useFTDI is %d",useFTDI);
log_i("useUsbMidi is %d",useUsbMidi);
wvr_gpio_clear();
log_i("useFTDI is %d",cacheUseFTDI);
log_i("useUsbMidi is %d",cacheUseUsbMidi);
for(int i=0;i<14;i++)
{
if(
((i == 0) && useFTDI) ||
((i == 1) && useFTDI) ||
((i == 2) && useUsbMidi)
((i == 0) && cacheUseFTDI) ||
((i == 1) && cacheUseFTDI) ||
((i == 2) && cacheUseUsbMidi)
)
{
continue;
}

// clear listeners
buttons[i] = NULL;

gpio_num_t gpio_num = gpio_pins[i];
int pin_num = wvr_pins[i];
pin_config_t pin = pin_config_lut[i];
Expand Down Expand Up @@ -172,4 +211,10 @@ void wvr_gpio_init(bool useFTDI, bool useUsbMidi)
if(buttons[12] != NULL) buttons[12]->onRelease([](){on_release_per_config(12);});
if(buttons[13] != NULL) buttons[13]->onPress([](){on_press_per_config(13);});
if(buttons[13] != NULL) buttons[13]->onRelease([](){on_release_per_config(13);});
}

void wvr_gpio_init(bool useFTDI, bool useUsbMidi){
cacheUseFTDI = useFTDI;
cacheUseUsbMidi = useUsbMidi;
wvr_gpio_start();
}
1 change: 1 addition & 0 deletions src/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
extern Button *buttons[14];

void wvr_gpio_init(bool useFTDI, bool useUsbMidi);
void wvr_gpio_start(void);
void on_press(uint8_t i);
void on_release(uint8_t pin);

Expand Down
1 change: 1 addition & 0 deletions src/midi_in.c
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,7 @@ void midi_init(bool useUsbMidi)
xTaskCreatePinnedToCore(web_midi_task, "web_midi_task", 4096, NULL, 3, NULL, 0);
if(useUsbMidi)
{
log_i("INITIALIZING USB MIDI");
init_gpio_usb();
init_uart_usb();
xTaskCreatePinnedToCore(read_usb_uart_task, "read_usb_uart_task", 4096, NULL, 3, NULL, 0);
Expand Down
12 changes: 11 additions & 1 deletion src/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#include "esp_wifi.h"
#include "boot.h"
#include "wav_player.h"
#include "file_system.h"
#include "gpio.h"

extern "C" size_t find_gap_in_file_system(size_t size);
extern "C" esp_err_t write_wav_to_emmc(uint8_t* source, size_t block, size_t size);
Expand Down Expand Up @@ -202,6 +204,7 @@ void handleUpdatePinConfig(AsyncWebServerRequest *request, uint8_t *data, size_t
//done
updatePinConfig((char *)pin_config_json);
free(pin_config_json);
wvr_gpio_start();
// request->send(200, "text/plain", "all done pin config update");
//wav_player_resume();
}
Expand Down Expand Up @@ -1081,11 +1084,18 @@ bool get_wifi_is_on()
}

void server_pause(void){
log_i("wifi off");
WiFi.mode(WIFI_OFF);
wifi_is_on = false;
}

void server_resume(void){
WiFi.mode(WIFI_AP);
log_i("wifi on");
// WiFi.mode(WIFI_AP);
if(get_metadata()->do_station_mode == 1)
{
try_log_on_network();
}
WiFi.mode(WIFI_MODE_APSTA);
wifi_is_on = true;
}
40 changes: 20 additions & 20 deletions src/wav_player.c
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,11 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
if(
(bufs[i].free == 0) &&
(bufs[i].wav_data.mute_group == new_wav.mute_group) &&
(bufs[i].wav_data.play_back_mode == PAUSE)
(
(bufs[i].wav_data.play_back_mode == PAUSE) ||
(bufs[i].wav_data.play_back_mode == PAUSE_LOOP)

)
)
{
// log_i("pruned because new wav");
Expand Down Expand Up @@ -513,7 +517,10 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
case NOTE_OFF:
bufs[b].fade = FADE_OUT;
abort_note = 1;
if(bufs[b].wav_data.play_back_mode == PAUSE)
if(
bufs[b].wav_data.play_back_mode == PAUSE ||
bufs[b].wav_data.play_back_mode == PAUSE_LOOP
)
{
// log_i("pausing");
bufs[b].pause_state = PAUSE_START;
Expand Down Expand Up @@ -635,7 +642,10 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
)
{
bufs[b].fade = FADE_OUT;
if(bufs[b].wav_data.play_back_mode == PAUSE)
if(
bufs[b].wav_data.play_back_mode == PAUSE ||
bufs[b].wav_data.play_back_mode == PAUSE_LOOP
)
{
// log_i("pausing");
bufs[b].pause_state = PAUSE_START;
Expand Down Expand Up @@ -717,7 +727,7 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
size_t remaining = bufs[buf].size - bufs[buf].wav_position;
u16p16 step = channel_pitch_bend_factor[bufs[buf].wav_player_event.channel];

if((bufs[buf].fade == FADE_NORMAL) || (bufs[buf].fade == FADE_IN_INIT)) // dont update stereo volume while fading
if(bufs[buf].fade == FADE_NORMAL) // dont update stereo volume while fading
{
update_stereo_volume(buf);
}
Expand All @@ -726,7 +736,7 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
convert_buf_linear(buf);
}

int fade_factor = (bufs[buf].pruned || bufs[buf].pause_state == PAUSE_RESUMING) ? 4 // fast fadeout/fadein
int fade_factor = (bufs[buf].pruned || (bufs[buf].pause_state == PAUSE_RESUMING)) ? 4 // fast fadeout/fadein
: bufs[buf].fade == FADE_OUT ? 4 + (channel_release[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER) // release
: 4 + (channel_attack[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER); // attack

Expand Down Expand Up @@ -816,14 +826,15 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
break;
}
case LOOP :
case PAUSE_LOOP :
{
size_t remaining = bufs[buf].size - bufs[buf].wav_position;
u16p16 step = channel_pitch_bend_factor[bufs[buf].wav_player_event.channel];

if(bufs[buf].done) // if it fades out, stop asap
break;

if((bufs[buf].fade == FADE_NORMAL) || (bufs[buf].fade == FADE_IN_INIT)) // only update the volume when NOT fading-out or about to start fading-in
if(bufs[buf].fade == FADE_NORMAL) // only update the volume when NOT fading-out or about to start fading-in
{
update_stereo_volume(buf);
}
Expand All @@ -832,19 +843,9 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
convert_buf_linear(buf);
}

size_t fade_factor = 0;
if(bufs[buf].pruned == 1)
{
fade_factor = 4;
}
else if(bufs[buf].fade == FADE_OUT)
{
fade_factor = 4 + (channel_release[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER);
}
else
{
fade_factor = 4 + (channel_attack[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER);
}
int fade_factor = (bufs[buf].pruned || (bufs[buf].pause_state == PAUSE_RESUMING)) ? 4 // fast fadeout/fadein
: bufs[buf].fade == FADE_OUT ? 4 + (channel_release[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER) // release
: 4 + (channel_attack[bufs[buf].wav_player_event.channel] * FADE_FACTOR_MULTIPLIER); // attack

for(int i=0; i<DAC_BUFFER_SIZE_IN_SAMPLES; i += 2)
{
Expand Down Expand Up @@ -1162,7 +1163,6 @@ void IRAM_ATTR wav_player_task(void* pvParameters)
{
// log_i("done");
if(
// (bufs[i].wav_data.play_back_mode == PAUSE) &&
(bufs[i].pause_state == PAUSE_START) &&
(bufs[i].pruned != 1)
)
Expand Down

0 comments on commit 37023a3

Please sign in to comment.