Move the voice pipelines into core
Capture processing, the jitter buffer and decoding were desktop classes, so any other platform would have had to copy them. They now live in core and reach the platform only through two interfaces: - AudioIo lists devices and opens capture/playback lines; the desktop's AudioDevices implements it over PipeWire and Java Sound. - OpusCodec creates encoders and decoders; the desktop binds libopus through the FFM API as before. DesktopVoiceInput becomes CaptureVoiceInput unchanged in behaviour. DesktopVoiceOutput splits into VoiceStream, one speaker's jitter buffer and decoder, paced by whoever pulls it, and StreamingVoiceOutput around it. Speakers reach the device either on a line each (the desktop, so each shows up in the PipeWire mixer) or mixed onto one shared line, as mobile audio APIs want. The settings dialog's device lists and microphone test now go through the AudioBackend instead of desktop classes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.ts3client.ui;
|
||||
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
import com.ts3client.audio.AudioBackend;
|
||||
import com.ts3client.audio.OpusParameters;
|
||||
import com.ts3client.audio.VoiceInput;
|
||||
import com.ts3client.audio.VoiceOutput;
|
||||
@@ -39,7 +40,7 @@ public final class SettingsDialog extends JDialog {
|
||||
private final ClientVersionPanel clientVersionPanel;
|
||||
private final ContactsPanel contactsPanel;
|
||||
|
||||
public SettingsDialog(Frame owner, Settings settings,
|
||||
public SettingsDialog(Frame owner, Settings settings, AudioBackend audio,
|
||||
VoiceInput liveMic, VoiceOutput livePlayback,
|
||||
SoundNotifier sounds, HotkeyService hotkeys, Runnable onApply) {
|
||||
super(owner, "Options", true);
|
||||
@@ -53,9 +54,9 @@ public final class SettingsDialog extends JDialog {
|
||||
hotkeysPanel = new HotkeysPanel(hotkeys);
|
||||
clientVersionPanel = new ClientVersionPanel(settings);
|
||||
contactsPanel = new ContactsPanel(settings);
|
||||
devicesPanel = new DevicesPanel(settings, livePlayback,
|
||||
devicesPanel = new DevicesPanel(settings, audio.io(), livePlayback,
|
||||
this::applyLive, this::restartTest, this::setTestOutputDevice);
|
||||
voiceActivationPanel = new VoiceActivationPanel(settings, liveMic, hotkeys,
|
||||
voiceActivationPanel = new VoiceActivationPanel(settings, audio, liveMic, hotkeys,
|
||||
hotkeysPanel, this::audioSnapshot);
|
||||
|
||||
JTabbedPane tabs = new JTabbedPane();
|
||||
|
||||
Reference in New Issue
Block a user