- Keep 44.1kHz native sample rate to avoid linear resampler alias noise
- MIC_BOOST 300%% (3x) with clipping, after filtering per user request
- Low-pass 0.25 (~2.5kHz) to remove MCLK high-pitch hiss
- High-pass 0.985 (~100Hz) to remove DC/rumble/pop
- Chain: raw -> high-pass -> low-pass -> boost
- Disable FM8002E speaker amp GPIO1 during recording (active-low) to eliminate pop/hiss, re-enable after
- Add esp_driver_gpio requirement for gpio_set_level
- Previous UI improvements (date+duration list, green highlight, volume slider, full-screen layout) included in history
- Remove toolbar and card container, use full-screen 0x11111B background like Mp3Player
- Close button top-left, top status shows count, not selected filename
- Memo list 92%x70% at TOP_MID 38, 76% height to remove dead space (lowered 10px per request)
- List items show date parsed from memo_YYYYMMDD_HHMMSS + duration from WAV header (mm:ss)
- Selection highlight fixed: direct bg 0x3A5A40 + border/text 0xA6E3A1 green via set_memo_btn_highlight(), auto-select first item
- Playback UI: hide list when PLAYING/PAUSED/RECORDING, show centered player box with title, player status, progress bar, time label mm:ss/mm:ss (like Mp3Player)
- Volume slider separate object above buttons (82% width, 6px), visible only when playing, persisted to volume.txt like Mp3Player
- Bottom controls pulled to bottom edge (44px height at -2) with no dead space
- Audio improvements: AUDIO_BUF_SIZE 8192, CHUNK_SAMPLES 1024, MIC_BOOST_PERCENT 250 software gain with clipping to compensate quiet MEMS mic at 100%% hw gain (24dB ES8311 limit)
- Increased chunk for smoother playback and reduced I/O overhead
- Mp3Player:
* Disable LV_LABEL_LONG_SCROLL_CIRCULAR during playback (flag ENABLE_TITLE_SCROLL_ANIM_WHEN_IDLE) to avoid screen invalidation starving audio_stream
* Single-line controls [-10s][Play/Pause][Stop][+10s] icon-only, volume slider at bottom, no card/toolbar, time label MM:SS / MM:SS updating every sec
* Seek ±10s with proportional byte calc and correct sample count (was byte vs sample bug)
* Safe history persistence: heap buffer (not stack), recursive mkdir, play_history.txt and volume.txt in user data
* History only for >=10min audios, updated on pause/stop/hide, auto-resume latest
* Full-screen history screen with Back button, open via top-right list icon, playing file highlighted CHECKED, tap to resume long or restart short
- VoiceRecorder:
* Fix crash from lv_label_set_long_mode on icon child in list buttons (force DOT only on last child label)
* Force DOT on status and memo list to avoid scroll anim during audio
* Throttle UI updates (1Hz rec, %/sec change play)
Tested on 192.168.68.107, no crash, heap free ~15KB, screenshot verified
- VoiceRecorder now explicitly unmutes input and sets 100% gain (24dB) after audio_stream_open_input
- Matches firmware fix c7dc66e0 BOTH complementary open + close ref-count
- Mp3Player/BookPlayer already using audio-stream for output (fixes fast playback)
- Mp3Player: sdk 0.7->0.8.0-dev, find audio-stream device, open_output with resampler (hz/ch), write via audio_stream_write, close on pause
- BookPlayer: close/open per format change via AudioStreamConfig, write via stream
- VoiceRecorder: input_handle open_input 16k/mono via audio_stream_read, output_handle open_output file rate via write/resampler
- ES8311 native 44100, old direct I2S at 16k caused 4.096MHz MCLK vs 11.29MHz -> fast playback
- Brick game correct because it uses audio-stream resampler path
- Mp3Player: increase task stack 4096->6144, prio 5->6, remove taskYIELD causing audio gaps
- VoiceRecorder: configure I2S as stereo for ES7210 (dual mic) like working MicroPython,
then downmix left channel to mono WAV to fix low-pitch mic-like recording