feat: stabilize voice activity and audio routing
This commit is contained in:
@@ -51,146 +51,147 @@ List<PlatformCapability> currentPlatformCapabilities() {
|
||||
}
|
||||
|
||||
List<PlatformCapability> _androidCapabilities() => [
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'Oboe AAudio backend; Bluetooth SCO supported.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2, VAD via Silero ONNX.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Foreground service',
|
||||
description: 'Persistent notification during active connection.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Not available on Android.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio device selection',
|
||||
description: 'System-managed; wired/BT/SCO automatic routing.',
|
||||
tier: CapabilityTier.degraded,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Push-to-talk button',
|
||||
description: 'Media button / volume-key binding supported.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'Oboe AAudio backend; Bluetooth SCO supported.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2, VAD via Silero ONNX.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Foreground service',
|
||||
description: 'Persistent notification during active connection.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Not available on Android.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio device selection',
|
||||
description: 'System-managed; wired/BT/SCO automatic routing.',
|
||||
tier: CapabilityTier.degraded,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Push-to-talk button',
|
||||
description: 'Media button / volume-key binding supported.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
|
||||
List<PlatformCapability> _iosCapabilities() => [
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'VoiceProcessingIO AudioUnit (default); Sonora raw mode optional.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'Platform AEC/NS/AGC via VPIO; optional Rust AEC3/NS/AGC2 via Sonora.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio route switching',
|
||||
description: 'Handles speaker/earpiece/Bluetooth route changes and interruptions.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Not available on iOS.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Background audio',
|
||||
description: 'Supported via AVAudioSession background mode.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'VoiceProcessingIO AudioUnit (default).',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'Platform AEC/NS/AGC via VPIO.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio route switching',
|
||||
description:
|
||||
'Handles speaker/earpiece/Bluetooth route changes and interruptions.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Not available on iOS.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Background audio',
|
||||
description: 'Supported via AVAudioSession background mode.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
|
||||
List<PlatformCapability> _macosCapabilities() => [
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'cpal device enumeration; VoiceProcessingIO optional.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2; VPIO available on macOS.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via platform-global key-binding API.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'macOS Keychain.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio device selection',
|
||||
description: 'System audio output route picker.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'cpal device enumeration; VoiceProcessingIO optional.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2; VPIO available on macOS.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via platform-global key-binding API.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'macOS Keychain.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Audio device selection',
|
||||
description: 'System audio output route picker.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
];
|
||||
|
||||
List<PlatformCapability> _windowsCapabilities() => [
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'WASAPI via cpal.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via platform-global hotkey binding.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'Windows Credential Manager / DPAPI.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Installer',
|
||||
description: 'MSIX packaging not yet available in beta.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
];
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'WASAPI via cpal.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2 with Silero VAD.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via platform-global hotkey binding.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'Windows Credential Manager / DPAPI.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Installer',
|
||||
description: 'MSIX packaging not yet available in beta.',
|
||||
tier: CapabilityTier.unavailable,
|
||||
),
|
||||
];
|
||||
|
||||
List<PlatformCapability> _linuxCapabilities() => [
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'PulseAudio/ALSA via cpal.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2; no platform VPIO.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via X11/Wayland global key-binding. ',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'Secret Service / libsecret.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Desktop environment',
|
||||
description: 'DE-specific behaviour: screen locker may suspend audio.',
|
||||
tier: CapabilityTier.degraded,
|
||||
),
|
||||
];
|
||||
const PlatformCapability(
|
||||
feature: 'Voice capture',
|
||||
description: 'PulseAudio/ALSA via cpal.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Voice processing',
|
||||
description: 'WebRTC AEC3/NS/AGC2 with Silero VAD; no platform VPIO.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Global PTT hotkey',
|
||||
description: 'Supported via X11/Wayland global key-binding. ',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Secure storage',
|
||||
description: 'Secret Service / libsecret.',
|
||||
tier: CapabilityTier.supported,
|
||||
),
|
||||
const PlatformCapability(
|
||||
feature: 'Desktop environment',
|
||||
description: 'DE-specific behaviour: screen locker may suspend audio.',
|
||||
tier: CapabilityTier.degraded,
|
||||
),
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user