diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml index c297f61a..077dfb86 100644 --- a/.github/workflows/test-builds.yml +++ b/.github/workflows/test-builds.yml @@ -19,13 +19,8 @@ jobs: strategy: matrix: variant: - - esp32-a1s - - lolin32 - - lolin_d32 - lolin_d32_pro - lolin_d32_pro_sdmmc_pe - - nodemcu-32s - - az-delivery-devkit-v4 - ttgo_t8 - complete @@ -40,15 +35,15 @@ jobs: ${{ runner.os }}-pip- - name: Cache PlatformIO - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.platformio key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} - - name: Setup Python 3.9 + - name: Setup Python 3.11 uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Install PlatformIO Core run: | pip install -U setuptools platformio diff --git a/.gitignore b/.gitignore index 83bbbfe6..d2ff9ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ html/*.min.html html/locales/*.min.json html/js/*.min.min.js html/js/swaggerInitializer.min.js +managed_components/ diff --git a/README.md b/README.md index bfa71a13..e083290d 100644 --- a/README.md +++ b/README.md @@ -43,24 +43,25 @@ signal of it: I did all my tests with [UDA1334](https://www.adafruit.com/product/3678), [MS6324](https://forum.espuino.de/t/kopfhoererplatine-basierend-auf-ms6324-und-tda1308/1099/) and [PCM5102a](https://github.com/biologist79/ESPuino/tree/master/PCBs/Headphone%20with%20PCM5102a%20and%20TDA1308). -General advice: ESPuino makes use of library -[ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S/); so everything that's supposed to -work with this library should work with ESPuino, too (but maybe not right out-of-the-box). -Especially this is true for -[ES8388](https://github.com/schreibfaul1/ESP32-audioI2S/blob/master/examples/ESP32_ES8388/ESP32_ES8388.ino). ## Hardware setup You could start on a breadboard with jumper wires but I _strongly_ recommend to start right away with a PCB that was especially developed for ESPuino. There are several available, but [ESPuino-mini 4L (SMD)](https://forum.espuino.de/t/espuino-mini-4layer/1661) can be considered as -being the latest generation. Furthermore you need a ESP32-develboard like (or another one that's +being the latest generation. This pcb can obtained via the forum. + +![mini4L](https://forum.espuino.de/uploads/default/original/2X/b/b2762236b56ea3d4aa776dcbb5f5c7254f8a02b4.jpeg "Mini4L carrier PCB") + +Furthermore you need a ESP32-develboard like (or another one that's pin compatible): - [D32 pro LiFePO4](https://forum.espuino.de/t/esp32-develboard-d32-pro-lifepo4/1109) -- [E32 LiPo](https://forum.espuino.de/t/esp32-develboard-e32-lipo/1135) - [Wemos Lolin D32 pro](https://www.wemos.cc/en/latest/d32/d32_pro.html) +LiFePO4-Develboard was developed my myself can be obtained obtained via the forum. This is how it looks like: +![LiFePO4-Develboard](https://forum.espuino.de/uploads/default/original/2X/b/b0b6d9562a5b33e396850a9ab307dfc6f2a913cc.jpeg "LiFePO4-Develboard") + > :warning: **Due to memory restrictions meanwhile it's mandatory to use ESP32 with PSRAM.** This being said you need to make sure that your develboard carries an ESP32-WROVER. And you should make sure that 16 MB flash memory is available (both is true for all @@ -69,8 +70,7 @@ develboards named above). Optionally a [headphone-pcb](https://forum.espuino.de/t/kopfhoererplatine-basierend-auf-ms6324-und-tda1308/1099/) can be attached to [ESPuino-mini 4L (SMD)](https://forum.espuino.de/t/espuino-mini-4layer/1661). -However, feel free to develop PCBs yourself. But again, be advised your ESP32 needs PSRAM in order to -run ESPuino properly. +However, feel free to develop PCBs yourself. But again, be advised your ESP32 needs PSRAM in order to run ESPuino properly. ## Getting started @@ -97,13 +97,12 @@ run ESPuino properly. lolin_d32_pro_sdmmc_pe). - Edit `src/settings.h` according your needs. - Edit board-specific (`HAL`) config-file (e.g. `settings-lolin_d32_pro_sdmmc_pe.h` for Lolin - D32/D32 pro). If you're running a board that is not listed there: start with `settings-custom.h` + D32 pro). If you're running a board that is not listed there: start with `settings-custom.h` and change it according your needs. - Connect your develboard via USB, click the alien-head icon in the left sidebar, choose the project task that matches your desired HAL and run `Upload and Monitor`. All libraries necessary are fetched automatically and compilation of the code gets started. After that, your ESP32 is flashed - with the firmware. Depending on your develboard it might be necessary to push a button in order to - allow ESP32 to enter flash mode (not necessary für Lolin32, D32 und D32 pro). + with the firmware. - Now have a look at the serial output at the bottom of Visual Studio Code's window. At the first run there might appear a few error messages (related to missing entries in NVS). Don't worry, this is just normal. However, make sure the SD card is detected as this is mandatory! @@ -128,9 +127,9 @@ run ESPuino properly. ## SD-card: SPI or SD-MMC (1 bit)-mode? -Having the SD card working is mandatory, ESPuino doesn't start without working SD card (at least +Having the µSD card working is mandatory, ESPuino doesn't start without working SD card (at least unless `NO_SDCARD` hasn't been enabled previously). However, there are two modes available to -interface SD cards: SPI and SDMMC (1 bit). Be advised that SDMMC is twice as fast as SPI and +interface µSD cards: SPI and SDMMC (1 bit). Be advised that SDMMC is twice as fast as SPI and needs one GPIO less. So basically it's a no-brainer. ## Which RFID-reader: RC522 or PN5180? @@ -253,49 +252,45 @@ width="30%"> It's not just simply playing music; different playback modes are supported: -- `Single track` => plays one track one time -- `Single track (loop)` => plays one track forever -- `Single track of a directory (random). Followed by sleep` => picks and plays one single track out - of a directory and falls asleep subsequently. Neopixel gets dimmed. -- `Audiobook`=> single file or playlist/folder; last play position (file and playlist) is saved - (when pushing pause or moving to another track) and reused next time -- `Audiobook (loop)` => same as audiobook but loops forever -- `Folder/playlist (sorted)` => plays all tracks in order from a folder one time -- `Folder/playlist (random order)` => plays all tracks in random order from a folder one time -- `Folder/playlist (sorted)` => plays all tracks in order from a folder forever -- `Folder/playlist (random order)` => plays all tracks in random order from a folder forever -- `All tracks of a random subdirectory (sorted)` => plays of tracks in order of a - randomly picked subdirectory of a given directory -- `All tracks of a random subdirectory (random order)` => plays all tracks in random order of a - randomly picked subdirectory of a given directory -- `Webradio` => always only one "track": plays a webstream -- `List (files from SD and/or webstreams) from local .m3u-File` => can be one or more files / - webradio stations with local .m3u as sourcefile +| Type | Action | +| ------------- | ------------- | +| `Single track` | Plays one track one time | +| `Single track (loop)` | Plays one track forever | +| `Single track of a directory (random). Followed by sleep` | Picks and plays one single track out of a directory and falls asleep subsequently. Neopixel gets dimmed.| +| `Audiobook` | Single file or playlist/folder; last play position (file and playlist) is saved (when pushing pause or moving to another track) and reused next time | +| `Audiobook (loop)` | Same as audiobook but loops forever | +| `Folder/playlist (sorted)` | Plays all tracks in order from a folder one time | +| `Folder/playlist (random order)` | Plays all tracks in random order from a folder one time | +| `Folder/playlist (sorted)` | Plays all tracks in order from a folder forever| +| `Folder/playlist (random order)` | Plays all tracks in random order from a folder forever | +| `All tracks of a random subdirectory (sorted)` | Plays of tracks in order of a randomly picked subdirectory of a given directory | +| `All tracks of a random subdirectory (random order)` | Plays all tracks in random order of a randomly picked subdirectory of a given directory | +| `Webradio` | always only one "track": plays a webstream | +| `List (files from SD and/or webstreams) from local .m3u-File` | Can be one or more files / webradio stations with local .m3u as sourcefile | ### Modification RFID tags -There are special RFID tags, that don't start music by themselves but can modify things. If applied +There are special RFID tags, that don't start music by themselves but can modify ESPuinos behaviour. If applied a second time, it's previous action/modification will be reversed. So first make sure to start the music then use a modification card in order to apply your desired modification: -- Lock/unlock all buttons -- Sleep after 5/30/60/120 minutes -- Sleep after end of current track -- Sleep after end of playlist -- Sleep after five tracks -- Dim Neopixel -- Loop track -- Loop playlist -- Toggle WiFi (enable/disable) => disabling WiFi while webstream is active will stop a running - webstream instantly! -- Toggle Bluetooth sink (enable/disable) => restarts ESPuino immediately. In this mode you can - stream to your ESPuino via BT. -- Toggle Bluetooth source (enable/disable) => restarts ESPuino immediately. In this mode your - ESPuino can stream via BT to an external device. -- Toggle through the different modes (Normal => BT-Sink => BT-Source => Normal) -- Speech output of IP-address or current time +| Type | Action | +| ------------- | ------------- | +| Lock/unlock all buttons | Locks / unlocks all buttons (might be useful for toddlers| +| Sleep after 5/30/60/120 minutes | ESPuino falls asleep automatically after the given period | +| Sleep after end of current track | ESPuino falls asleep after the current track | +| Sleep after end of playlist | ESPuino falls asleep after the current playlist | +| Sleep after five tracks | ESPuino falls asleep after five tracks | +| Dim Neopixel | Dim Neopixel to nightmode | +| Loop track | Loops / unloops current track | +| Loop playlist | Loops / unloops current playlist | +| Toggle WiFi (enable/disable) | Enables / disables WiFi. Please note: disabling WiFi while webstream is active will stop a running webstream instantly! | +| Toggle Bluetooth sink (enable/disable) | Restarts ESPuino immediately. In this mode you can stream to your ESPuino via BT whereas websteam / SD is not available. Hint: if you lost this modification card you can 'escape' this mode with an RFID tag that's unknown to ESPuino. | +| Toggle Bluetooth source (enable/disable) | Restarts ESPuino immediately. In this mode your ESPuino can stream via BT to an external device whereas websteam / SD is not available. Hint: if you lost this modification card you can 'escape' this mode with an RFID tag that's unknown to ESPuino.| +| Toggle through the different modes | Normal => BT-Sink => BT-Source => Normal | +| Speech output of IP-address or current time | Speech output of IP address or current time | > :information_source: All sleep modes do dimming (Neopixel) automatically because it's supposed to be used in the evening when going to bed. Well, at least that's my children's indication :-) @@ -354,7 +349,7 @@ Most designs use a Neopixel ring, but a linear strip is also possible. > :warning: This section describes my default-design: 3 buttons + rotary-encoder. Feel free to change number of buttons (up to 5) and button-actions according your needs in `settings.h` and - your develboard-specific config-file (e.g. `settings-lolin32.h`). At maximum you can activate five + your develboard-specific config-file (e.g. `settings-lolin_d32_pro_sdmmc_pe.h`). At maximum you can activate five buttons + rotary-encoder. Minimum duration for long press (to distinguish vom short press) in ms is defined by `intervalToLongPress`. All actions available are listed in `src/values.h`. If using GPIO \>= 34 make sure to add a external pullup-resistor (10 k). diff --git a/changelog.md b/changelog.md index 1855609d..488f3857 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,16 @@ # Changelog +## DEV-branch + +* 25.11.2024: Moving some settings to the Web UI (#350), thanks to @trainbird ! +* 17.11.2024: Simplify 'SdCard_ParseM3UPlaylist' and fix parsing, thanks to @h4kun4m4t4t4 ! +* 29.10.2024: Update Audio lib +* 29.10.2024: Enable CONFIG_ESP32_REV_MIN_3 to save some IRAM +* 22.10.2024: Cleaning up `management.html` (#348), thanks to @trainbird ! +* 22.10.2024: Update Arduino-IRremote to support the ESP 3.0 core +* 29.09.2024: Removal of support for non-PSRAM HALs (Lolin32, LolinD32, DevkitC) and ESP32-A1S +* 29.09.2024: Prepare for Arduino 3.0.5 +* 27.09.2024: PlatformIO package 6.9.0 ## Version 2.3 (23.09.2024) @@ -17,8 +28,8 @@ * 20.05.2024: PlatformIO package 6.7.0 (Arduino 2.0.16, ESP-IDF 4.4.7) * 20.05.2024: Disable bluetooth support for A1S (IRAM too small) * 09.05.2024: Upgrade to Bootstrap v5.0 + Web-UI Enhancements (#328), thanks to @caco3 ! -* 23.04.2024: Enhance UI minification (#323), thanks to @caco3 ! -* 22.04.2024: Added virtual RFID-Cards (#319), thanks to @caco3 ! +* 23.04.2024: Enhance UI minification (#323), thanks to @caco3 ! +* 22.04.2024: Added virtual RFID-Cards (#319), thanks to @caco3 ! * 18.04.2024: Correct calculation of newFilePos for SEEK_POS_PERCENT, thanks to @sfields! * 18.04.2024: Correct calculation of gPlayProperties.currentRelPos, thanks to @sfields! * 18.04.2024: Get title from-VORBISCOMMENT and ID3, thanks to @sfields! @@ -31,13 +42,13 @@ * 28.03.2024: Fix some warnings with upcoming Arduino 3 (ESP-IDF v5.1) * 16.03.2024: Reduce memory usage by measurement of JSON payload length * 15.03.2024: MQTT receive: Bug fix and avoid payload copy (#309), thanks to @eikel -* 15.03.2024: Add coverimage support for ogg, vorbis, opus (and some flac), thanks to @sfields ! +* 15.03.2024: Add coverimage support for ogg, vorbis, opus (and some flac), thanks to @sfields ! * 19.02.2024: Add coverimage support for M4A files in Web-UI -* 18.02.2024: Add coverimage support for flac files in Web-UI, thanks to @sfields ! -* 15.02.2024: Rework playlist generation (#275), thanks to @laszloh ! +* 18.02.2024: Add coverimage support for flac files in Web-UI, thanks to @sfields ! +* 15.02.2024: Rework playlist generation (#275), thanks to @laszloh ! * 15.02.2024: Update sorting strings (#306), thanks to @freddy36 ! -* 15.02.2024: Set title and navbar heading to hostname (#305), thanks to @freddy36 ! -* 15.02.2024: Include mac address in info (#304), thanks to @freddy36 ! +* 15.02.2024: Set title and navbar heading to hostname (#305), thanks to @freddy36 ! +* 15.02.2024: Include mac address in info (#304), thanks to @freddy36 ! * 12.02.2024: Use natural sort (#296), thanks to @freddy36 ! * 09.02.2024: Remove explorerCreateParentDirectories (#301), thanks to @freddy36 ! * 08.02.2024: Remove convertFilenameToAscii (#298), Playlist fixes (#299), thanks to @freddy36 ! @@ -55,7 +66,6 @@ * 21.01.2024: Build (tag 2.2) is broken when NEOPIXEL_ENABLE is not set #289, thanks to @RolinBert ! * 21.01.2024: PN5180: Save about 500 Bytes of RAM - ## Version 2.2 (17.01.2024) * 14.01.2024: Modify CMD_DIMM_LEDS_NIGHTMODE to toggle night light mode (#287), thanks to @laszloh ! @@ -68,31 +78,31 @@ * 29.12.2023: /rfid endpoint: List all assigned nvs entries (#280) * 29.12.2023: Enhanced capabilities for task runtime debugging * 28.12.2023: Bugfix 1: DONT_ACCEPT_SAME_RFID_TWICE_ENABLE and web frontend, thanks to @sfields ! -* 28.12.2023: Add configuration for critical (shutoff) voltage in Web-UI, thanks to @SZenglein ! +* 28.12.2023: Add configuration for critical (shutoff) voltage in Web-UI, thanks to @SZenglein ! * 28.12.2023: New official PlatformIO package 6.5.0 (Arduino 2.0.14, ESP-IDF 4.4.6) * 28.12.2023: Improve port expander handling (#283), thanks to @r-schmidt ! * 23.12.2023: Update audio library, avoid waiting in i2s_channel_write() to have more time in other tasks #636 * 22.12.2023: Web-UI: Preselection of root folder after load to avoid nasty warning when uploading files -* 17.12.2023: Update audio library, fixes click-noise seeking in file -* 13.12.2023: Immediately go to sleep if battery is critical (#274), thanks to @SZenglein ! -* 12.12.2023: Long press behaviour, execute cmd directly after longpress-time (#279), thanks to @Joe91 ! +* 17.12.2023: Update audio library, fixes click-noise seeking in file +* 13.12.2023: Immediately go to sleep if battery is critical (#274), thanks to @SZenglein ! +* 12.12.2023: Long press behaviour, execute cmd directly after longpress-time (#279), thanks to @Joe91 ! * 12.12.2023: Fix false-positive error (Audio playback timeout) * 10.12.2023: Distribute vTaskDelay() in main loop to avoid rare audio dropouts -* 10.12.2023: Fix wrong states on PE output pins (and SD-card failure on restart) #278, thanks to @36b6fp6s ! +* 10.12.2023: Fix wrong states on PE output pins (and SD-card failure on restart) #278, thanks to @36b6fp6s ! * 09.12.2023: Fix webstream playlist abort when track fails (#276), thanks to @laszloh ! * 07.12.2023: Show RC522 firmware version at startup, same as PN5180 * 04.12.2023: fix stuttering sound with some WAV & MP3 files, thanks to @wolle ! * 04.12.2023: change trackprogress communication from websocket to http to improve stability -* 04.12.2023: Remove some convertAsciiToUtf8() #272 +* 04.12.2023: Remove some convertAsciiToUtf8() #272 * 30.11.2023: Fix a nullptr access after trying to replay an invalid filename (#271), thanks to Olaf! * 29.11.2023: Updated audio library to play more MP3s, faster track change & delivery of the cover image * 25.11.2023: Save some cpu time in audio task by only updating the playtime statistics every 250ms -* 22.11.2023: Web-UI: Search for files feature #268 +* 22.11.2023: Web-UI: Search for files feature #268 * 21.11.2023: New command CMD_TOGGLE_MODE to switch Normal => BT-Sink => BT-Source * 21.11.2023: Bugfix: Some commands e.g. Play/Pause did not work in BT-Source mode * 21.11.2023: Faster pairing animation in BT-Source mode to better distinguish between the two BT modes * 19.11.2023: Give audiotask a higher task priority, fixes crackling sound -* 19.11.2023: bugfix_same_rfid_twice init #262, see Github comments +* 19.11.2023: bugfix_same_rfid_twice init #262, see Github comments * 17.11.2023: Show track progress, current playtime & duration in web-ui (#267) * 16.11.2023: Fix delay with getLocalTime() * 14.11.2023: Multi Wlan improvements (#266), thanks to @laszloh ! @@ -101,7 +111,6 @@ * 08.11.2023: Better logging for boards without PSRAM, fewer logs when compiling with NO_SDCARD * 07.11.2023: Set timezone after startup, thanks to @Joe91 ! - ## Version 2.1 (07.11.2023) * 04.11.2023: LPCD: wakeup check for ISO-14443 cards also with IRQ connected to port-expander diff --git a/html/locales/de.json b/html/locales/de.json index cbdcc017..331d0568 100644 --- a/html/locales/de.json +++ b/html/locales/de.json @@ -102,7 +102,7 @@ "desc": "Einen Ordner samt Inhalt (und allen Unterordnern) hochladen" }, "search": { - "placeholder": "Dateien suchen.." + "placeholder": "Dateien suchen..." }, "upload": { "title": "Upload", @@ -111,12 +111,12 @@ "selectFile": "Wähle eine Datei zum Hochladen!", "success": "Upload erfolgreich ({{elapsed}}, {{speed}} KB/s)", "error": "Upload fehlgeschlagen", - "timeCalc": "Verbleibende Zeit wird berechnet..", + "timeCalc": "Verbleibende Zeit wird berechnet...", "minutes_one": "Minute", "minutes_other": "Minuten", "seconds": "Sekunden", "fewSec": "wenige", - "progress": "{{percent}}% ({{speed}} KB/s), {{remaining.value}} {{remaining.unit}} verbleibend.." + "progress": "{{percent}}% ({{speed}} KB/s), {{remaining.value}} {{remaining.unit}} verbleibend..." }, "rfid": { "title": "RFID-Zuweisungen", @@ -263,6 +263,21 @@ "gainHighPass": "Höhen (in dB)", "info": "Die Frequenzen sind laut Bibliothek (ESP32-audioI2S) 500 Hz LowShelf, 3000 Hz PeakEQ und 6000 Hz HighShelf." }, + "options": { + "title": "Optionen", + "playMono": "Mono-Wiedergabe", + "playMonoExp": "Wenn zwei Lautsprecher verbaut sind, kann Stereo abgespielt werden. Mehr Infos hier.", + "savePlayPosShutdown": "Abspielposition beim Ausschalten merken", + "savePlayPosShutdownExp": "Beim Ausschalten der Box wird für Hörbücher die Abspielposition gespeichert. Mehr Infos hier unter SAVE_PLAYPOS_BEFORE_SHUTDOWN.", + "savePlayPosRfidChange": "Abspielposition bei RFID-Tag Wechsel merken", + "savePlayPosRfidChangeExp": "Beim Wechsel zu einem neuen RFID-Tag wird für Hörbücher die Abspielposition gespeichert. Betrifft keine Modifikations-Tags. Mehr Infos hier unter SAVE_PLAYPOS_WHEN_RFID_CHANGE.", + "pauseOnMinVolume": "Pause bei minimaler Lautstärke", + "pauseOnMinVolumeExp": "Die Wiedergabe wird pausiert, wenn die Lautstärke das Minimum erreicht. Mehr Infos hier.", + "recoverVolBoot": "Letzte Lautstärke bei Neustart verwenden", + "recoverVolBootExp": "Die Box erinnert sich über einen Neustart hinweg, welche Lautstärke zuletzt verwendet wurde und stellt diese automatisch wieder ein.", + "volumeCurve" : "Feinere Abstufungen bei niedriger Lautstärke", + "volumeCurveExp" : "Verwendung von logarithmischer Lautstärkeberechnung. Kann helfen, wenn im unteren Lautstärkebereich die Abstufungen zu grob sind." + }, "neopixel": { "title": "Neopixel (Helligkeit)", "restart": "Nach dem Einschalten", diff --git a/html/locales/en.json b/html/locales/en.json index 16c291ee..346c7af6 100644 --- a/html/locales/en.json +++ b/html/locales/en.json @@ -15,7 +15,7 @@ "infos": "Infos", "darkmode": "Dark Mode", "restartinfo": "ESPuino is being restarted...
Page reloads automatically after restart finished.", - "shutdowninfo": "ESPuino is now switched off...
Page reloads automatically when the ESPuino is switched on again..", + "shutdowninfo": "ESPuino is now switched off...
Page reloads automatically when the ESPuino is switched on again.", "toast": { "rfidDetect": "RFID tag {{rfidId}} detected.", "success": "Action performed successfully.", @@ -102,7 +102,7 @@ "desc": "Upload directory with all files and subdirectories" }, "search": { - "placeholder": "Search files.." + "placeholder": "Search files..." }, "upload": { "title": "Upload", @@ -111,12 +111,12 @@ "selectFile": "Please select files to upload!", "success": "Upload successful ({{elapsed}}, {{speed}} KB/s)", "error": "Upload error", - "timeCalc": "Remaining time is being calculated..", + "timeCalc": "Remaining time is being calculated...", "minutes_one": "minute", "minutes_other": "minutes", "seconds": "seconds", "fewSec": "few", - "progress": "{{percent}}% ({{speed}} KB/s), {{remaining.value}} {{remaining.unit}} remaining.." + "progress": "{{percent}}% ({{speed}} KB/s), {{remaining.value}} {{remaining.unit}} remaining..." }, "rfid": { "title": "RFID Assignments", @@ -263,6 +263,21 @@ "gainHighPass": "Highs (in dB)", "info": "According to the library (ESP32-audioI2S), the frequencies are 500 Hz LowShelf, 3000 Hz PeakEQ and 6000 Hz HighShelf." }, + "options": { + "title": "Options", + "playMono": "Mono Playback", + "playMonoExp": "If two speakers are installed, stereo can be played. More infos here.", + "savePlayPosShutdown": "Remember playback position at shutdown", + "savePlayPosShutdownExp": "When the box is switched off, the playback position for audio books is saved. More infos here under SAVE_PLAYPOS_BEFORE_SHUTDOWN.", + "savePlayPosRfidChange": "Remember playback position at RFID tag change", + "savePlayPosRfidChangeExp": "When switching to a new RFID tag, the playback position is saved for audio books. Does not affect modification tags. More infos here under SAVE_PLAYPOS_WHEN_RFID_CHANGE.", + "pauseOnMinVolume": "Pause at minimum volume", + "pauseOnMinVolumeExp": "Playback is paused when the volume reaches the minimum level. More infos here", + "recoverVolBoot": "Use last volume at restart", + "recoverVolBootExp": "After a restart, the speaker remembers which volume was last used and automatically adjusts it again.", + "volumeCurve": "Finer gradations at low volume", + "volumeCurveExp": "Use of logarithmic volume calculation. Can help if the gradations in the lower volume range are too coarse." + }, "neopixel": { "title": "Neopixel (brightness)", "restart": "After restart", diff --git a/html/locales/fr.json b/html/locales/fr.json index 8bafdfd3..8ca434fd 100644 --- a/html/locales/fr.json +++ b/html/locales/fr.json @@ -102,7 +102,7 @@ "desc": "Télécharger un répertoire avec tous les fichiers et sous-répertoires" }, "search": { - "placeholder": "Rechercher des fichiers.." + "placeholder": "Rechercher des fichiers..." }, "upload": { "title": "Télécharger", @@ -111,12 +111,12 @@ "selectFile": "Veuillez sélectionner les fichiers à télécharger!", "success": "Téléchargement réussi ({{elapsed}}, {{speed}} Ko/s)", "error": "Erreur de téléchargement", - "timeCalc": "Le temps restant est calculé..", + "timeCalc": "Le temps restant est calculé...", "minutes_one": "minute", "minutes_other": "minutes", "seconds": "secondes", "fewSec": "quelques", - "progress": "{{percent}}% ({{speed}} Ko/s), {{remaining.value}} {{remaining.unit}} restant.." + "progress": "{{percent}}% ({{speed}} Ko/s), {{remaining.value}} {{remaining.unit}} restant..." }, "rfid": { "title": "Assignations RFID", @@ -263,6 +263,21 @@ "gainHighPass": "Aigus (en dB)", "info": "Les fréquences sont, selon la bibliothèque (ESP32-audioI2S), 500 Hz LowShelf, 3000 Hz PeakEQ et 6000 Hz HighShelf." }, + "options": { + "title": "Options", + "playMono": "Lecture mono", + "playMonoExp": "Si deux haut-parleurs sont installés, la stéréo peut être jouée. Plus d'infos ici.", + "savePlayPosShutdown": "Mémoriser la position de lecture à l'extinction", + "savePlayPosShutdownExp": "Lorsque la boîte est éteinte, la position de lecture est enregistrée pour les livres audio. Plus d'informations ici sous SAVE_PLAYPOS_BEFORE_SHUTDOWN.", + "savePlayPosRfidChange": "Mémoriser la position de lecture au changement de tag RFID", + "savePlayPosRfidChangeExp": "Lors du passage à une nouvelle balise RFID, la position de lecture est enregistrée pour les livres audio. Plus d'informations ici sous SAVE_PLAYPOS_WHEN_RFID_CHANGE.", + "pauseOnMinVolume": "Pause au volume minimal", + "pauseOnMinVolumeExp": "La lecture est mise en pause lorsque le volume atteint le minimum.Plus d'infos ici.", + "recoverVolBoot": "Utiliser le dernier volume au redémarrage", + "recoverVolBootExp": "Le boîtier se souvient, après un redémarrage, du dernier volume utilisé et le rétablit automatiquement.", + "volumeCurve": "Des nuances plus fines à faible volume", + "volumeCurveExp": "Utilisation du calcul logarithmique du volume. Peut aider si les nuances sont trop grossières dans la plage de volume inférieure." + }, "neopixel": { "title": "Neopixel (luminosité)", "restart": "Après le redémarrage", diff --git a/html/management.html b/html/management.html index cc0c10e7..e212a033 100644 --- a/html/management.html +++ b/html/management.html @@ -40,14 +40,6 @@ margin-right: 5px; } - .header-nav-element { - margin-right: 10px; - } - - .header-nav-restart { - margin-right: 40px - } - .jstree-default .jstree-search { font-style: italic; color: #007bff; @@ -101,15 +93,6 @@ position: relative; } - .link-body-emphasis:focus, - .link-body-emphasis:hover { - color: orange !important; - } - - .fa-sync:hover { - color: #666666; - } - .filetree-container { position: relative; } @@ -200,13 +183,6 @@ padding-left: 5px; } - #navbar-heading { - width: calc(100vw - 150px) !important; - /* Cut off title if it is too long for the screen */ - overflow: hidden; - display: inline-block; - } - /* Overwrite some Bootstrap styles (remove border around disabled buttons) */ .btn.disabled { border-color: rgb(0, 0, 0, 0); @@ -234,64 +210,57 @@ -