mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 01:48:11 +00:00
gui: speakeruse 支持声卡选择(设备通道可配输出设备)
- playDeviceAudio 按 gui-prefs.deviceBridge.audio.device 用 aplay -D <dev> 播放 - 新增 audio:list IPC(aplay -L 枚举) + preload 暴露 audio.list - renderer 设备通道新增 speakeruse 声卡下拉, 保存到 prefs - 排除 hw: 裸设备(mono->stereo 需转换), 只留 default/pipewire/pulse/plughw - 修复 USB 声卡无声音: mono WAV 播到仅立体声设备失败, 改用 plughw 自动转换 已用 mock 网关 + 源码直跑验证: voice -> via plughw:CARD=Audio,DEV=0 播放成功
This commit is contained in:
@ -659,6 +659,12 @@ async function refreshAll() {
|
||||
state.displays = (await window.homeagent.displays.list()) || [];
|
||||
}
|
||||
} catch (e) {}
|
||||
// 本机音频输出设备列表(speakeruse 声卡选择用)
|
||||
try {
|
||||
if (window.homeagent && window.homeagent.audio) {
|
||||
state.audioDevices = (await window.homeagent.audio.list()) || [];
|
||||
}
|
||||
} catch (e) {}
|
||||
// 本机设备桥身份:设备桥由 gui-prefs 驱动,独立于当前连接类型
|
||||
if (window.homeagent && window.homeagent.deviceBridge) {
|
||||
var dbinfo = await window.homeagent.deviceBridge.get();
|
||||
@ -4967,6 +4973,20 @@ function renderDevices() {
|
||||
"</option>",
|
||||
)
|
||||
.join("");
|
||||
var audioDev = dbc.audio && dbc.audio.device ? dbc.audio.device : "default";
|
||||
var audioOpts = (state.audioDevices || [])
|
||||
.map(
|
||||
(a) =>
|
||||
'<option value="' +
|
||||
escHtml(a.name) +
|
||||
'"' +
|
||||
(a.name === audioDev ? " selected" : "") +
|
||||
">" +
|
||||
escHtml(a.name) +
|
||||
(a.desc ? " — " + escHtml(String(a.desc).slice(0, 32)) : "") +
|
||||
"</option>",
|
||||
)
|
||||
.join("");
|
||||
selfHtml +=
|
||||
'<div class="kv-row"><span class="key">' +
|
||||
__("设备通道", "Device Channel") +
|
||||
@ -5002,6 +5022,13 @@ function renderDevices() {
|
||||
"</div>" +
|
||||
'<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap">' +
|
||||
"<label style='font-size:13px'>" +
|
||||
__("speakeruse 声卡", "speakeruse audio out") +
|
||||
'</label><select id="dev-bridge-audio" style="font-size:13px;padding:3px 6px;border-radius:4px;border:1px solid var(--border-color);background:var(--bg-input);color:var(--text-primary);min-width:160px">' +
|
||||
(audioOpts || '<option value="default">default</option>') +
|
||||
"</select>" +
|
||||
"</div>" +
|
||||
'<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap">' +
|
||||
"<label style='font-size:13px'>" +
|
||||
__("cmdrun 目录", "cmdrun cwd") +
|
||||
'</label><input id="dev-bridge-cwd" value="' +
|
||||
escHtml(dbExec.cwd || "") +
|
||||
@ -5153,6 +5180,8 @@ async function saveBridgeChannel() {
|
||||
var dv = parseInt(dur.value, 10);
|
||||
cfg.screensueDuration = Number.isFinite(dv) && dv >= 0 ? String(dv) : "5";
|
||||
}
|
||||
var audioSel = document.getElementById("dev-bridge-audio");
|
||||
if (audioSel) cfg.audio = { device: audioSel.value || "default" };
|
||||
var cwd = document.getElementById("dev-bridge-cwd");
|
||||
var sandbox = document.getElementById("dev-bridge-sandbox");
|
||||
var boxdir = document.getElementById("dev-bridge-boxdir");
|
||||
|
||||
Reference in New Issue
Block a user