zunächst vielen Dank an biologist für das super Projekt.
Ich möchte bei meinem Espuino die Wiedergabe erst starten, wenn die Taste PLAYPAUSE erstmals gedrückt wurde, d.h. ich möchte die standardmäßige automatische Wiedergabe bei einer neuen RFID-Karte deaktivieren.
Ich habe nun schon verschiedene Ansätze probiert, allerdings enden diese meistens damit, dass ich in einen Timeout laufen und die Wiedergabe dann mit dem 2. Titel beginnt.
Zunächst wollte ich in RfidCommon.cpp nach AudioPlayer_TrackQueueDispatcher() den Befehl Cmd_Action(CMD_PLAYPAUSE) aufrufen. Dies funktioniert aber nicht, vermutlich weil die Playlist noch nicht geladen ist.
Meine aktuelle Idee ist in in RfidCommon.cpp nach dem AudioPlayer_TrackQueueDispatcher() ein Flag zu setzen und dann xQueueReceive(gTrackQueue, …) in AudioPlayer.cpp erst aufzurufen, wenn trackCommand == PAUSEPLAY ausgewertet wird. Dies führt aber dazu, dass ich in einen Timeout laufe und die Wiedergabe mit dem 2. Titel beginnt.
Nun hoffe ich auf eure Hilfe. Übersehe ich einen einfachen Ansatz für meinen Sonderfall. Folgende beiden Verhalten wären für mich i.O.:
Playlist erst bei Tastendruck laden und dann direkt die Wiedergabe starten
Playlist laden sobald neue RFID-Karte gelesen wurde aber die Wiedergabe noch vor dem ersten Titel stoppen.
So eine ganz elegante Lösung fällt mir da nicht ein. Aber grundsätzlich ist es ja so, dass der Bootvorgang samt dem Laden der „alten Karte“ relativ schnell geht. Also da würde ich annehmen, dass das in spätestens 5000 ms anfängt zu laufen (eher 3000 vermutlich).
Das hier ist ja die Stelle, wo die Playlist reinkommt:
Vielleicht ist es schon damit getan, wenn du die folgende Zeile auf true setzt:
Ich hab’s aber nicht ausprobiert. Generell würde ich einfach schauen, da ein Hilfskriterium reinzubringen à la „Aber mache das nur anders, nachdem der ESPuino frisch gestartet wurde - ansonsten wie bisher“.
Vielen Dank für die schnelle Antwort. Leider hat das Setzen von gPlayProperties.pausePlay = true nicht funktioniert.
Ich habe nun aber doch eine Lösung gefunden. Nachdem audio->connecttoFS() ausgeführt wurde, kann der Track problemlos pausiert werden. Mit folgendem Code habe ich mein gewünschtes Verhalten:
} else {
audioReturnCode = audio->connecttoFS(gFSystem, gPlayProperties.playlist->at(gPlayProperties.currentTrackNumber));
// consider track as finished, when audio lib call was not successful
if(NewRFIDPresented){
NewRFIDPresented = false;
audio->pauseResume();
gPlayProperties.pausePlay = true;
}
}
NewRFIDPresented wird am Ende der Funktion Rfid_PreferenceLookupHandler(void) gesetzt: