Files
tactility_apps/Apps/BookPlayer
Adolfo 8f46e03070
Main / Build (BookPlayer) (push) Has been cancelled
Main / Build (Brainfuck) (push) Has been cancelled
Main / Build (Breakout) (push) Has been cancelled
Main / Build (Calculator) (push) Has been cancelled
Main / Build (Diceware) (push) Has been cancelled
Main / Build (EpubReader) (push) Has been cancelled
Main / Build (GPIO) (push) Has been cancelled
Main / Build (GraphicsDemo) (push) Has been cancelled
Main / Build (HelloWorld) (push) Has been cancelled
Main / Build (M5UnitTest) (push) Has been cancelled
Main / Build (Magic8Ball) (push) Has been cancelled
Main / Build (MediaKeys) (push) Has been cancelled
Main / Build (MystifyDemo) (push) Has been cancelled
Main / Build (SerialConsole) (push) Has been cancelled
Main / Build (Snake) (push) Has been cancelled
Main / Build (TamaTac) (push) Has been cancelled
Main / Build (TodoList) (push) Has been cancelled
Main / Build (TwoEleven) (push) Has been cancelled
Main / Bundle (push) Has been cancelled
fix(audio): use audio-stream instead of direct I2S - 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
2026-07-18 19:19:22 -04:00
..

Tactility Book Player App

The Book Player app for Tactility OS plays children's books stored on the SD card. Each book is organized in its own subfolder and contains a sequential layout of pages with both visual illustrations (images) and narration (audio).

SD Card Layout

Books must be stored under /sdcard/books/ on the device SD card with the following structure:

/sdcard/books/
  book_slug_1/
    manifest.json
    page001.png
    page001.mp3
    page002.png
    page002.mp3
    ...
  book_slug_2/
    manifest.json
    page001.jpg
    page001.wav
    page002.jpg
    page002.wav
    ...

Manifest Format

Each book subfolder must contain a manifest.json file. Here is a sample format:

{
  "title": "Princess Grace and Poppy",
  "author": "Reyna Family",
  "id": "grace-poppy",
  "format": "tactility-book-manifest-v1",
  "display": {
    "width": 320,
    "height": 240
  },
  "audio": {
    "encoding": "mp3",
    "sample_rate_hz": 16000,
    "channels": 1,
    "bitrate_kbps": 24
  },
  "pages": [
    {
      "image": "page001.png",
      "audio": "page001.mp3",
      "caption": "Once upon a time, in a magnificent castle perched high on a hill above the sea, there lived five princesses..."
    },
    {
      "image": "page002.png",
      "audio": "page002.mp3",
      "caption": "This is the story of Princess Grace..."
    }
  ]
}

Content Requirements

  • Images: PNG or JPG format. Recommended size is 320×240 pixels (or scaled to match standard aspect ratios).
  • Audio: Mono MP3 or uncompressed standard WAV files. For ESP32-S3 systems, lower sampling rates (e.g. 16 kHz mono) are recommended for memory efficiency.