Smoothing sound detection

This commit is contained in:
Troy
2024-04-05 15:45:21 -04:00
parent f9eb6d2300
commit 02b464f283

View File

@@ -15,14 +15,15 @@ class AutoPlaylistUsermod : public Usermod {
bool initDone = false; bool initDone = false;
bool functionality_enabled = false; bool functionality_enabled = false;
bool silenceDetected = true; bool silenceDetected = true;
unsigned long lastSoundTime = 0;
byte ambientPlaylist = 1; byte ambientPlaylist = 1;
byte musicPlaylist = 2; byte musicPlaylist = 2;
int timeout = 60; int timeout = 60;
bool autoChange = false; bool autoChange = false;
byte lastAutoPlaylist = 0; byte lastAutoPlaylist = 0;
unsigned long lastSoundTime = millis()-(timeout*1000)-100;
unsigned long change_timer = millis(); unsigned long change_timer = millis();
unsigned long autochange_timer = millis(); unsigned long autochange_timer = millis();
float avg_volumeSmth = 0;
uint_fast32_t energy = 0; uint_fast32_t energy = 0;
@@ -283,20 +284,22 @@ class AutoPlaylistUsermod : public Usermod {
float volumeSmth = *(float*)um_data->u_data[0]; float volumeSmth = *(float*)um_data->u_data[0];
if (volumeSmth > 0.5f) { avg_volumeSmth = avg_volumeSmth * 0.99f + volumeSmth * 0.01f;
if (avg_volumeSmth >= 1.0f) {
lastSoundTime = millis(); lastSoundTime = millis();
} }
if (millis() - lastSoundTime > (long(timeout) * 1000)) { if (millis() - lastSoundTime > (long(timeout) * 1000)) {
if (!silenceDetected) { if (!silenceDetected) {
silenceDetected = true; silenceDetected = true;
USER_PRINTLN("AutoPlaylist: Silence"); USER_PRINTLN("AutoPlaylist: Silence detected");
changePlaylist(ambientPlaylist); changePlaylist(ambientPlaylist);
} }
} else { } else {
if (silenceDetected) { if (silenceDetected) {
silenceDetected = false; silenceDetected = false;
USER_PRINTLN("AutoPlaylist: End of silence"); USER_PRINTLN("AutoPlaylist: Sound detected");
changePlaylist(musicPlaylist); changePlaylist(musicPlaylist);
} }
if (autoChange && millis() >= autochange_timer+22) { if (autoChange && millis() >= autochange_timer+22) {
@@ -330,7 +333,7 @@ class AutoPlaylistUsermod : public Usermod {
uiDomString += F("<br />"); uiDomString += F("<br />");
if (autoChange && currentPlaylist == musicPlaylist && functionality_enabled) { if (enabled && autoChange && currentPlaylist == musicPlaylist && functionality_enabled) {
uiDomString += F("AutoChange is Active"); uiDomString += F("AutoChange is Active");
} else if (autoChange && (currentPlaylist != musicPlaylist || !functionality_enabled || !enabled)) { } else if (autoChange && (currentPlaylist != musicPlaylist || !functionality_enabled || !enabled)) {
uiDomString += F("AutoChange on Stand-by"); uiDomString += F("AutoChange on Stand-by");
@@ -458,7 +461,7 @@ class AutoPlaylistUsermod : public Usermod {
String name = ""; String name = "";
getPresetName(id, name); getPresetName(id, name);
#ifdef USERMOD_AUTO_PLAYLIST_DEBUG #ifdef USERMOD_AUTO_PLAYLIST_DEBUG
USER_PRINTF("apply %s\n", name.c_str()); USER_PRINTF("AutoPlaylist: Applying \"%s\"\n", name.c_str());
#endif #endif
applyPreset(id, CALL_MODE_NOTIFICATION); applyPreset(id, CALL_MODE_NOTIFICATION);
lastAutoPlaylist = id; lastAutoPlaylist = id;