Commit Graph
310 Commits
Author SHA1 Message Date
imonlinux 196d5273f0 Update README.md 2025-11-19 19:06:22 -08:00
imonlinux d3d60e1c99 Merge pull request #37 from imonlinux/refactor-audio_engine
Core Refactor: Stability, Identity Persistence, and Audio Engine Optimization
2025-11-19 18:51:40 -08:00
imonlinux 4616645c40 Update __main__.py
Entry point. Clean imports, timestamp logging, integration of AudioEngine.
2025-11-19 18:49:43 -08:00
imonlinux 6eb3f46cbe Create audio_engine.py
Brand new file. Encapsulates audio logic, suppresses warnings, fixes busy wait.
2025-11-19 18:48:44 -08:00
imonlinux 6f5444237c Update satellite.py
Implements non-blocking downloads.
2025-11-19 18:47:37 -08:00
imonlinux cf82a3158d Update models.py
Added threading event for audio loop optimization.
2025-11-19 18:47:01 -08:00
imonlinux e63bda7e76 Update zeroconf.py
Uses the new util to ensure MDNS matches the device ID.
2025-11-19 18:46:05 -08:00
imonlinux 592d5eb0c3 Update util.py
New robust MAC address logic.
2025-11-19 18:45:16 -08:00
imonlinux 360fe06d96 Update satellite.py
Wrong file uploaded
2025-11-18 15:16:19 -08:00
imonlinux efe2b4ff4e Update api_server.py
Wrong file uploaded
2025-11-18 15:15:46 -08:00
imonlinux e3216d3e68 Update __main__.py
Wrong version uploaded.
2025-11-18 15:15:07 -08:00
imonlinux 5eb1489947 Update satellite.py
Uploaded the wrong version of the file.
2025-11-18 11:51:34 -08:00
imonlinux 2808877895 Update models.py
Uploaded wrong version of the file.
2025-11-18 11:51:04 -08:00
imonlinux 2fdef7d6ce Update __main__.py
Wrong version of file uploaded.
2025-11-18 11:48:04 -08:00
imonlinux 2ccda5ac4a Merge pull request #36 from imonlinux/decouple-controllers-breakup-main
Decouple controllers breakup main
2025-11-17 22:45:12 -08:00
imonlinux fd5cd13f72 Update __main__.py
(Major change) main() function completely refactored into helpers. _init_controllers now handles decoupled initialization. _process_audio loop logic was fixed to correctly initialize wake words on startup.

 mic.recorder() loop is now much more robust against OS buffering issue when the microphone is muted and wakewords were detected and processed after unmute.
2025-11-17 22:40:53 -08:00
imonlinux ada83bdfbb Update satellite.py
Re-added the self.state.satellite = self link, which is necessary for the main loop to be reachable from the audio thread.
2025-11-17 21:51:34 -08:00
imonlinux b62d07be7d Update event_bus.py
The EventHandler base class was modified to support the new decoupled __init__ pattern.
2025-11-17 21:50:53 -08:00
imonlinux f39df8a40a Update mqtt_controller.py
__init__ was completely rewritten to be decoupled. It now listens for mic_muted/mic_unmuted events to manage its own state instead of reading from ServerState.
2025-11-17 21:50:08 -08:00
imonlinux 37922351f6 Update led_controller.py
__init__ was completely rewritten to be decoupled. It now receives loop, event_bus, config, and preferences directly and no longer has any reference to ServerState.
2025-11-17 21:49:21 -08:00
imonlinux 64e2657824 Update models.py
ServerState is now a pure data container, no longer holding controller instances. The satellite reference was re-added, as it's required by the audio thread to call satellite.wakeup(). Fixed a TypeError by re-ordering non-default fields.
2025-11-17 21:48:08 -08:00
imonlinux 8c6df9b245 Update __main__.py
(Major change) main() function completely refactored into helpers. _init_controllers now handles decoupled initialization. _process_audio loop logic was fixed to correctly initialize wake words on startup.
2025-11-17 21:46:42 -08:00
imonlinux 52e5fb374e Update models.py
fixed wrong file uploaded
2025-11-17 20:37:46 -08:00
imonlinux fc6d750257 Merge pull request #35 from imonlinux/refactored-upstream-changes
Refactored upstream changes
2025-11-17 20:26:43 -08:00
imonlinux 4d8f5c97b7 Update util.py
Removed the unused is_arm function
2025-11-17 20:22:54 -08:00
imonlinux c9be5fc026 Update satellite.py
Added all the logic for downloading external wake words
2025-11-17 20:22:05 -08:00
imonlinux a4fa7b8631 Update __main__.py
Replaced sounddevice with soundcard, removed the audio Queue, added the new download directory to the search path, and added the device listing arguments
2025-11-17 20:21:24 -08:00
imonlinux 005900b2ae Update models.py
Replaced sounddevice with soundcard, removed the audio Queue, added the new download directory to the search path, and added the device listing arguments
2025-11-17 20:19:30 -08:00
imonlinux 324881ca8b Update models.py
Removed audio_queue, added download_dir, and updated AvailableWakeWord to use the new libraries
2025-11-17 20:18:38 -08:00
imonlinux f033595649 Update config.py
Added download_dir and removed old oww_ model paths
2025-11-17 20:17:44 -08:00
imonlinux d2a9057dde Update config.py
Updated for the new soundcard library
2025-11-17 20:17:08 -08:00
imonlinux d95c15bf40 Update mypy.ini
Updated for the new soundcard library
2025-11-17 20:16:07 -08:00
imonlinux 8d6b1849bd Update pyproject.toml
Added soundcard, pymicro-wakeword, pyopen-wakeword; removed sounddevice, pymicro-features
2025-11-17 20:14:54 -08:00
imonlinux 19677dfedd Update pyproject.toml 2025-11-17 20:14:11 -08:00
imonlinux e0bb8e7793 Update .gitignore 2025-11-17 20:13:31 -08:00
imonlinux 82c02e9db9 Delete linux_voice_assistant/openwakeword.py 2025-11-17 20:12:33 -08:00
imonlinux 9bc2830a2d Delete linux_voice_assistant/microwakeword.py 2025-11-17 20:12:18 -08:00
imonlinux 3507074698 Delete linux_voice_assistant/wakeword.py 2025-11-17 20:12:04 -08:00
imonlinux bf39055441 Delete wakewords/openWakeWord/melspectrogram.tflite 2025-11-17 20:11:42 -08:00
imonlinux 3587d8329f Delete wakewords/openWakeWord/embedding_model.tflite 2025-11-17 20:11:30 -08:00
imonlinux d07e1be653 Delete lib directory 2025-11-17 20:11:04 -08:00
imonlinux 28c4ade611 Update README.md
Refactor: Sync with Upstream Architectural Changes (Nov 2025)
Type: Refactor / Feat

Description
This PR ports several major architectural changes and new features from the upstream OHF-Voice/linux-voice-assistant repository. Because our codebase has been significantly refactored (config file, state machine), these changes were ported manually to integrate them cleanly with our new architecture.

This brings our fork up-to-date with the upstream's core logic and dependencies, ensuring we benefit from future bug fixes in those externalized libraries.

Key Changes
Audio Library Replaced: Replaced the sounddevice library with soundcard.

New Audio Capture Loop: The entire audio processing pipeline in __main__.py has been rewritten. It no longer uses a Queue and a sounddevice callback. Instead, the process_audio thread now runs a blocking mic.recorder() loop from the soundcard library, which is the new architecture adopted by the upstream project.

External Wake Word Libraries: All local wake word code (microwakeword.py, openwakeword.py, wakeword.py) and the lib/ directory have been deleted. They are replaced by new pip dependencies: pymicro-wakeword and pyopen-wakeword.

New Feature: External Wake Words: Ported the feature to allow Home Assistant to provide custom, external wake words. The LVA will now download models sent from HA to a new local/ directory.

New Feature: List Devices: Ported the --list-input-devices and --list-output-devices CLI helpers from upstream.

Dependency Updates: > * Bumped aioesphomeapi to 42.7.0 and updated api_server.py to use AuthenticationRequest (from ConnectRequest). > * Constrained zeroconf to <1. > * Updated dev dependencies (black, flake8, etc.)

Cleanup: Updated .gitignore to include the new /local/ download directory and mypy.ini for the new libraries.
2025-11-17 20:09:57 -08:00
imonlinux 90f37df4e8 Merge pull request #34 from imonlinux/centralized-configuration-file
Refactor: Centralize Configuration into config.json
Type: Refactor Issue: Closes #XYZ (if you have one)

Description
This pull request completes a major refactoring goal by moving all (20+) command-line arguments into a single, centralized config.json file.

The application is now launched with a single -c or --config flag pointing to this new file, dramatically simplifying startup scripts and configuration management.

Changes
NEW: linux_voice_assistant/config.py > * Adds new dataclasses (AppConfig, AudioConfig, LedConfig, etc.) to define the application's configuration structure. > * Includes a load_config_from_json() helper to parse the JSON file and provide default values for any omitted sections.

MODIFIED: linux_voice_assistant/__main__.py > * Removed all argparse.add_argument() calls, except for the new --config flag. > * The main() function now calls load_config_from_json() at startup. > * All internal logic now references the config object (e.g., config.app.name) instead of the old args object.
2025-11-17 18:40:01 -08:00
imonlinux 8e4480716a Update linux-voice-assistant-2mic-install.md
Updated the tutorial to reflect the change to config.json instead of command line arguements.
2025-11-17 18:38:01 -08:00
imonlinux 531e6500d0 Update README.md 2025-11-17 18:09:34 -08:00
imonlinux 70e51148bf Update satellite.py
Fixed LED startup state bug.
2025-11-17 18:05:06 -08:00
imonlinux 9d27b016ca Update models.py
Fixed LED startup state bug.
2025-11-17 18:04:34 -08:00
imonlinux b209c1300e Update and rename user-linux-voice-assistant.service to linux-voice-assistant.service
Changes the user mode service file to the single command needed to start LVA. All other configuration arguments are in the linux_voice_assistant/config.json file.
2025-11-17 18:03:09 -08:00
imonlinux e073be7978 Delete service/user-pw-linux-voice-assistant.service
No longer needed.
2025-11-17 17:44:16 -08:00
imonlinux 75d02225b0 Delete service/user-pa-linux-voice-assistant.service
No longer needed.
2025-11-17 17:43:47 -08:00