Media related items moved to dedicated Media menu. Documentation updated.
This commit is contained in:
@@ -3,6 +3,13 @@
|
||||
Dates are given for the image. All items listed are available for the listed image version coinciding with the listed date. For example, everything listed under may 7, 2025 are available in the image named stormux_gaming_image-2025.05.07.img.xz.
|
||||
|
||||
|
||||
## November 1, 2025
|
||||
|
||||
- Documentation updated
|
||||
- Media related items moved to dedicated menu
|
||||
- Wicked Quest now auto-updates on launch
|
||||
|
||||
|
||||
## October 1, 2025
|
||||
|
||||
- Finally fixed the boot confusion if the image is installed and you boot from the usb drive. Actually grub install to the disk so there should not be any possible way it can get confused) (Yes, I know, famous last words)
|
||||
|
||||
@@ -10,8 +10,8 @@ This is the menu that opens when you first boot the Raspberry pi. It also is whe
|
||||
- Up Arrow: Move up an item.
|
||||
- Down Arrow: Move down an item.
|
||||
- Enter: Activate the currently selected item.
|
||||
- Left Arrow: Change category, Arcade, Text Games, Web, etc.
|
||||
- Right Arrow: Change category, Arcade, Text Games, Web, etc.
|
||||
- Left Arrow: Change category, Arcade, Text Games, Web, Media, etc.
|
||||
- Right Arrow: Change category, Arcade, Text Games, Web, Media, etc.
|
||||
- 9: Decrease system volume.
|
||||
- 0: Increase system volume.
|
||||
- Left Bracket: Decrease speech rate.
|
||||
|
||||
@@ -33,7 +33,7 @@ The game launcher is your home base. Here's how it works:
|
||||
|
||||
### Navigation
|
||||
- **Up/Down Arrows**: Move through items in the current category
|
||||
- **Left/Right Arrows**: Change categories (Arcade, Text Games, Web, etc.)
|
||||
- **Left/Right Arrows**: Change categories (Arcade, Text Games, Web, Media, etc.)
|
||||
- **Enter**: Select the highlighted item
|
||||
- **Escape**: Refresh the menu if speech stops working
|
||||
|
||||
@@ -53,6 +53,12 @@ The Fenrir screen reader will play its startup sound, and you will be placed in
|
||||
- Access this and other help files
|
||||
- Contact information for support
|
||||
|
||||
### Media
|
||||
- Music Player for playing your music collection
|
||||
- BookStorm for reading eBooks
|
||||
- DLNA Server toggle for streaming media to other devices
|
||||
- Upload Files for adding media to your system
|
||||
|
||||
## Essential Services
|
||||
|
||||
### Speech System
|
||||
@@ -63,7 +69,7 @@ The system uses RHVoice BDL voice by default. You can change this in the System
|
||||
- **Braille Support**: Available if you use a braille display
|
||||
|
||||
### Upload Server
|
||||
Upload files to your system through a web interface. Start it from the System menu and it will announce the IP address and port to use.
|
||||
Upload files to your system through a web interface. Start it from the Media menu and it will announce the IP address and port to use.
|
||||
|
||||
## Getting Around
|
||||
|
||||
@@ -93,7 +99,7 @@ Upload files to your system through a web interface. Start it from the System me
|
||||
## Common Tasks
|
||||
|
||||
### Adding Music
|
||||
1. Start the Upload Server from the System menu
|
||||
1. Start the Upload Server from the Media menu
|
||||
2. Note the IP address and port announced
|
||||
3. Use a web browser on another device to upload music files
|
||||
4. Organize by artist folders with album subfolders for best results
|
||||
|
||||
@@ -8,7 +8,7 @@ The upload server allows you to transfer files from other devices to your Stormu
|
||||
|
||||
## Starting the Upload Server
|
||||
|
||||
1. Navigate to the **System** menu in the main game launcher
|
||||
1. Navigate to the **Media** menu in the main game launcher
|
||||
2. Select **Upload Files**
|
||||
3. The server will start and announce the IP address and port
|
||||
4. Example: "Upload server running on 192.168.1.100 port 5000"
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
# Reading Books with BookStorm
|
||||
|
||||
BookStorm is a fully accessible book reader designed for blind and visually impaired users. It supports both electronic books (DAISY, EPUB, PDF, TXT) and audiobooks (M4B, M4A, MP3) with full text-to-speech and keyboard control.
|
||||
|
||||
## Starting BookStorm
|
||||
|
||||
1. Navigate to the **Media** menu in the main game launcher
|
||||
2. Select **BookStorm**
|
||||
3. The application will launch and resume your last book automatically
|
||||
4. If this is your first time, you'll be in the library browser
|
||||
|
||||
## Supported Book Formats
|
||||
|
||||
### Text Books (Read with Text-to-Speech)
|
||||
- **DAISY 2.02 and DAISY 3**: Full accessible format with chapter navigation
|
||||
- **EPUB**: Standard ebook format (EPUB 2 and 3)
|
||||
- **PDF**: Text extraction (quality varies by PDF)
|
||||
- **TXT**: Plain text files
|
||||
|
||||
### Audiobooks (Native Audio Playback)
|
||||
- **M4B/M4A**: Audiobook format with chapter markers
|
||||
- **MP3**: Audio files with optional chapter markers
|
||||
|
||||
**Note**: M4B and M4A files are automatically converted for playback on first load. Subsequent plays use the cached version for instant playback.
|
||||
|
||||
## Keyboard Controls
|
||||
|
||||
### Basic Playback
|
||||
- **SPACE**: Start, pause, or resume reading
|
||||
- **n**: Next paragraph (text books) or next chapter (audiobooks)
|
||||
- **p**: Previous paragraph (text books) or previous chapter (audiobooks)
|
||||
- **SHIFT+N**: Skip to next chapter (works during playback)
|
||||
- **SHIFT+P**: Go to previous chapter (works during playback)
|
||||
- **Page Up/Down**: Adjust speech rate by 10%
|
||||
|
||||
### Navigation and Bookmarks
|
||||
- **s**: Save a bookmark at your current position
|
||||
- **k**: Open bookmarks menu (view, jump to, or delete bookmarks)
|
||||
- **r**: Recent books menu (shows your 10 most recent books)
|
||||
- **b**: Browse your book library
|
||||
- **a**: Browse Audiobookshelf server (if configured)
|
||||
|
||||
### Settings and Help
|
||||
- **o**: Options menu (change voice, speech settings, display options)
|
||||
- **t**: Time remaining (if sleep timer is active)
|
||||
- **h**: Help (displays all keyboard shortcuts)
|
||||
- **q or ESC**: Quit (or open sleep timer menu if reading)
|
||||
|
||||
## Adding Books to Your Library
|
||||
|
||||
### Using the Upload Server
|
||||
|
||||
The easiest way to add books is through the upload server:
|
||||
|
||||
1. Start the Upload Server from the Media menu
|
||||
2. Note the IP address and port announced
|
||||
3. Open a web browser on another device
|
||||
4. Navigate to the announced address
|
||||
5. Select the appropriate category:
|
||||
- **Audiobook**: For M4B, M4A, or MP3 audiobooks
|
||||
- **Other Files**: For DAISY (.zip), EPUB, PDF, or TXT books
|
||||
6. Upload your book files
|
||||
7. Books are automatically placed in ~/Library (Audiobooks) or ~/Downloads (Other Files)
|
||||
|
||||
**On the Stormux Gaming Image**, ~/Library is set as your default library directory, so:
|
||||
- Audiobooks uploaded go directly to ~/Library and appear immediately when you press **b**
|
||||
- Other book formats go to ~/Downloads and you can browse to them with **b**
|
||||
- You can move books from ~/Downloads to ~/Library for better organization
|
||||
|
||||
### Organizing Your Books
|
||||
|
||||
**On the Stormux Gaming Image**, ~/Library is already set as your default library directory. When you press **b**, you'll start in this location.
|
||||
|
||||
BookStorm can work with books anywhere on your system. You can organize them however you like:
|
||||
|
||||
**Example structure:**
|
||||
```
|
||||
~/Library/
|
||||
├── DAISY/
|
||||
│ ├── Book1.zip
|
||||
│ └── Book2.zip
|
||||
├── EPUB/
|
||||
│ ├── Novel1.epub
|
||||
│ └── Novel2.epub
|
||||
└── Audiobooks/
|
||||
├── Audiobook1.m4b
|
||||
└── Audiobook2.m4b
|
||||
```
|
||||
|
||||
**To change your default library location:**
|
||||
1. Press **b** to open the book browser
|
||||
2. Navigate to your preferred directory
|
||||
3. Press **L** to set it as your default library
|
||||
4. BookStorm will remember this location
|
||||
|
||||
## Using Bookmarks
|
||||
|
||||
### Auto-Save Bookmarks
|
||||
BookStorm automatically saves your position when you:
|
||||
- Press **s** to save
|
||||
- Quit the application with **q**
|
||||
- Switch to a different book
|
||||
|
||||
When you reopen a book, it automatically resumes where you left off.
|
||||
|
||||
### Named Bookmarks
|
||||
Press **k** to open the bookmarks menu where you can:
|
||||
- Create bookmarks with custom names (e.g., "Chapter 5 - Important Scene")
|
||||
- Jump to any saved bookmark
|
||||
- Delete bookmarks you no longer need
|
||||
- View all bookmarks for the current book
|
||||
|
||||
## Sleep Timer
|
||||
|
||||
Perfect for bedtime reading, the sleep timer will automatically stop playback after a set time:
|
||||
|
||||
1. Press **q** or **ESC** while reading
|
||||
2. Select a duration (5 to 60 minutes)
|
||||
3. BookStorm will continue reading and stop at the chosen time
|
||||
4. Your position is automatically saved
|
||||
|
||||
Press **t** at any time to hear how much time remains.
|
||||
|
||||
## Voice and Speech Settings
|
||||
|
||||
Press **o** to access the options menu where you can:
|
||||
|
||||
### Change TTS Engine
|
||||
- **Piper-TTS**: High-quality voices (default, slower to start)
|
||||
- **Speech-Dispatcher**: System voices (faster, uses same voices as menu)
|
||||
|
||||
### Select Voice
|
||||
Browse available voices and test them before selecting. The voice selector reads sample text so you can hear each voice.
|
||||
|
||||
### Adjust Speech Rate
|
||||
Change reading speed from -100 (very slow) to +100 (very fast). Default is 0.
|
||||
|
||||
### Display Settings
|
||||
Toggle the large print display on or off. When enabled, shows 72-point text in a 1600x900 window for low vision users.
|
||||
|
||||
## Book Browser Controls
|
||||
|
||||
When browsing your library (press **b**):
|
||||
|
||||
- **UP/DOWN**: Navigate through books and folders
|
||||
- **ENTER**: Open a book or enter a directory
|
||||
- **BACKSPACE/LEFT**: Go to parent directory
|
||||
- **L**: Set current directory as default library location
|
||||
- **ESC**: Cancel and return to reading
|
||||
|
||||
The browser announces each item as you navigate, including file types and sizes.
|
||||
|
||||
## Audiobookshelf Integration
|
||||
|
||||
If you use an [Audiobookshelf](https://www.audiobookshelf.org/) server, BookStorm can connect to browse, stream, and download audiobooks.
|
||||
|
||||
### Setup
|
||||
|
||||
1. Press **o** to open options menu
|
||||
2. Navigate to "Configure Audiobookshelf Server"
|
||||
3. Enter your server URL (e.g., https://abs.example.com)
|
||||
4. Enter your username and password
|
||||
5. Settings are saved automatically
|
||||
|
||||
### Browsing Your Server
|
||||
|
||||
1. Press **a** to open the Audiobookshelf browser
|
||||
2. Navigate through libraries, series, and collections
|
||||
3. Select a book to choose stream or download
|
||||
|
||||
### Stream vs Download
|
||||
|
||||
**Stream**: Play directly from the server
|
||||
- Requires active internet connection
|
||||
- No disk space used
|
||||
- Progress syncs to server
|
||||
|
||||
**Download**: Save to your library
|
||||
- Works offline after download
|
||||
- Takes up disk space
|
||||
- Progress still syncs to server
|
||||
- Faster playback (no buffering)
|
||||
|
||||
**Progress Sync**: Your reading progress automatically syncs between BookStorm and Audiobookshelf, so you can switch between devices seamlessly.
|
||||
|
||||
## Tips and Best Practices
|
||||
|
||||
### DAISY Books
|
||||
- DAISY books must be in ZIP format (don't extract them)
|
||||
- Full chapter navigation and structure is supported
|
||||
- Best format for accessibility
|
||||
|
||||
### EPUB Books
|
||||
- Standard ebook format, widely available
|
||||
- Chapter detection is automatic
|
||||
- Some complex formatting may be simplified
|
||||
|
||||
### PDF Books
|
||||
- Text extraction quality depends on the PDF
|
||||
- Best for text-based PDFs (not scanned images)
|
||||
- May have formatting issues with complex layouts
|
||||
|
||||
### Audiobooks
|
||||
- First playback may take a moment while converting
|
||||
- Cached files play instantly on subsequent opens
|
||||
- Chapter markers are preserved when present
|
||||
- To clear cache: Delete ~/.cache/bookstorm/audio/
|
||||
|
||||
### Organization
|
||||
- Keep DAISY books as .zip files in one location
|
||||
- Group books by format or genre for easy browsing
|
||||
- Use the **r** key for quick access to recent books
|
||||
- Set a library directory with **L** in the browser
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Book Won't Open
|
||||
- DAISY books must be .zip files, not extracted folders
|
||||
- Verify the file format is supported
|
||||
- Check that the file isn't corrupted
|
||||
|
||||
### No Sound
|
||||
- Check system volume with **9** and **0** keys
|
||||
- Verify speech-dispatcher is running
|
||||
- Try changing TTS engine in options menu
|
||||
|
||||
### Playback is Slow to Start
|
||||
- Piper-TTS takes a moment to load voice models
|
||||
- First paragraph is slower, subsequent ones are faster
|
||||
- Switch to Speech-Dispatcher engine for instant start
|
||||
|
||||
### M4B/M4A Won't Play
|
||||
- This is normal - first playback converts the file
|
||||
- Requires ffmpeg (already installed on Stormux Gaming Image)
|
||||
- Subsequent playbacks use cached version (instant)
|
||||
|
||||
### Can't Find Uploaded Books
|
||||
- Audiobooks go to ~/Library (the default library directory)
|
||||
- Other book formats go to ~/Downloads
|
||||
- Press **b** to browse your library or navigate to ~/Downloads
|
||||
- Consider organizing books into folders within ~/Library
|
||||
|
||||
## Getting Help
|
||||
|
||||
For additional support:
|
||||
- Press **h** while reading to hear all keyboard shortcuts
|
||||
- Visit IRC at irc.stormux.org, channels #stormux and #a11y
|
||||
- Check the mailing list at https://groups.io/g/stormux
|
||||
- Report issues at https://git.stormux.org/storm/bookstorm
|
||||
@@ -311,11 +311,15 @@ class VoicedMenu:
|
||||
|
||||
# Update the menu with the new service status
|
||||
self.update_service_menu_items()
|
||||
|
||||
|
||||
# Update Bluetooth menu items if Bluetooth service was toggled
|
||||
if friendlyName == "Bluetooth":
|
||||
self.update_bluetooth_menu_items()
|
||||
|
||||
# Update Media menu items if DLNA Server was toggled
|
||||
if friendlyName == "D L N A Server":
|
||||
self.update_media_menu_items()
|
||||
|
||||
# Redraw the menu
|
||||
self.draw_menu()
|
||||
|
||||
@@ -493,14 +497,30 @@ class VoicedMenu:
|
||||
"""Update Bluetooth-related menu items in Accessories section"""
|
||||
if "Accessories" in self.menuSections:
|
||||
# Remove any existing Bluetooth-related items
|
||||
self.menuSections["Accessories"] = [item for item in self.menuSections["Accessories"]
|
||||
self.menuSections["Accessories"] = [item for item in self.menuSections["Accessories"]
|
||||
if "Bluetooth" not in item[0]]
|
||||
|
||||
# Add Bluetooth management item only if Bluetooth is enabled
|
||||
if self.check_service_status('bluetooth.service'):
|
||||
self.add_item("Accessories", "Manage Bluetooth Devices",
|
||||
self.add_item("Accessories", "Manage Bluetooth Devices",
|
||||
"GAME=blueman-manager startx")
|
||||
|
||||
def update_media_menu_items(self):
|
||||
"""Update Media menu items including DLNA server toggle"""
|
||||
if "Media" in self.menuSections:
|
||||
# Remove any existing DLNA-related items
|
||||
self.menuSections["Media"] = [item for item in self.menuSections["Media"]
|
||||
if "D L N A" not in item[0]]
|
||||
|
||||
# Check DLNA server status and add appropriate toggle
|
||||
isActive = self.check_service_status('minidlna.service')
|
||||
if isActive:
|
||||
self.add_item("Media", "Disable D L N A Server",
|
||||
lambda: self.toggle_service('D L N A Server'))
|
||||
else:
|
||||
self.add_item("Media", "Enable D L N A Server",
|
||||
lambda: self.toggle_service('D L N A Server'))
|
||||
|
||||
def scan_documentation_files(self):
|
||||
"""Scan Documents directory for .md files and add them to help menu"""
|
||||
docs_dir = os.path.expanduser("~/Documents")
|
||||
@@ -846,10 +866,13 @@ class VoicedMenu:
|
||||
|
||||
# Update all service menu items based on current status
|
||||
self.update_service_menu_items()
|
||||
|
||||
|
||||
# Update Bluetooth menu items based on current status
|
||||
self.update_bluetooth_menu_items()
|
||||
|
||||
# Update Media menu items based on current status
|
||||
self.update_media_menu_items()
|
||||
|
||||
# Initial draw
|
||||
self.draw_menu()
|
||||
|
||||
@@ -1113,10 +1136,14 @@ if __name__ == "__main__":
|
||||
# Add the IRC help item
|
||||
menu.add_item("Help and Documentation", "Get help on IRC", "GAME=IRC /home/stormux/.clirc")
|
||||
|
||||
# Add media section
|
||||
menu.add_section("Media")
|
||||
menu.add_item("Media", "Music Player", "/usr/local/bin/music_player.py")
|
||||
menu.add_item("Media", "BookStorm", "GAME=BookStorm startx")
|
||||
menu.add_item("Media", "Upload Files", "/home/stormux/.local/upload_server/uploader.py")
|
||||
|
||||
# Add accessories section
|
||||
menu.add_section("Accessories")
|
||||
menu.add_item("Accessories", "BookStorm", "GAME=BookStorm startx")
|
||||
menu.add_item("Accessories", "Music Player", "/usr/local/bin/music_player.py")
|
||||
menu.add_item("Accessories", "Local IP Address", "/usr/local/bin/ip_info.py local")
|
||||
menu.add_item("Accessories", "Remote IP Address", "/usr/local/bin/ip_info.py remote")
|
||||
menu.add_item("Accessories", "Web Browser", "GAME=Brave startx")
|
||||
@@ -1136,7 +1163,6 @@ if __name__ == "__main__":
|
||||
menu.add_item("System", "Set System Speech Settings", "/usr/local/bin/speechd_rate.py")
|
||||
menu.add_item("System", "Set Default Voice", "/usr/local/bin/set-voice.py")
|
||||
menu.add_item("System", "Set Timezone", "GAME='Set Timezone' /home/stormux/.clirc")
|
||||
menu.add_item("System", "Upload Files", "/home/stormux/.local/upload_server/uploader.py")
|
||||
menu.add_item("System", "Download Files", "/home/stormux/.local/download_server.py")
|
||||
menu.add_item("System", "Update System", "sudo /usr/local/bin/live-update.sh")
|
||||
menu.add_item("System", "Restart: Can Take Several Minutes", "sudo reboot")
|
||||
|
||||
Reference in New Issue
Block a user