github knoop7/Ava 0.4.8
Hexagon

10 hours ago

Ava 0.4.8 Release Notes

0.4.8 is a substantial update. This release pushes Ava beyond a "voice satellite + control panel" into a more complete home terminal: it delivers more reliable wake-word detection during media playback; enables intercom, voice messaging, and VoIP calling across the local network; integrates more naturally as an Android desktop launcher; significantly expands Sendspin audio capabilities for Music Assistant; introduces the VS wake-word engine; and resolves numerous issues across Bluetooth, audio, screensaver, permissions, and wake-word subsystems.


Major Features

1. Software Acoustic Echo Cancellation (AEC): Reliable Wake-Word Detection During Playback

What it does:

Ava now includes software Acoustic Echo Cancellation. In short, Ava knows exactly what it is currently playing and subtracts that reference signal from the microphone input. This makes wake-word detection and Home Assistant voice streaming significantly more robust while music, TTS responses, or wake chimes are playing.

Where to find it:

Settings → Connectivity → Software Echo Cancellation

Default state:

Disabled by default. Toggling it on takes effect immediately without a service restart. When enabled, Ava automatically disables the system's hardware AEC to prevent dual-processing degradation. If the device lacks native support for this pipeline, Ava falls back transparently to raw capture.

Three home scenarios:

  • Wake while playing music in the living room: Ava is streaming Music Assistant audio; the user speaks the wake word nearby without the loudspeaker drowning out the command.
  • Continue speaking after a TTS response in the kitchen: After Ava reads out weather, timers, or Home Assistant replies, the microphone is less contaminated by TTS reverberation.
  • Legacy devices without hardware AEC: Older tablets, phones, or LineageOS-based Echo units that lack reliable system echo cancellation can now use software AEC as a critical fallback.

Technical implementation:

Ava captures the playback reference from two sources:

  • Media, TTS, and wake chimes: PCM audio is tapped via ExoPlayer's audio bypass.
  • Sendspin: The already volume- and duck-adjusted PCM is used directly, so the reference signal closely matches actual loudspeaker output.

These sources are mixed into a single 16 kHz mono reference stream and held in a small timeline buffer. For each microphone frame, the corresponding reference frame is retrieved and processed through SpeexDSP 1.2.1 (compiled into Ava's native audio module) with residual echo suppression. The cleaned frame is then forwarded to wake-word detection and the HA voice stream.

Key technical details:

  • 20 ms frame size for real-time voice pipeline compatibility.
  • ~4 s reference buffer to cover music, TTS, wake chimes, and Sendspin playback.
  • Automatic channel mixing and sample-rate conversion; no requirement for uniform source formats.
  • When the switch is off, reference capture is inactive and incurs zero additional overhead.

Usage and tuning recommendations:

  • Enable the toggle at Settings → Connectivity → Software Echo Cancellation, then test wake-word detection while playing music.
  • Expect slightly weaker suppression during the first 1–2 seconds of playback; convergence improves as the adaptive filter stabilizes.
  • Built-in speakers yield the best results. Bluetooth speakers should not be expected to perform well due to high and variable latency, which makes precise alignment difficult.
  • The feature materially improves wake reliability and false-wake suppression during playback, but it will not eliminate echo entirely. Real-world room reverberation, reflections, and device latency always leave a small residual.
  • For further false-wake reduction, consider combining this with a light standby duck (e.g., reducing playback volume to 80 % when wake-word standby is active), a common technique in commercial smart speakers.

2. Voice Messages, Message Board, and Local-Network Intercom / Calling

What it does:

Ava now supports device-to-device voice messaging, a persistent message board, and real-time voice calling. Multiple Ava units on the same LAN automatically discover one another and can exchange voice messages or initiate peer-to-peer calls. Messages can be delivered immediately or deferred; the receiving unit can auto-play them or retain them on-screen in message-board mode for later replay.

Where to find it:

Settings → Extensions → Voice Messages & Calls

Available toggles:

  • Enable Voice Messages: Displays the voice-message floating panel for recording messages or calling nearby Ava devices.
  • Voice Message Name: The display name shown on peer devices.
  • Message Delivery Delay: Deferred delivery time; 0 means immediate.
  • Control in Home Assistant: Exposes show/hide control of the voice-message panel to Home Assistant.
  • Receive Voice Messages: Allows this device to accept messages from other Ava units.
  • Voice Message Handling: Choose Auto playback or Message board.
  • Answer Incoming Calls: Whether incoming calls require manual acceptance.
  • Call Ringtone: Select a ringtone.

Three home scenarios:

  • Kitchen to living room: While cooking, hands are occupied; send a voice message from the kitchen Ava to the living room tablet: "Dinner's ready—come grab it."
  • Child's room message board: After the child falls asleep, parents can leave a deferred morning reminder (e.g., "Don't forget your water bottle") without entering the room at night.
  • Whole-home intercom: With Ava units in the bedroom, study, and living room, family members can call each other directly like a household intercom—no mobile apps, cloud services, or external accounts required.

Technical implementation:

This is Ava's own LAN voice protocol; it does not rely on SIP/PJSIP. The stack uses UDP for discovery, signaling, and audio transport:

  • Control & discovery port: UDP 19848
  • Audio port: UDP 19849
  • Discovery: LAN broadcast of device ID, display name, device type, and local IP.
  • Signaling: BEGIN, END, ANSWER, DECLINE, HANGUP, NO_ANSWER, etc.
  • Voice messages: Session-based audio frames; maximum single-message duration capped at 60 seconds.
  • Real-time calls: 20 ms frames; supports incoming, answered, declined, hung-up, and ~1 minute no-answer timeout.
  • Codec: Real-time path uses Opus via the Concentus pure-Java codec, targeting 32 kbps, with in-band FEC enabled and soft degradation for packet-loss environments.
  • Audio safety: The call path independently manages microphone acquisition, AudioRecord, AudioTrack, echo/noise processing, and call state to avoid colliding with the primary voice-assistant wake pipeline.

Privacy and security notes:

This feature is architecturally bounded to prevent external leakage:

  • Discovery and communication are strictly LAN-local; no cloud upload or third-party accounts are involved.
  • Discovery broadcasts contain only device ID, display name, device type, and LAN IP. They do not include Home Assistant tokens, credentials, recognition content, or automation configuration.
  • Voice audio travels via direct LAN UDP to the targeted Ava device; no external server is traversed.
  • The receiving device must have Receive Voice Messages enabled; otherwise, messages are neither played nor displayed.
  • Messages are duration-capped; calls enforce hang-up, decline, and no-answer timeout controls, preventing infinite recording channels.
  • Microphone busy states block message/call recording to avoid overlapping with an active voice-assistant session.
  • This remains a LAN-only feature. Deploy Ava on a trusted home network; do not enable on public Wi-Fi, guest networks, or untrusted subnets.

3. Ava as a Genuine Android Desktop Launcher

What it does:

Ava can now serve as a full Android desktop launcher. You can set Ava as the system Home app so that the Home key returns to Ava rather than the stock launcher. Combined with the main interface, service status, quick-access tiles, and optional app-icon display, old tablets, phones, or wall-mounted panels become natural home-control terminals.

Where to find it:

Settings → Device Control → System Launcher

Related settings:

  • System Launcher: Choose which app handles the Home key. Selecting Ava makes Ava the system desktop.
  • Show Other App Icons: Display installed app icons on the Ava home screen for quick access to frequently used apps.
  • Dark Mode: If the default light theme is undesirable, switch to the dark theme at Settings → Extensions → Interface.

Important note:

Ava does not currently support Android live wallpapers / system wallpaper backgrounds. This release implements launcher capability, not dynamic-wallpaper service registration. Live wallpapers introduce additional rendering overhead, lifecycle complexity, and compatibility risk; to preserve 24/7 runtime performance and stability, this path is not pursued. If the light theme is unwanted, use the dark theme instead.

Three home scenarios:

  • Wall-mounted control panel: Fix an old tablet at the entryway or living room; the Home key always returns to Ava, preventing accidental navigation to a cluttered system desktop.
  • Bedside terminal: Limit the device to clock, voice, music, and a handful of essential apps; switch to dark mode at night to reduce eye strain.
  • Legacy device repurposing: Old phones no longer need to function as general-purpose handsets; they become dedicated Home Assistant voice panels, Bluetooth gateways, and music endpoints.

4. Sendspin Protocol Overhaul: Music Assistant Experience Upgrade

What it does:

Ava has heavily optimized the Sendspin protocol for use as a Music Assistant LAN player. It now supports broader audio formats, a more complete player role, more stable synchronization control, and copyable technical logs to facilitate debugging of multi-room playback, latency, buffering, and volume issues.

Where to find it:

Settings → Extensions → Playback → Media Player

Related settings:

  • Music Assistant Media Controls: Enable Music Assistant / Sendspin playback control.
  • Sendspin Volume Control: Choose Device Volume or Software Volume.
  • Sync device volume: Synchronize device volume with the player.
  • Sendspin Optimization Mode: Low-memory or special-device optimization.
  • Sendspin Audio Format: Select the audio format.
  • Sendspin Sync Offset: Adjust multi-room sync offset, range -1000 ms to +1000 ms.
  • Bottom handle: Enter Sendspin Stats to copy sync, latency, buffer, packet-loss, and output-device logs.

Audio format reference:

Format Description
Automatic Server and Ava auto-negotiate; prioritizes the highest-quality format available on the current device.
FLAC For lossless purists. Supports 44.1 kHz / 48 kHz, 16-bit / 24-bit.
PCM For stable local networks where codec complexity is undesirable. Supports 44.1 kHz / 48 kHz; probes 16 / 24 / 32-bit based on device capability.
Opus For lower bandwidth, higher jitter resilience, or less stable networks. Not lossless, but highly practical for LAN multi-device playback.

Three home scenarios:

  • Whole-home music: Living room, kitchen, and study Ava units sync-play the same track; per-room sync offset is adjusted individually.
  • Bedtime music: Bedroom old tablet acts as a Music Assistant player with album art persistently displayed; volume can follow system volume or software volume.
  • High-fidelity playback: If the music library is lossless, switch to FLAC manually; if the network is marginal, switch to Opus for more stable streaming.

5. New VS Wake-Word Engine

What it does:

Ava introduces the vsWakeWord wake-word engine. Special thanks again to jxlarrea and the voice-satellite-card-integration project:

https://github.com/jxlarrea/voice-satellite-card-integration

Ava has fully compiled and ported the relevant model engine to the Android path, converting the previously JS-biased implementation into a native inference pipeline usable from Java/Kotlin, with compatibility across Android 7 through Android 16. VS models are shipped inside the release package assets; the models actually available are those listed in the settings page for the current build.

Where to find it:

Settings → Voice Config → Wake Word Engine → On Device (vsWakeWord)

Three home scenarios:

  • Legacy tablet wake-word: Android 7 devices can now use a modern local wake-word path without requiring a system upgrade.
  • Consistent multi-device experience: Living room, bedroom, and study units can all use the same engine, reducing wake-word behavior variance across devices.
  • Integration with Home Assistant voice-satellite-card: If you are already using voice-satellite-card-integration, Ava slots more naturally into your existing satellite layout.

6. Customizable Home-Screen Header Title and Subtitle

What it does:

The top-left header previously defaulted to Ava Pro / Home Assistant. It can now be replaced with custom title and subtitle text, making Ava feel more like a dedicated room panel, family-member device, or personalized desktop.

Where to find it:

Settings → Extensions → Interface → Hide Header Text → Customize Header Text

Dialog details:

  • Title: maximum 12 characters.
  • Subtitle: maximum 20 characters.
  • Real-time character count (e.g., 7 / 12).
  • Changes take effect immediately upon saving; the home-screen top-left updates live.
  • Dialog styling reuses the existing ActionDialog / ValidatedTextField; no new theme is introduced.
  • Defaults remain Ava Pro (title) and Home Assistant (subtitle) when not customized.

Three home scenarios:

  • Living room control panel: Title → "Living Room Hub"; Subtitle → "Lights / AC / Music".
  • Child's room device: Title → child's name; Subtitle → "Goodnight Mode".
  • Desktop mode: After setting Ava as the system launcher, the header can display the household name or device purpose, so it no longer looks like a generic app.

New Capabilities & Enhancements

  • Voice-message floating panel for recording and sending to other LAN Ava devices.
  • Software Acoustic Echo Cancellation for improved wake-word detection during playback.
  • Playback reference capture for media, TTS, wake chimes, and Sendspin music.
  • Automatic multi-source mixing so simultaneous music and voice can both feed into echo cancellation.
  • Automatic alignment between playback reference and microphone capture to reduce self-audio leakage into the wake and recognition pipelines.
  • Automatic hardware-AEC disable when software AEC is active to prevent dual-filter interference.
  • Deferred voice-message delivery, configurable up to 1440 minutes.
  • Message-board mode: received voice messages persist on-screen and can be replayed.
  • Real-time voice calling with call, ring, answer, decline, hang-up, and no-answer timeout.
  • Configurable incoming-call ringtone using system tones or external audio files.
  • Home Assistant control over voice-message floating-panel visibility.
  • Automatic LAN discovery of peer Ava devices.
  • Ava as system desktop launcher.
  • Display of other installed app icons on the Ava home screen.
  • Hide or customize top-left header text.
  • Transparent top-right settings button while preserving original hit area.
  • Manual Sendspin audio-format switching.
  • Sendspin FLAC 44.1 kHz / 48 kHz, 16-bit / 24-bit.
  • Sendspin PCM 44.1 kHz / 48 kHz with 16 / 24 / 32-bit probing based on device capability.
  • Sendspin Opus 48 kHz 16-bit.
  • Sendspin software-volume vs. device-volume switching.
  • Sendspin low-memory optimization mode.
  • Sendspin sync-offset slider.
  • Copyable Sendspin technical logs for playback-issue reporting.
  • Multiple audio-pipeline toggles.
  • Finer audio configuration: audio source, audio profile, noise suppression, automatic gain control, echo cancellation, software microphone gain.
  • VS wake-word engine support.
  • VS wake-word runtime path for Android 7 through Android 16.
  • Bottom-sheet swipe-up in Settings to view device info, WebView, Android, and kernel debug information.
  • Tap-to-copy debug logs for easier bug submission.
  • More complete Mod Store permission-alias resolution, including gps/location, bluetooth, notifications, etc.
  • Bluetooth proxy scan-mode switching: Active Scan / Passive Scan.
  • Bluetooth proxy scan power-profile switching: High Performance / Balanced / Low Power.
  • Additional external broadcast control methods for automation via ADB, Tasker, MacroDroid, Automate, etc.

External Broadcast Permission Control Methods

File path: app/src/main/java/com/example/ava/receivers/AvaControlReceiver.kt

These broadcasts require Shizuku or root to actually complete authorization. Without permission, the system logs the failure and does not bypass Android security.

Supported authorization actions:

Action Permission Granted
ACTION_GRANT_RECORD_AUDIO RECORD_AUDIO
ACTION_GRANT_CAMERA CAMERA
ACTION_GRANT_LOCATION Location permissions
ACTION_GRANT_BLUETOOTH BT_SCAN / CONNECT / ADVERTISE + location permissions
ACTION_GRANT_NOTIFICATIONS POST_NOTIFICATIONS
ACTION_GRANT_OVERLAY SYSTEM_ALERT_WINDOW via appops
ACTION_GRANT_WRITE_SETTINGS WRITE_SETTINGS via appops
ACTION_GRANT_SECURE_SETTINGS WRITE_SECURE_SETTINGS
ACTION_GRANT_INSTALL_PACKAGES REQUEST_INSTALL_PACKAGES via appops
ACTION_ACTIVATE_DEVICE_ADMIN dpm set-active-admin (falls back to system activation UI on failure)

Usage examples:

adb shell am broadcast -a com.example.ava.ACTION_GRANT_RECORD_AUDIO
adb shell am broadcast -a com.example.ava.ACTION_GRANT_CAMERA
adb shell am broadcast -a com.example.ava.ACTION_GRANT_LOCATION
adb shell am broadcast -a com.example.ava.ACTION_GRANT_BLUETOOTH
adb shell am broadcast -a com.example.ava.ACTION_GRANT_NOTIFICATIONS
adb shell am broadcast -a com.example.ava.ACTION_GRANT_OVERLAY
adb shell am broadcast -a com.example.ava.ACTION_GRANT_WRITE_SETTINGS
adb shell am broadcast -a com.example.ava.ACTION_GRANT_SECURE_SETTINGS
adb shell am broadcast -a com.example.ava.ACTION_GRANT_INSTALL_PACKAGES
adb shell am broadcast -a com.example.ava.ACTION_ACTIVATE_DEVICE_ADMIN

Common examples:

adb shell am broadcast -a com.example.ava.ACTION_GRANT_BLUETOOTH
adb shell am broadcast -a com.example.ava.ACTION_GRANT_OVERLAY
adb shell am broadcast -a com.example.ava.ACTION_GRANT_WRITE_SETTINGS
adb shell am broadcast -a com.example.ava.ACTION_GRANT_SECURE_SETTINGS
adb shell am broadcast -a com.example.ava.ACTION_ACTIVATE_DEVICE_ADMIN

Bug Fixes

  • Fixed microphone capture of Ava's own playback (music, TTS, wake chimes) interfering with wake-word detection.
  • Fixed lack of software fallback when hardware AEC is unavailable or unstable on certain devices.
  • Fixed mutual interference when hardware and software AEC are enabled simultaneously.
  • Fixed HA-side STT receiving excessive echo during Ava's own playback.
  • Fixed Bluetooth proxy failing to broadcast or be discovered by Home Assistant on some devices. Thanks to @inventor7777 for reporting the Samsung S10 Lite over PoE scenario.
  • Fixed Bluetooth errors and compatibility issues related to Home Assistant 6.0.
  • Fixed Bluetooth proxy Active / Passive scan-mode switching.
  • Fixed Bluetooth scan-mode state desync after toggling between active and passive scanning.
  • Fixed unclear Bluetooth scan power strategy; now selectable among High Performance, Balanced, and Low Power.
  • Fixed certain Bluetooth driver and GATT connection stability issues.
  • Fixed false capability detection on low-end BLE chips causing anomalous Bluetooth proxy behavior.
  • Fixed Bluetooth proxy connection count, MTU, and connection-release issues.
  • Fixed excessive device-admin permission prompts when root is unavailable.
  • Fixed inability to quickly copy logs and submit bug reports from the Settings UI.
  • Fixed partial audio-pipeline state inconsistency after switching audio source / profile.
  • Fixed uncopyable audio technical logs.
  • Fixed screensaver WebView freezing or dying after long-running operation.
  • Fixed screensaver WebView renderer crash not auto-recovering.
  • Fixed screensaver WebView failing to reload when hidden/restored while the page was not loaded.
  • Fixed Xiaomi wallpaper-style / web-screensaver video playback interruption after long-running operation.
  • Fixed minimal-clock wallpaper failing to change properly.
  • Fixed minimal-clock remote wallpaper refresh getting stuck without a watchdog.
  • Fixed unstable handling of old image and blank states after remote wallpaper failure.
  • Fixed Mod Store gps permission parsing.
  • Fixed gps-mod failing to complete location permissions when not fully declared.
  • Fixed Music Assistant seeing volume changes while actual device loudness remained nearly unchanged when using software volume.
  • Fixed Sendspin software volume not being correctly applied to PCM output.
  • Fixed Sendspin state residue after switching between device and software volume.
  • Fixed potential duplicate application of system volume during Sendspin volume sync.
  • Fixed Sendspin playback gain not refreshing before audio output start, causing anomalous volume.
  • Fixed custom wake sound reverting after reboot.
  • Fixed external custom wake-sound URI persistence.
  • Fixed microphone activating before custom wake sound finished playing.
  • Fixed wake-word chime being re-captured by microphone on devices without echo cancellation.
  • Fixed timing issue between wake chime and recording start.
  • Fixed main wake microphone remaining paused after voice message / call was disabled.
  • Fixed potential AudioFlinger exhaustion from repeated sessions during voice calls.
  • Fixed incomplete audio-resource release after voice call end, hang-up, or decline.
  • Fixed unclear caller state when a voice call timed out with no answer.
  • Fixed receiving device potentially processing audio frames even when Receive Voice Messages was disabled.
  • Fixed missing graceful degradation when Sendspin FLAC decoding failed.
  • Fixed old decoder state residue after switching Sendspin Opus / FLAC / PCM stream formats.
  • Fixed non-standard goodbye reason during Sendspin multi-server contention.
  • Fixed inconvenient feedback of Sendspin sync offset, network jitter, and late-drop statistics.
  • Fixed unclear Settings page entry hierarchy.
  • Fixed top-left header text being hide-only rather than customizable.
  • Fixed visual discontinuity in dark theme combined with desktop mode.
  • Fixed Android Home settings redirect compatibility on certain OS versions.
  • Fixed incomplete Android 10+ Home Role request flow.
  • Fixed Ava itself being listed among desktop app icons during loading.
  • Fixed incomplete Bluetooth permissions in external broadcast authorization.
  • fixed external broadcast authorization for overlay / write settings / install packages requiring appops.
  • Fixed external broadcast device-admin activation failing silently without root instead of falling back to UI.
  • Fixed missing critical device information in Settings debug-panel logs.
  • Fixed potentially unnecessary sensitive fields in debug-log copy; reports now exclude irrelevant content outside IP / author lines.
  • Fixed incomplete WebView audio-permission request path.
  • Fixed Sendspin session failing to resume promptly after service restart on some devices.
  • Fixed overly aggressive scan strategy when Bluetooth and Wi-Fi interfered.
  • Fixed stability issues from excessive scan frequency on low-end Bluetooth chips.
  • Fixed Home Assistant-side Bluetooth scan-state request showing mismatch between configured mode and runtime mode.
  • Fixed Bluetooth scan failing to recover after going stale.
  • Fixed missing scan-restart mechanism when the Bluetooth process was stuck by the system.
  • Fixed voice-assistant media duck / unduck incorrectly sending pause / play commands.
  • Fixed unstable playback-pipeline arbitration during voice-assistant media resume.
  • fixed service initialization failure on some legacy devices due to slow audio-framework startup.
  • Fixed screensaver WebView not being destroyed or timers not stopped when screensaver was closed.
  • Fixed screensaver background pause/resume desync between page visibility and WebView timer state.
  • Fixed missing persistent read permission after external audio selection in Settings.
  • Fixed incoming ringtone external audio becoming unreadable after reboot.
  • Fixed inaccurate strings and i18n entry descriptions.

Special thanks to @danwi for extensive testing and reporting:

  • Software volume control having no effect.
  • Custom wake sound requiring re-selection after reboot.
  • Microphone activating before custom wake sound finished, causing re-capture on devices without echo cancellation.

Additional thanks to:


If you find Ava valuable, sponsorship is deeply appreciated. To be candid, this is a labor-intensive and largely thankless endeavor. While it remains genuinely enjoyable, the thousands of iterative install-compile-test cycles are exhausting. Yet I am reluctant to let down the community's expectations. This release was crafted with sincere effort; there may come a day when development stops. Your support would enable me to dedicate more time to the project. Please rest assured: Ava is entirely free and contains no advertisements.

This release introduces additional .so dynamic libraries (self-compiled OUPS driver libraries, ...)

bmc_qr

Don't miss a new Ava release

NewReleases is sending notifications on new releases.