ESPuino Release V2.2

Nimm die ISO-15696 Tags von RFIDfriend . Die sind um die 30mm und haben eine sehr gute Reichweite. Findest Du bei EBay Kleinanzeigen

grafik

aber könnte man im Code einen „debounce“ einbauen, also erst bei 2x nicht Erkennen pausieren?

Das ist bereits drin. Deine Karten werden mehrfach nicht/anders erkannt. Das kann die Software dann nicht mehr kompensieren.

Erschließt sich mir allerdings nicht wieso die Änderungen von Joe91 sich dann positiv auswirken und es jetzt mit dem Update kam.

Ich hab zuhause noch slix2 Tags rumliegen.
Hatte extra für die magnetischen hockey Tags die ISO14443 25mm aus dem Thread geordert. Weil ich bedenken hatte, dass andere eventuell nicht tun. Mal schauen obs mit den anderen Tags tut. Hab gesehen, dass du die slix2 entsprechend mit default pw eingebaut hast.

Anbei das Audiofile. Ich hab jetzt alles nochmal geflasht, sämtliche Lötstellen gecheckt. Ist jetzt, wieso auch immer, deutlich besser geworden. Man hört jetzt nur noch Microaussetzer.

Habs mal nach Youtube verfrachtet: https://youtu.be/SrN-7ULNVVQ?si=Do-VoHnZDgRuijGG

Was mir jetzt zusätzlich aufgefallen ist, dass mit Einsetzen der ersten Aussetzers die Warnung im Webinterface kommt, dass ein Verbindungsproblem besteht und dann das Webinterface auch kurz nicht aufrufbar ist. Dann pendelt sichs wieder ein und verliert wieder sporadisch das WLAN. Während sich das Ganze wieder „einpendelt“ lässt sich der ESPuino auch nicht in den Deepsleep verfrachten.

Ich kann bestätigen, dass es bei manchen Dateien wieder ruckelt, näheres siehe Knacksen bei opus files (insb. 48kHz) / vormals auch wav files - #23 von sfields

Bringt die dort vorgeschlagene Lösung auch bei den hier vorliegenden Problemen eine Lösung?

Ich hatte, da ich jetzt 3 Buttons neu verbaut habe, ebenfalls vorgestern meinen ESP32 neu programmiert. Seither ebenfalls sehr deutliche Ruckler in der Musik, nach ca. 1 Sekunde Abspieldauer jeder Musikdatei. Da die Musik automatisch anfängt zu spielen, kann ich irgendwelche RFID-Sachen eigentlich ausschließen. Laut Serial-Ausgang oder console kommt da auch keine info zu irgendwas, was passiert.
Freier Heap ca. 50 kiB
Wie kann man das Problem denn jetzt beheben? Welche Option an/aus? Wo?

Okay, Problem gefunden, diese Option verursacht die Ruckler, wenn man sie aktiviert:
#define SAVE_PLAYPOS_WHEN_RFID_CHANGE

OK, Du könntest einmal schauen ob das Ruckeln im DEV-Branch mit Deinen Einstellungen noch auftritt. Sonst einmal das Audiofile zusenden um das nachzuvollziehen

Das passierte mit sämtlichen getesteten Liedern, immer nach ca. 1 Sekunde. Dachte erst an ein Update, hatte aber im Zuge der Knöpfe auch ein paar andere Optionen geändert und es daher alles nochmal durchprobiert, um die zu finden.

MP3, OPUS, FLAC, in hoher Audioqualität? Weil da gab es immer mal Ruckler. Sonst sende mir ein Beispiel per PM, kann es dann testen…

Nein, es hatte „nichts“ mit der Qualität zu tun. Sämtliche Lieder funktionierten vorher immer problemlos und nach Auskommentieren der Funktion ebenfalls wieder. Als sie aktiv war ging überhaupt keines der getesteten Lieder. Beispielsweise:
128/192/320 kb/s MP3

Hab’s gerade getestet mit Master & Option SAVE_PLAYPOS_WHEN_RFID_CHANGE und bekomme keine Aussetzer.
@Eheran1 hast Du weitere vom Standard abweichende Optionen? Welcher RFID-Leser?

Ein RC522, jedoch ist die Störung mehr als 10x pro Sekunde (100 ms Interval RFID lesen) und unabhängig von dessen Nutzung.

Ich habe ehrlich gesagt keine Ahnung welche Version ich vom Projekt aktuell überhaupt habe oder wie ich diese prüfen oder ändern könnte.

Auch mit dem RC522 & SAVE_PLAYPOS_WHEN_RFID_CHANGE kann ich kein Ruckeln feststellen. @Eheran1 Du müsstest schon alle geänderten Optionen mal zeigen

float map statt int in Led.cpp Zeile 844, siehe Beitrag hier:

float ratio = (gPlayProperties.currentRelPos - 0) / (98 - 0);|
uint32_t mappedValue = ratio * (leds.size() * DIMMABLE_STATES - 0) + 0;|
const uint32_t ledValue = std::clamp<uint32_t>(mappedValue, 0, leds.size() * DIMMABLE_STATES);|

geänderte lib_deps damit ich überhaupt kompilieren kann, siehe Beitrag hier:

lib_deps =
	;https://github.com/schreibfaul1/ESP32-audioI2S.git#224373c
    ;esphome/ESP32-audioI2S@^3.0.0
    
	;https://github.com/madhephaestus/ESP32Encoder.git#61aef9c
    madhephaestus/ESP32Encoder@^0.10.2
	;https://github.com/knolleary/pubsubclient.git#2d228f2
    knolleary/PubSubClient@^2.8
	;https://github.com/peterus/ESP-FTP-Server-Lib#554959f
    peterus/ESP-FTP-Server-Lib@^0.14.1

	;https://github.com/tueddy/FastLED.git
	;https://github.com/me-no-dev/ESPAsyncWebServer.git#1d46269

	;https://github.com/me-no-dev/AsyncTCP.git#ca8ac5f
	me-no-dev/AsyncTCP@^1.1.1
    ;https://github.com/bblanchon/ArduinoJson.git@6.21.3
	bblanchon/ArduinoJson@^6.21.3

    ;https://github.com/pschatzmann/ESP32-A2DP.git#3b0cc1a
	;https://github.com/Arduino-IRremote/Arduino-IRremote.git#ed94895

	;https://github.com/kkloesener/MFRC522_I2C.git#121a27e
    kkloesener/MFRC522_I2C@^1.0

	;https://github.com/miguelbalboa/rfid.git#ba72b92
	;https://github.com/tuniii/LogRingBuffer.git#89d7d3e
	;https://github.com/tueddy/PN5180-Library.git#4a1f139
	;https://github.com/SZenglein/Arduino-MAX17055_Driver#75cdfcf

LOLIN_D32_PRO mit folgenden Settings:

	//########################## MODULES #################################
	#define PORT_EXPANDER_ENABLE            // When enabled, buttons can be connected via port-expander PCA9555 (https://forum.espuino.de/t/einsatz-des-port-expanders-pca9555/306)
	//#define I2S_COMM_FMT_LSB_ENABLE       // Enables FMT instead of MSB for I2S-communication-format. Used e.g. by PT2811. Don't enable for MAX98357a, AC101 or PCM5102A)
	#define MDNS_ENABLE                     // When enabled, you don't have to handle with ESPuino's IP-address. If hostname is set to "ESPuino", you can reach it via ESPuino.local
	//#define MQTT_ENABLE                   // Make sure to configure mqtt-server and (optionally) username+pwd
	//#define FTP_ENABLE                    // Enables FTP-server; DON'T FORGET TO ACTIVATE AFTER BOOT BY PRESSING PAUSE + NEXT-BUTTONS (IN PARALLEL)!
	#define NEOPIXEL_ENABLE                 // Don't forget configuration of NUM_LEDS if enabled
	//#define NEOPIXEL_REVERSE_ROTATION     // Some Neopixels are adressed/soldered counter-clockwise. This can be configured here.
	#define LANGUAGE DE                     // DE = deutsch; EN = english
	//#define STATIC_IP_ENABLE              // DEPRECATED: Enables static IP-configuration (change static ip-section accordingly)
	//#define HEADPHONE_ADJUST_ENABLE       // Used to adjust (lower) volume for optional headphone-pcb (refer maxVolumeSpeaker / maxVolumeHeadphone) and to enable stereo (if PLAY_MONO_SPEAKER is set)
	#define PLAY_MONO_SPEAKER               // If only one speaker is used enabling mono should make sense. Please note: headphones is always stereo (if HEADPHONE_ADJUST_ENABLE is active)
	#define SHUTDOWN_IF_SD_BOOT_FAILS       // Will put ESP to deepsleep if boot fails due to SD. Really recommend this if there's in battery-mode no other way to restart ESP! Interval adjustable via deepsleepTimeAfterBootFails.
	#define MEASURE_BATTERY_VOLTAGE         // Enables battery-measurement via GPIO (ADC) and voltage-divider
	//#define MEASURE_BATTERY_MAX17055      // Enables battery-measurement via external fuel gauge (MAX17055)
	//#define SHUTDOWN_ON_BAT_CRITICAL      // Whether to turn off on critical battery-level (only used if MEASURE_BATTERY_XXX is active)
	#define PLAY_LAST_RFID_AFTER_REBOOT     // When restarting ESPuino, the last RFID that was active before, is recalled and played
	#define USE_LAST_VOLUME_AFTER_REBOOT    // Remembers the volume used at last shutdown after reboot
	#define USEROTARY_ENABLE                // If rotary-encoder is used (don't forget to review WAKEUP_BUTTON if you disable this feature!)
	#define BLUETOOTH_ENABLE                // If enabled and bluetooth-mode is active, you can stream to your ESPuino or to a headset via bluetooth (a2dp-sink & a2dp-source). Note: This feature consumes a lot of resources and the available flash/ram might not be sufficient. 
	//#define IR_CONTROL_ENABLE             // Enables remote control (https://forum.espuino.de/t/neues-feature-fernsteuerung-per-infrarot-fernbedienung/265)
	//#define PAUSE_WHEN_RFID_REMOVED       // Playback starts when card is applied and pauses automatically, when card is removed (https://forum.espuino.de/t/neues-feature-pausieren-wenn-rfid-karte-entfernt-wurde/541)
	#define PAUSE_ON_MIN_VOLUME             // When playback is active and volume is changed to zero, playback is paused automatically. Playback is continued if volume reaches 1. (https://forum.espuino.de/t/neues-feature-pausieren-wenn-rfid-karte-entfernt-wurde/541)
	//#define DONT_ACCEPT_SAME_RFID_TWICE   // RFID-reader doesn't accept the same RFID-tag twice in a row (unless it's a modification-card or RFID-tag is unknown in NVS). Flag will be ignored silently if PAUSE_WHEN_RFID_REMOVED is active. (https://forum.espuino.de/t/neues-feature-dont-accept-same-rfid-twice/1247)
	#define SAVE_PLAYPOS_BEFORE_SHUTDOWN    // When playback is active and mode audiobook was selected, last play-position is saved automatically when shutdown is initiated
	//#define SAVE_PLAYPOS_WHEN_RFID_CHANGE   // When playback is active and mode audiobook was selected, last play-position is saved automatically for old playlist when new RFID-tag is applied
	//#define HALLEFFECT_SENSOR_ENABLE      // Support for hallsensor. For fine-tuning please adjust HallEffectSensor.h Please note: only user-support provided (https://forum.espuino.de/t/magnetische-hockey-tags/1449/35)
	#define VOLUMECURVE 1 					// 0=square, 1=logarithmic (1 is more flatten at lower volume)

	//################## set PAUSE_WHEN_RFID_REMOVED behaviour #############################
	#ifdef PAUSE_WHEN_RFID_REMOVED
		#define ACCEPT_SAME_RFID_AFTER_TRACK_END           // Accepts same RFID after playback has ended (https://forum.espuino.de/t/neues-feature-pausieren-wenn-rfid-karte-entfernt-wurde/541/2)
	#endif

	//################## select SD card mode #############################
	#define SD_MMC_1BIT_MODE              // run SD card in SD-MMC 1Bit mode (using GPIOs 15 + 14 + 2 is mandatory!)
	//#define SINGLE_SPI_ENABLE             // If only one SPI-instance should be used instead of two (not yet working!)


	//################## select RFID reader ##############################
	#define RFID_READER_TYPE_MFRC522_SPI    // use MFRC522 via SPI
	//#define RFID_READER_TYPE_MFRC522_I2C  // use MFRC522 via I2C
	//#define RFID_READER_TYPE_PN5180       // use PN5180 via SPI

	#ifdef RFID_READER_TYPE_MFRC522_I2C
		#define MFRC522_ADDR 0x28           // default I2C-address of MFRC522
	#endif

	#ifdef RFID_READER_TYPE_PN5180
		//#define PN5180_ENABLE_LPCD        // Wakes up ESPuino if RFID-tag was applied while deepsleep is active. Only ISO-14443-tags are supported for wakeup!
	#endif

	#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(RFID_READER_TYPE_MFRC522_SPI)
		constexpr uint8_t rfidGain = 0x07 << 4;      // Sensitivity of RC522. For possible values see reference: https://forum.espuino.de/uploads/default/original/1X/9de5f8d35cbc123c1378cad1beceb3f51035cec0.png
	#endif


	//############# Port-expander-configuration ######################
	#ifdef PORT_EXPANDER_ENABLE
		constexpr uint8_t expanderI2cAddress = 0x20;  // I2C-address of PCA9555 (0x20 is true if PCA's pins A0+A1+A2 are pulled to GND)
	#endif

	//################## BUTTON-Layout ##################################
	/* German documentation: https://forum.espuino.de/t/das-dynamische-button-layout/224
	Please note the following numbers as you need to know them in order to define actions for buttons.
	Even if you don't use all of them, their numbers won't change
		0: NEXT_BUTTON
		1: PREVIOUS_BUTTON
		2: PAUSEPLAY_BUTTON
		3: ROTARYENCODER_BUTTON
		4: BUTTON_4
		5: BUTTON_5

	Don't forget to enable/configure those buttons you want to use in your develboard-specific config (e.g. settings-custom.h)

	Single-buttons [can be long or short] (examples):
		BUTTON_0_SHORT => Button 0 (NEXT_BUTTON) pressed shortly
		BUTTON_3_SHORT => Button 3 (ROTARYENCODER_BUTTON) pressed shortly
		BUTTON_4_LONG => Button 4 (BUTTON_4) pressed long

	Multi-buttons [short only] (examples):
		BUTTON_MULTI_01 => Buttons 0+1 (NEXT_BUTTON + PREVIOUS_BUTTON) pressed in parallel
		BUTTON_MULTI_12 => Buttons 1+2 (PREV_BUTTON + PAUSEPLAY_BUTTON) pressed in parallel

	Actions:
		To all of those buttons, an action can be assigned freely.
		Please have a look at values.h to look up actions available (>=100 can be used)
		If you don't want to assign an action or you don't use a given button: CMD_NOTHING has to be set
	*/
	// *****BUTTON*****        *****ACTION*****
	#define BUTTON_0_SHORT    CMD_NEXTTRACK
	#define BUTTON_1_SHORT    CMD_PREVTRACK
	#define BUTTON_2_SHORT    CMD_PLAYPAUSE
	#define BUTTON_3_SHORT    CMD_MEASUREBATTERY //encoder
	#define BUTTON_4_SHORT    CMD_SEEK_BACKWARDS
	#define BUTTON_5_SHORT    CMD_SEEK_FORWARDS

	#define BUTTON_0_LONG     CMD_SEEK_FORWARDS //CMD_TOGGLE_BLUETOOTH_SINK_MODE //CMD_LASTTRACK
	#define BUTTON_1_LONG     CMD_SEEK_BACKWARDS //CMD_FIRSTTRACK
	//#define BUTTON_0_LONG     CMD_NEXTTRACK //CMD_TOGGLE_BLUETOOTH_SINK_MODE //CMD_LASTTRACK
	//#define BUTTON_1_LONG     CMD_PREVTRACK //CMD_FIRSTTRACK
	#define BUTTON_2_LONG     CMD_PLAYPAUSE
	#define BUTTON_3_LONG     CMD_SLEEPMODE
	#define BUTTON_4_LONG     CMD_VOLUMEUP
	#define BUTTON_5_LONG     CMD_VOLUMEDOWN

	//#define BUTTON_MULTI_01   CMD_NOTHING //CMD_TOGGLE_BLUETOOTH_SINK_MODE  //CMD_TOGGLE_WIFI_STATUS (disabled now to prevent children from unwanted WiFi-disable)
	#define BUTTON_MULTI_01   CMD_TOGGLE_BLUETOOTH_SINK_MODE
	#define BUTTON_MULTI_02   CMD_NOTHING //CMD_ENABLE_FTP_SERVER
	#define BUTTON_MULTI_03   CMD_NOTHING
	#define BUTTON_MULTI_04   CMD_NOTHING
	#define BUTTON_MULTI_05   CMD_NOTHING
	#define BUTTON_MULTI_12   CMD_NOTHING //CMD_TELL_IP_ADDRESS
	#define BUTTON_MULTI_13   CMD_NOTHING
	#define BUTTON_MULTI_14   CMD_NOTHING
	#define BUTTON_MULTI_15   CMD_NOTHING
	#define BUTTON_MULTI_23   CMD_NOTHING
	#define BUTTON_MULTI_24   CMD_NOTHING
	#define BUTTON_MULTI_25   CMD_NOTHING
	#define BUTTON_MULTI_34   CMD_NOTHING
	#define BUTTON_MULTI_35   CMD_NOTHING
	#define BUTTON_MULTI_45   CMD_NOTHING

	//#################### Various settings ##############################

	// Serial-logging-configuration
	#define SERIAL_LOGLEVEL LOGLEVEL_DEBUG              // Current loglevel for serial console

    // DEPRECATED: This is now done using dynamic network configuration.
    //              If left, it is used for the automatic migration exactly once
	// Static ip-configuration
	#ifdef STATIC_IP_ENABLE
		#define LOCAL_IP   192,168,2,100                // ESPuino's IP
		#define GATEWAY_IP 192,168,2,1                  // IP of the gateway/router
		#define SUBNET_IP  255,255,255,0                // Netmask of your network (/24 => 255.255.255.0)
		#define DNS_IP     192,168,2,1                  // DNS-server of your network; in private networks it's usually the gatewy's IP
	#endif

	// Buttons (better leave unchanged if in doubts :-))
	constexpr uint8_t buttonDebounceInterval = 50;                // Interval in ms to software-debounce buttons
	constexpr uint16_t intervalToLongPress = 700;                 // Interval in ms to distinguish between short and long press of buttons
	
	// Buttons active state: Default 0 for active LOW, 1 for active HIGH e.g. for TTP223 Capacitive Touch Switch Button (FinnBox)
	#define BUTTON_0_ACTIVE_STATE 0
	#define BUTTON_1_ACTIVE_STATE 0
	#define BUTTON_2_ACTIVE_STATE 0
	#define BUTTON_3_ACTIVE_STATE 0
	#define BUTTON_4_ACTIVE_STATE 0
	#define BUTTON_5_ACTIVE_STATE 0
	
	//#define CONTROLS_LOCKED_BY_DEFAULT			// If set the controls are locked at boot
	#define INCLUDE_ROTARY_IN_CONTROLS_LOCK			// If set the rotary encoder is locked if controls are locked

	// RFID-RC522
	#define RFID_SCAN_INTERVAL 100                      // Interval-time in ms (how often is RFID read?)

	// Automatic restart
	#ifdef SHUTDOWN_IF_SD_BOOT_FAILS
		constexpr uint32_t deepsleepTimeAfterBootFails = 20;      // Automatic restart takes place if boot was not successful after this period (in seconds)
	#endif

	// FTP
	// Nothing to be configured here...
	// Default user/password is esp32/esp32 but can be changed via webgui

	// timezone
	// see list of valid timezones: https://github.com/nayarsystems/posix_tz_db/blob/3edd201fa1131db7d09fd90cbb66d2f33d8915b3/zones.csv
	// example for Europe/Berlin:	"CET-1CEST,M3.5.0,M10.5.0/3"
	// example for America/Toronto:	"EST5EDT,M3.2.0,M11.1.0"
	constexpr const char timeZone[] = "CET-1CEST,M3.5.0,M10.5.0/3"; // Europe/Berlin 

	// ESPuino will create a WiFi if joing existing WiFi was not possible. Name and password can be configured here.
	constexpr const char accessPointNetworkSSID[] = "Ottibox";     // Access-point's SSID
	constexpr const char accessPointNetworkPassword[] = "";        // Access-point's Password, at least 8 characters! Set to an empty string to spawn an open WiFi.

	// Bluetooth
	constexpr const char nameBluetoothSinkDevice[] = "Ottibox";        // Name of your ESPuino as Bluetooth-device

	// Where to store the backup-file for NVS-records
	constexpr const char backupFile[] = "/backup.txt"; // File is written every time a (new) RFID-assignment via GUI is done

	//#################### Settings for optional Modules##############################
	// (optinal) Neopixel
	#ifdef NEOPIXEL_ENABLE
		#define NUM_INDICATOR_LEDS		24          	// number of Neopixel LEDs (formerly NUM_LEDS)
		#define NUM_CONTROL_LEDS		0				// optional control leds (https://forum.espuino.de/t/statische-ws2812-leds/1703)
                #define CONTROL_LEDS_COLORS		{}		// Colors for the control LEDs. Make sure it lists at least NUM_CONTROL_LEDS colors, e.g. for three control LEDs define: CONTROL_LEDS_COLORS {CRGB::Yellow, CRGB::Blue, 0xFFFFFF} (predefined colors: http://fastled.io/docs/3.1/struct_c_r_g_b.html)
		#define CHIPSET					WS2812B     	// type of Neopixel
		#define COLOR_ORDER				GRB
		#define NUM_LEDS_IDLE_DOTS		4           	// count of LEDs, which are shown when Idle
		#define OFFSET_PAUSE_LEDS		false			// if true the pause-leds are centered in the mid of the LED-Strip
		#define PROGRESS_HUE_START		85          	// Start and end hue of mulitple-LED progress indicator. Hue ranges from basically 0 - 255, but you can also set numbers outside this range to get the desired effect (e.g. 85-215 will go from green to purple via blue, 341-215 start and end at exactly the same color but go from green to purple via yellow and red)
		#define PROGRESS_HUE_END		-1
		#define DIMMABLE_STATES			50		// Number of dimmed values between two full LEDs (https://forum.espuino.de/t/led-verbesserungen-rework/1739)
		//#define LED_OFFSET                		0           	// shifts the starting LED in the original direction of the neopixel ring
	#endif

	#if defined(MEASURE_BATTERY_VOLTAGE) || defined(MEASURE_BATTERY_MAX17055)
		#define BATTERY_MEASURE_ENABLE                 // Don't change. Set automatically if any method of battery monitoring is selected.
		constexpr uint8_t s_batteryCheckInterval = 10; // How often battery is measured (in minutes) (can be changed via GUI!)
	#endif

	#ifdef MEASURE_BATTERY_VOLTAGE
		// (optional) Default-voltages for battery-monitoring via Neopixel; can be changed later via WebGUI
		constexpr float s_warningLowVoltage = 3.0;                      // If battery-voltage is <= this value, a cyclic warning will be indicated by Neopixel (can be changed via GUI!)
		constexpr float s_warningCriticalVoltage = 2.9;                 // If battery-voltage is <= this value, assume battery near-empty. Set to 0V to disable.
		constexpr float s_voltageIndicatorLow = 3.0;                    // Lower range for Neopixel-voltage-indication (0 leds) (can be changed via GUI!)
		constexpr float s_voltageIndicatorHigh = 3.6;                   // Upper range for Neopixel-voltage-indication (all leds) (can be changed via GUI!)
	#endif

	#ifdef MEASURE_BATTERY_MAX17055
		constexpr float s_batteryLow = 15.0;            // low percentage
		constexpr float s_batteryCritical = 5.0;        // critical percentage

		constexpr uint16_t s_batteryCapacity = 6000;    // design cap of battery (mAh)
		constexpr uint16_t s_emptyVoltage = 300;        // empty voltage in 10mV
		constexpr uint16_t s_recoveryVoltage = 360;     // recovery voltage in 10mV
		constexpr uint8_t  s_batteryChemistry = 0x60;   // 0 = Li-Ion, 0x20 = NCR, 0x60 = LiFePO4
		constexpr float s_resistSensor = 0.01;          // current sense resistor, currently non-default values might lead to problems
		constexpr bool s_vCharge = false;                   // true if charge voltage is greater than 4.275V
	#endif

	// enable I2C if necessary
	#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE) || defined(MEASURE_BATTERY_MAX17055)
		#define I2C_2_ENABLE
	#endif

	// (optinal) Headphone-detection (leave unchanged if in doubts...)
	#ifdef HEADPHONE_ADJUST_ENABLE
		constexpr uint16_t headphoneLastDetectionDebounce = 1000; // Debounce-interval in ms when plugging in headphone
	#endif

	// Seekmode-configuration
	constexpr uint8_t jumpOffset = 30;                            // Offset in seconds to jump for commands CMD_SEEK_FORWARDS / CMD_SEEK_BACKWARDS

Mal anders gefragt: Wenn ich das Problem durch setzen dieser Einstellung reproduzieren kann, wie kann ich es debuggen? Also wonach sollte ich Ausschau halten? Heap ist reichlich da - genau wie jetzt, wo es geht.

Was spricht denn dagegen, es einfach mal mit dem aktuellen Master oder dem aktuellen dev (wobei der gerade sehr viele Änderungen erhalten hat) zu versuchen?

Okay, also nach zusammenführen meiner Änderungen kommt beim Build wieder der Fehler von hier, siehe unten. Also wieder die Links anpassen? Aber wo ist die „lib_deps“ hin? Oder wie kann ich das Problem grundsätzlich beheben?

 *  Executing task: C:\Users\Ich\.platformio\penv\Scripts\platformio.exe run --environment lolin_d32_pro_sdmmc_pe 

Processing lolin_d32_pro_sdmmc_pe (board: lolin_d32_pro; platform: espressif32@^6.5.0; framework: arduino, espidf)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Library Manager: Installing git+https://github.com/schreibfaul1/ESP32-audioI2S.git#e344dfb
git version 2.41.0.windows.1
Cloning into 'C:\Users\Ich\.platformio\.cache\tmp\pkg-installing-a8y8vpdk'...
remote: Enumerating objects: 4044, done.
remote: Counting objects: 100% (1154/1154), done.
remote: Compressing objects: 100% (371/371), done.
remote: Total 4044 (delta 865), reused 1045 (delta 779), pack-reused 2890Receiving objects: 100% (4044/4044), 46.07 MiB | 2.47 MiB/s
Receiving objects: 100% (4044/4044), 47.31 MiB | 2.45 MiB/s, done.
Resolving deltas: 100% (2373/2373), done.
VCSBaseException: VCS: Could not process command ['git', 'clone', '--recursive', 'https://github.com/schreibfaul1/ESP32-audioI2S.git', 'C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-a8y8vpdk']

 *  The terminal process "C:\Users\Ich\.platformio\penv\Scripts\platformio.exe 'run', '--environment', 'lolin_d32_pro_sdmmc_pe'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it.

Funktioniert git grundsätzlich?

Also einfach mal eine cmd/Kommandozeile aufmachen und dann

C:\Users\jhb>git --version
git version 2.33.1.windows.1

und dann halt

PFAD mit deinem ERSETZEN!

git clone -v --recursive https://github.com/schreibfaul1/ESP32-audioI2S.git C:\\Users\\jhb\\.platformio\\.cache\\tmp\\pkg-installing-a8y8vpdk
C:\Users\jhb>git clone -v --recursive https://github.com/schreibfaul1/ESP32-audioI2S.git C:\\Users\\jhb\\.platformio\\.cache\\tmp\\pkg-installing-a8y8vpdk
Cloning into 'C:\\Users\\jhb\\.platformio\\.cache\\tmp\\pkg-installing-a8y8vpdk'...
POST git-upload-pack (185 bytes)
POST git-upload-pack (612 bytes)
remote: Enumerating objects: 4052, done.
remote: Counting objects: 100% (1162/1162), done.
remote: Compressing objects: 100% (379/379), done.
remote: Total 4052 (delta 869), reused 1044 (delta 779), pack-reused 2890
Receiving objects: 100% (4052/4052), 47.64 MiB | 11.37 MiB/s, done.
Resolving deltas: 100% (2377/2377), done.

PS C:\Users\Ich> git --version
git version 2.41.0.windows.1
PS C:\Users\Ich> git clone -v --recursive https://github.com/schreibfaul1/ESP32-audioI2S.git C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-d74cnc1r
Cloning into 'C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-d74cnc1r'...
POST git-upload-pack (185 bytes)
POST git-upload-pack (612 bytes)
remote: Enumerating objects: 4079, done.
remote: Counting objects: 100% (1189/1189), done.
remote: Compressing objects: 100% (398/398), done.
remote: Total 4079 (delta 886), reused 1059 (delta 787), pack-reused 2890
Receiving objects: 100% (4079/4079), 47.83 MiB | 2.58 MiB/s, done.
Resolving deltas: 100% (2394/2394), done.

Nach dem Start von VSCode passierte dann das automatisch:

Resolving lolin_d32_pro_sdmmc_pe dependencies...
Library Manager: Installing git+https://github.com/schreibfaul1/ESP32-audioI2S.git#e344dfb
git version 2.41.0.windows.1
Cloning into 'C:\Users\Ich\.platformio\.cache\tmp\pkg-installing-3xfxy8ed'...
VCSBaseException: VCS: Could not process command ['git', 'clone', '--recursive', 'https://github.com/schreibfaul1/ESP32-audioI2S.git', 'C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-3xfxy8ed']

Bei PlatformIO auf „Build“ kommt:

 *  Executing task: C:\Users\Ich\.platformio\penv\Scripts\platformio.exe run --environment lolin_d32_pro_sdmmc_pe 

Processing lolin_d32_pro_sdmmc_pe (board: lolin_d32_pro; platform: espressif32@^6.5.0; framework: arduino, espidf)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Library Manager: Installing git+https://github.com/schreibfaul1/ESP32-audioI2S.git#e344dfb
git version 2.41.0.windows.1
Cloning into 'C:\Users\Ich\.platformio\.cache\tmp\pkg-installing-7rn1rza1'...
remote: Enumerating objects: 4079, done.
remote: Counting objects: 100% (1226/1226), done.
remote: Compressing objects: 100% (397/397), done.
remote: Total 4079 (delta 925), reused 1095 (delta 825), pack-reused 2853
Receiving objects: 100% (4079/4079), 47.73 MiB | 2.66 MiB/s, done.
Resolving deltas: 100% (2399/2399), done.
VCSBaseException: VCS: Could not process command ['git', 'clone', '--recursive', 'https://github.com/schreibfaul1/ESP32-audioI2S.git', 'C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-7rn1rza1']

 *  The terminal process "C:\Users\Ich\.platformio\penv\Scripts\platformio.exe 'run', '--environment', 'lolin_d32_pro_sdmmc_pe'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it.

okay git läuft damit schon mal grundsätzlich…

Ich vermute dein VSCode/dein PlatfomIo hat einen weg…

Vielleicht mal alles neu machen:
https://shihab1511.medium.com/clean-uninstall-vs-code-windows-pc-to-start-afresh-facaec6f5bf2

Alles wie in der von dir verlinkten Anleitung deinstalliert. Neue exe hier runtergeladen und installiert. Nach der Anleitung hier PlatformIO eingerichtet. Nach dieser Anleitung das Projekt importiert und die Konfiguration auf lolin_d32_pro_sdmmc_pe geändert. Dabei tritt der Fehler schon auf:

Resolving lolin_d32_pro_sdmmc_pe dependencies...
Library Manager: Installing git+https://github.com/schreibfaul1/ESP32-audioI2S.git#17f0e04
git version 2.41.0.windows.1
Cloning into 'C:\Users\Ich\.platformio\.cache\tmp\pkg-installing-zxcryn37'...
VCSBaseException: VCS: Could not process command ['git', 'clone', '--recursive', 'https://github.com/schreibfaul1/ESP32-audioI2S.git', 'C:\\Users\\Ich\\.platformio\\.cache\\tmp\\pkg-installing-zxcryn37']

Konkret also gemacht nach der frischen VisualStudio Installation:

  • PlatformIO installiert
  • GitLens installiert
  • STGR + SHIFT + P → „Git: Clone“ eingeben und mit Maus anklicken → „Clone from Github“ anklicken
  • „ESPuino“ eingeben und das Projekt von biologist anklicken
  • [Ich glaube hier kam eine Anfrage zum Anmelden bei Github, die ich bestätigt habe]
  • lokales Verzeichnis anlegen und bestätigen
  • nach Installation/Download dann auf das „Ordner“ Symbol unten wo ich glaube „Default“ stand und „env:lolin_d32_pro_sdmmc_pe“ ausgewählt
  • Fehler tritt auf

Letztes mal Fehler umgangen durch händisches Installieren von einigen libraries und dem Abändern der Guthub-URLs zu PlatformIO-„Direktverweisen“ wie hier damals beschrieben.

Was nicht hilft:

1.„long paths“ in git und windows aktivieren wie in der Problemlösung hier
2. - git config --global user.name "My Name" und git config --global user.email "myemail@example.com" einstellen
3. PlatformIO nochmal deinstalliert, Ordner „C:\Users\user.platformio“ gelöscht (93’000 Dateien, 3 GB, wurde in der vorherigen Deinstallationsanleitung nicht entfernt)

  • Do you want to install the recommended 'PlatformIO IDE' extension from PlatformIO for this repository? → install → reload now
  • PlatformIO: Configuring project: Downloading 0% → ca. 20 min warten → gleicher Fehler.

Was funktioniert um das Problem mit dem Importieren zu umgehen:
PlatformIO → libraries → ESP32-audioI2S suchen → esphome/ESP32-audioI2S@^2.0.7 hinzufügen (2.0.7 ist 9 Monate alt, 2.1.0 2 Jahre, jeweils laut PlatformIO, auf GitHub gibt es diese Versionen nicht, die sind völlig veraltet)

Installing esphome/ESP32-audioI2S @ ^2.0.7
[Download + Unpacking]
ESP32-audioI2S@2.1.0 has been installed!

Und dann kam automatisch:

Resolving lolin_d32_pro_sdmmc_pe dependencies...
Already up-to-date.
Updating metadata for the vscode IDE...
Project has been successfully updated!

Also mal „Build“ versuchen und das klappt nicht, wegen der veralteten Version(?):

[viel compiling und anderes]
Compiling .pio\build\lolin_d32_pro_sdmmc_pe\src\Ftp.o
src/Bluetooth.cpp:15:11: fatal error: BluetoothA2DPSink.h: No such file or directory

***************************************************************************
* Looking for BluetoothA2DPSink.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:BluetoothA2DPSink.h"
* Web  > https://registry.platformio.org/search?q=header:BluetoothA2DPSink.h
*
***************************************************************************

  #include "BluetoothA2DPSink.h"
           ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pio\build\lolin_d32_pro_sdmmc_pe\src\Bluetooth.o] Error 1
src/Ftp.cpp:15:11: fatal error: ESP-FTP-Server-Lib.h: No such file or directory

****************************************************************************
* Looking for ESP-FTP-Server-Lib.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:ESP-FTP-Server-Lib.h"
* Web  > https://registry.platformio.org/search?q=header:ESP-FTP-Server-Lib.h
*
****************************************************************************

  #include "ESP-FTP-Server-Lib.h"
           ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pio\build\lolin_d32_pro_sdmmc_pe\src\Ftp.o] Error 1
src/AudioPlayer.cpp: In function 'void AudioPlayer_Task(void*)':
src/AudioPlayer.cpp:363:57: error: no matching function for call to 'AudioCustom::setVolume(uint8_t&, int)'
  audio->setVolume(AudioPlayer_CurrentVolume, VOLUMECURVE);
                                                         ^
In file included from src/AudioPlayer.cpp:6:
.pio/libdeps/lolin_d32_pro_sdmmc_pe/ESP32-audioI2S/src/Audio.h:181:10: note: candidate: 'void Audio::setVolume(uint8_t)'
     void setVolume(uint8_t vol);
          ^~~~~~~~~
.pio/libdeps/lolin_d32_pro_sdmmc_pe/ESP32-audioI2S/src/Audio.h:181:10: note:   candidate expects 1 argument, 2 provided
src/AudioPlayer.cpp:385:47: error: no matching function for call to 'AudioCustom::setVolume(uint8_t&, int)'
    audio->setVolume(currentVolume, VOLUMECURVE);
                                               ^
In file included from src/AudioPlayer.cpp:6:
.pio/libdeps/lolin_d32_pro_sdmmc_pe/ESP32-audioI2S/src/Audio.h:181:10: note: candidate: 'void Audio::setVolume(uint8_t)'
     void setVolume(uint8_t vol);
          ^~~~~~~~~
.pio/libdeps/lolin_d32_pro_sdmmc_pe/ESP32-audioI2S/src/Audio.h:181:10: note:   candidate expects 1 argument, 2 provided
src/AudioPlayer.cpp:409:48: error: 'class AudioCustom' has no member named 'inBufferSize'; did you mean 'inBufferFree'?
     if (gPlayProperties.isWebstream && (audio->inBufferSize() > 0)) {
                                                ^~~~~~~~~~~~
                                                inBufferFree
src/AudioPlayer.cpp:410:90: error: 'class AudioCustom' has no member named 'inBufferSize'; did you mean 'inBufferFree'?
      gPlayProperties.currentRelPos = (double) (audio->inBufferFilled() / (double) audio->inBufferSize()) * 100;
                                                                                          ^~~~~~~~~~~~
                                                                                          inBufferFree
*** [.pio\build\lolin_d32_pro_sdmmc_pe\src\AudioPlayer.o] Error 1