Repository navigation
Releases
Releases · 4202217/saundo
v0.6.3
Added
- Per-app capture on the Mac. The Capture settings list running applications
with their icons; pick one or more, and the selection streams through one
tap. Audio helpers fold into the app whose bundle ID prefixes theirs. The
selection keeps bundle IDs, so it survives restarts. The capture status
names the selection count and warns when an app is missing or is waiting
for its first sound. - Quick actions in the tray menu. A right click lists one row per visible
receiver, with the connected receiver in the accent color; when no row is
the target, Connect to last receiver follows. Mute local output and the
ambient light toggle from the same menu, and the mute row reads Unmute
local output while the preference is on.
Changed
- Connecting another receiver while streaming switches to it in place. The
local mute survives the switch, and the previous output comes back if the
new session fails. While streaming, the panel offers Connect on the other
online rows. - The local mute survives a latency change that restarts the stream.
- The playback card orders media, latency, and volume on one content column.
The volume row shows its integer percent on one line, the latency glyphs
are larger, and the transport glyphs draw their circle only on hover. - The latency preset cards share one height, so a wrapped description no
longer leaves them uneven. The connecting row's action carries a cancel
icon. - The tray menu no longer offers Disconnect; the panel's active receiver row
keeps it.
Fixed
- An unknown receiver volume no longer means full scale. When the AP2
handshake has no usable initial volume, or reports -144 (mute), the sender
sends no volume command and the receiver keeps its own level. A malformed
value is no longer read as zero, a value below -144 clamps to mute, and the
1 Hz volume poll follows the same rule.
新增
- macOS 按应用采集。采集设置列出正在运行的应用及其图标,可选一个或多个;所选应用经同一个 Tap 混音后串流。音频辅助进程按 bundle ID 前缀归并到所属应用。选择以 bundle ID 保存,重启后保留。采集状态显示所选数量,应用缺失或尚未发声时给出提示。
- 托盘菜单快捷操作。右键菜单为每个可见接收器列出一行,当前接收器使用强调色;没有可定位的行时,显示“连接上次接收器”。同一菜单可切换“静音本机输出”和氛围灯;静音已开启时,该行显示“取消静音本机输出”。
变更
- 播放中连接另一台接收器会直接切换,不再先断开;本机静音跨切换保留,新会话失败时恢复原输出。播放中,托盘面板的其他在线接收器行显示“连接”。
- 延迟变更导致串流重启时,本机静音保持不变。
- 播放卡片按媒体、延迟、音量排列在同一内容列。音量一行显示整数百分比,延迟图标更大,播放控制图标只在悬停时显示圆底。
- 三张延迟预设卡等高,描述换行时不再参差不齐;连接中行的动作带取消图标。
- 托盘菜单不再提供“断开连接”;托盘面板中正在使用的接收器行仍保留该动作。
修复
- 接收器音量未知时不再按满音量处理。AP2 握手没有可用的初始音量,或返回 -144(静音)时,发送端不发送音量命令,接收器保持自身音量。格式错误的值不再被当作 0,低于 -144 的值钳制到静音,1 Hz 音量轮询遵循同一规则。
v0.6.2
Added
- The Mac build updates in place from the signed release feed, the same path
Windows uses. Until a Developer ID signs the build, an update can ask again
for system-audio capture and Keychain access. - A saved-pairing notice. When the app cannot read the pairing data, the tray
panel shows a notice under the receiver card; its dialog explains the reset
and offers to pair again or stop showing it. The unreadable file is moved
aside and the credential store is rebuilt, so the next pairing can save its
key.
Changed
- Every engine error follows the app language. An English install no longer
shows Chinese text for a failed connect, receiver command, or update. - A new install advertises its sender name in the app language.
- Every capture endpoint stays selectable. Duplicate names get a number
suffix, and a follow-system snapshot no longer leaves a stale device label. - The tray menu icons are drawn from the interface's vector set.
- The Mac build holds off App Nap while connecting, pairing, streaming, or
reconnecting. - The pairing dialogs fit inside the 420-wide tray panel, fractional sample
rates print as 44.1 kHz, and the add-receiver hint no longer ends with a
period.
Fixed
- The Mac build mutes the local output while connected. The mute had failed
on every connection, so the local speakers kept playing alongside the
receiver. - The Mac capture path does not lock or allocate on the audio thread, and the
level analysis runs off it, which keeps capture smooth under load. - A retransmit request is answered only to the session's receiver and is
bounded, so a forged request cannot reflect audio to another address. - Session keys are cleared when a session ends, and an audio packet that
cannot be encrypted is dropped instead of sent in clear. - A bad event frame no longer discards the frames that follow it.
- The frame clock keeps running past 4.84 days.
- A failed initial capture open retries, a failed settings write stays
pending, and a full queue no longer drops a lifecycle event. - Corrupt or newer receiver and settings files are never overwritten.
- Discovery keeps the local endpoint, rejects IPv6-only advertisements, and
runs its directed pass off the publish path. - PTP rejects an overflowing timestamp and an IPv6 peer, and the follower
delivers packets outside its lock. - The no-tray fallback window resizes with its content, and the receiver
delay timer stops on quit. - The Now Playing adapter's child process is bounded and its self-test
retries; Now Playing bookkeeping stays on the main thread.
新增
- macOS 构建可从签名的发布源原地更新,与 Windows 走同一条路径。在拿到 Developer ID 之前,构建仍为 ad-hoc 签名,更新后可能再次请求系统音频采集和钥匙串权限。
- 保存的配对无法读取时,托盘面板会在接收器卡片下方显示提示;弹窗说明配对已重置,可重新配对或不再提示。无法读取的文件会被移到一旁并重建凭据库,下一次配对即可保存密钥。
变更
- 引擎错误全部跟随应用语言。英文界面下,连接、接收器命令和更新的错误不再显示中文。
- 新安装的发送端名称跟随应用语言。
- 每个采集端点都可以选择;重名的端点会带编号后缀,跟随系统默认时不再残留旧的设备名称。
- 托盘菜单图标改用界面同一套矢量图标。
- macOS 构建在连接、配对、播放或重连期间不会进入 App Nap。
- 配对弹窗完整显示在 420 宽的托盘面板内;小数采样率显示为 44.1 kHz;添加接收器的提示不再以句号结尾。
修复
- macOS 构建在连接后静音本机输出。此前每次连接都静音失败,本机扬声器会与接收器同时出声。
- macOS 采集在音频线程上不再加锁或分配内存,电平分析移出音频线程,负载下采集更稳定。
- 重传请求只响应本会话的接收器,并限制了单次与窗口内的数量,伪造请求无法把音频反射到其他地址。
- 会话结束时清零会话密钥;无法加密的音频包会被丢弃,不会以明文发出。
- 单个事件帧解密失败不再丢弃其后的帧。
- 帧时钟可以持续运行超过 4.84 天。
- 首次打开采集失败会重试;设置写入失败会保留待写状态;队列满时不再丢弃生命周期事件。
- 损坏或版本更新的接收器与设置文件不会被覆盖。
- 发现流程保留本机端点、拒绝仅 IPv6 的广播,定向查询不再阻塞发布。
- PTP 拒绝溢出时间戳和 IPv6 对端,follower 在锁外投递数据包。
- 无托盘时的回退窗口随内容调整大小;退出时停止接收器延迟计时器。
- 正在播放适配器的子进程生命周期受控,自检失败会重试;正在播放的记录保持在主线程。
v0.6.1
Added
- Ambient light idle standby. After the chosen period without playback
(Never, 1, 5, 10, or 30 minutes; 30 by default) the HomePod top display
turns off, and the first sound turns it on again. The tray panel shows a
Standby chip, and its footer says the display wakes when sound plays. - The connection page health card. It shows the receiver's own reported
processing time and the session's stability. A stereo pair reports the
higher member's time; a receiver that reports none reads Not reported.
Latency mode and receiver processing measure different stages and are
never added. - The filled receiver glyphs for HomePod, HomePod mini, Apple TV, AirPort
Express, and the Mac laptop, mini, studio, and desktop forms. A Mac's form
follows its model identifier. - Session takeover. When another device takes over the receiver, the app
shows Taken over by another device and offers Reconnect instead of
reconnecting in a loop. - A receiver that runs on this computer is never a target. It appears in the
hidden group with a Local chip, is never auto-connected, and the app
refuses to connect to it. - The diagnostic log moves to the About page, which opens it over the
settings window.
Changed
- Launch is faster. The receiver group, its features, and its authentication
are cached, so auto-connect starts without waiting for discovery. - The sender chooses one, two, or three packet copies from the last
session's retransmit rate and sends two prefill packets, which cuts
retransmits on a lossy link. - The macOS tray panel style setting is removed; the rounded flyout is the
only style. - The receiver password row appears only for a Mac, a manual receiver, or a
row with a saved password that can still be cleared; a PIN-paired HomePod
or Apple TV with no saved password hides it. - The tray panel footer carries the face, the phase, and the update chip.
- Settings row hints carry no final period, and the language and appearance
subtitles are shorter.
Fixed
- The update channel stays on the chosen setting after a restart instead of
reverting to Beta. - A HomePod that uses an AirPlay password keeps the HomePod profile; the
receiver profile follows the receiver's family, not its pairing method. - A capture device that becomes invalid retries with growing delays and logs
at most once a minute instead of every two seconds. - The stability readout counts only drops from the current session, so an
idle capture overflow no longer marks a clean session as Stuttering. - On a network without IPv6, discovery no longer floods the log with bind
failures.
新增
- 氛围灯的待机。没有播放达到所选时间后(从不、1、5、10、30 分钟,默认 30),HomePod 顶屏关闭;再次有声音时自动恢复。托盘面板显示“待机”标签,底部显示“已待机 · 播放声音即唤醒”。
- “连接”页的健康卡片。显示接收器自报的处理时间和本次会话的稳定性;立体声组取较高的成员值,接收器未上报时显示“接收器未上报”。延迟模式和接收器处理测量的是不同环节,不会相加。
- 实心接收器图标:HomePod、HomePod mini、Apple TV、AirPort Express,以及 Mac 笔记本、mini、Studio 和台式机形态;Mac 的形态按型号标识判断。
- 会话接管。接收器被其他设备接管后,应用显示“已被其他设备接管”并提供“重新连接”,不再反复重连。
- 本机上的接收器不再是目标。它只出现在“已隐藏”分组,带“本机”标签,不会被自动连接,应用也拒绝连接它。
- 诊断日志移到“关于”页,在该窗口内以弹窗打开。
变更
- 启动更快:接收器组、功能信息和认证信息会被缓存,自动连接无需等待发现完成。
- 发送端按上次会话的重传比例选择一份、两份或三份包副本,并发送两个预填充包,降低弱网下的重传。
- 移除托盘面板样式设置;圆角浮窗是唯一样式。
- 接收器密码行只对 Mac、手动添加的接收器或仍保存着可清除密码的行显示;没有保存密码的屏幕配对码 HomePod 和 Apple TV 不显示。
- 托盘面板底部只保留表情、状态和更新提示。
- 设置行提示不再以句号结尾;语言和外观的说明更短。
修复
- 重启后更新通道保持所选设置,不再回到 Beta。
- 使用 AirPlay 密码的 HomePod 仍使用 HomePod 档案;接收器档案按设备类型选择,而不是按配对方式。
- 采集设备失效后按递增间隔重试,日志最多每分钟一条,而不是每两秒一条。
- 稳定性只统计本次会话的丢弃,空闲采集溢出不再把正常会话标成“有卡顿”。
- 没有 IPv6 的网络中,发现不再刷屏记录绑定失败。
v0.6.0
Added
- macOS support on Apple Silicon (macOS 14.4+). System audio is captured
with a Core Audio process tap, credentials use the login Keychain, the
media card reads the system media session through a bundled MediaRemote
adapter, and the build ships as an app bundle and a dmg. The mac build is
ad-hoc signed and its updater stays off until a signed, notarized feed
exists. - The media card names the app playing and shows its icon, resolved from
the Windows shell's Applications folder, then the running executable's
version resource. An app without an icon shows the name alone. - The media card follows the system's current media session. The switch
arrow pins another open session until a different one becomes current. - The flyout style setting (macOS only): a system popover or the rounded
flyout.
Changed
- The app is named Saundo in the interface, the window titles, the
installer, and the About page. - The Now Playing settings page is the Media card page. Its switch reads
Show in tray panel and only hides the card in the tray panel; the
preview and the option rows stay active. The cover options read None,
Default, and Media. - The Ambient light page has a Color source row (Cover or Template), and
its six template swatches keep one size and wrap on a narrow page. - The settings content column caps at 720 DIP and centers on a wide
window. The Audio page stacks the three latency presets as full-width
rows below 714 DIP, so no name, value, or description is cut. Caveats
sit under their cards as info notes. - The tray menu item reads Show tray panel, and receiver copy replaces
device copy throughout. - The About page names the license GPL-3.0-only.
- The Windows update feed stays on; the mac build disables its updater.
Fixed
- After a failed session, the other online receivers stay connectable
instead of showing a disabled Connect. - Cancelling a connection clears the previous failure instead of leaving
a stale banner. - A receiver discovered through the other AirPlay service no longer keeps
the service suffix in its name. - The lamp preview follows the session the app pushes to the receiver,
not the card's arrow selection, so the preview and the top display
cannot disagree. - The window title follows a language change.
- On macOS, the capture tap no longer reopens on a false device-stopped
signal; the aggregate liveness probe was removed. - The tray panel style setting survives an engine snapshot, so the toggle
no longer appears to revert. - The tray panel's update-ready chip uses the ready wording instead of the
restart action. - The release copy review's fixes: the capture description and receiver
port hint fit at the default width, the macOS build says computer and
local output instead of PC, the update-failed line keeps its reason
localized, and the receiver launch chip, Chinese receiver and license
terms, and About notices match the copy standard.
新增
- 支持 Apple Silicon 上的 macOS(macOS 14.4+)。系统声音由 Core Audio 进程 Tap 采集,凭据保存在登录钥匙串,媒体卡片通过内置的 MediaRemote 适配器读取系统媒体会话,构建产物为 .app 与 dmg。mac 构建为 ad-hoc 签名,更新器保持关闭,直到有签名并公证的更新源。
- 媒体卡片显示正在播放的应用名和图标:先查 Windows 开始菜单的应用列表,再回退到运行中可执行文件的版本资源;没有图标时只显示名字。
- 媒体卡片跟随系统当前媒体会话;切换箭头可固定另一个打开的会话,直到系统当前会话发生变化。
- 浮窗样式设置(仅 macOS):系统气泡或圆角浮窗。
变更
- 应用在界面、窗口标题、安装器和“关于”页中统一命名为 Saundo / 声渡。
- “正在播放”设置页改为“媒体卡片”页。开关文案为“托盘面板中显示”,只隐藏托盘面板中的卡片,预览和下方选项保持可用;封面选项为“无 / 默认 / 媒体”。
- “氛围灯”页新增“颜色来源”行(封面 / 模板);六组模板色块保持固定尺寸,窄窗口下换行。
- 设置内容列在宽窗口中上限 720 DIP 并居中;“音频”页在 714 DIP 以下把三个延迟预设改为整行排列,名称、数值和说明都不再被截断;提示移到卡片下方的信息注释。
- 托盘菜单项改为“显示托盘面板”;界面中的“设备”统一为“接收器”。
- “关于”页的许可证标注为 GPL-3.0-only。
- Windows 的更新源保持开启;mac 构建关闭更新器。
修复
- 会话失败后,其他在线接收器仍可连接,不再显示灰掉的“连接”。
- 取消连接会清除上一次失败,不再残留错误提示。
- 通过另一个 AirPlay 服务发现的接收器,名称不再带服务后缀。
- 氛围灯预览跟随应用推送到接收器的会话,而不是媒体卡片的箭头选择,预览与顶屏不会不一致。
- 窗口标题跟随语言切换。
- macOS 采集不再因为错误的设备停止信号反复重开 Tap;聚合设备的存活检查已移除。
- 托盘面板样式设置会在引擎快照之间保持,开关不再看起来回弹。
- 托盘面板的更新就绪提示改用“待重启”,不再使用重启动作的措辞。
- 发布文案审查的修正:采集说明与接收器端口提示在默认宽度下完整显示;macOS 构建改用“本机”和“本机输出”,不再使用 PC;更新失败行只显示本地化原因;接收器启动芯片、中文接收器与许可证术语、关于页第三方声明与文案标准一致。
v0.6.0-beta.1
Added
- macOS support on Apple Silicon (macOS 14.4+). System audio is captured
with a Core Audio process tap, credentials use the login Keychain, the
media card reads the system media session through a bundled MediaRemote
adapter, and the build ships as an app bundle and a dmg. The mac build is
ad-hoc signed and its updater stays off until a signed, notarized feed
exists. - The media card names the app playing and shows its icon, resolved from
the Windows shell's Applications folder, then the running executable's
version resource. An app without an icon shows the name alone. - The media card follows the system's current media session. The switch
arrow pins another open session until a different one becomes current. - The flyout style setting (macOS only): a system popover or the rounded
flyout.
Changed
- The app is named Saundo in the interface, the window titles, the
installer, and the About page. - The Now Playing settings page is the Media card page. Its switch reads
Show in tray panel and only hides the card in the tray panel; the
preview and the option rows stay active. The cover options read None,
Default, and Media. - The Ambient light page has a Color source row (Cover or Template), and
its six template swatches keep one size and wrap on a narrow page. - The settings content column caps at 720 DIP and centers on a wide
window. The Audio page stacks the three latency presets as full-width
rows below 714 DIP, so no name, value, or description is cut. Caveats
sit under their cards as info notes. - The tray menu item reads Show tray panel, and receiver copy replaces
device copy throughout. - The About page names the license GPL-3.0-only.
- The Windows update feed stays on; the mac build disables its updater.
Fixed
- After a failed session, the other online receivers stay connectable
instead of showing a disabled Connect. - Cancelling a connection clears the previous failure instead of leaving
a stale banner. - A receiver discovered through the other AirPlay service no longer keeps
the service suffix in its name. - The lamp preview follows the session the app pushes to the receiver,
not the card's arrow selection, so the preview and the top display
cannot disagree. - The window title follows a language change.
新增
- 支持 Apple Silicon 上的 macOS(macOS 14.4+)。系统声音由 Core Audio 进程 Tap 采集,凭据保存在登录钥匙串,媒体卡片通过内置的 MediaRemote 适配器读取系统媒体会话,构建产物为 .app 与 dmg。mac 构建为 ad-hoc 签名,更新器保持关闭,直到有签名并公证的更新源。
- 媒体卡片显示正在播放的应用名和图标:先查 Windows 开始菜单的应用列表,再回退到运行中可执行文件的版本资源;没有图标时只显示名字。
- 媒体卡片跟随系统当前媒体会话;切换箭头可固定另一个打开的会话,直到系统当前会话发生变化。
- 浮窗样式设置(仅 macOS):系统气泡或圆角浮窗。
变更
- 应用在界面、窗口标题、安装器和“关于”页中统一命名为 Saundo / 声渡。
- “正在播放”设置页改为“媒体卡片”页。开关文案为“托盘面板中显示”,只隐藏托盘面板中的卡片,预览和下方选项保持可用;封面选项为“无 / 默认 / 媒体”。
- “氛围灯”页新增“颜色来源”行(封面 / 模板);六组模板色块保持固定尺寸,窄窗口下换行。
- 设置内容列在宽窗口中上限 720 DIP 并居中;“音频”页在 714 DIP 以下把三个延迟预设改为整行排列,名称、数值和说明都不再被截断;提示移到卡片下方的信息注释。
- 托盘菜单项改为“显示托盘面板”;界面中的“设备”统一为“接收器”。
- “关于”页的许可证标注为 GPL-3.0-only。
- Windows 的更新源保持开启;mac 构建关闭更新器。
修复
- 会话失败后,其他在线接收器仍可连接,不再显示灰掉的“连接”。
- 取消连接会清除上一次失败,不再残留错误提示。
- 通过另一个 AirPlay 服务发现的接收器,名称不再带服务后缀。
- 氛围灯预览跟随应用推送到接收器的会话,而不是媒体卡片的箭头选择,预览与顶屏不会不一致。
- 窗口标题跟随语言切换。
v0.5.0
Added
- The Now Playing card in the flyout. It reads the Windows media session
and shows the app, cover, title, artist, a live five-band meter, elapsed
and remaining time, and the transport controls the session reports. The
session-switch arrow moves between open media sessions. - The Now Playing settings page. It controls the card's display master,
the cover mode (none, default, or the media artwork), cover colors, the
audio level, playback controls, and the receiver track-info push. - Ambient light. Six palettes plus a default reset paint the top display
of a HomePod on software 27.2 through the Now Playing cover. Choose the
preset in the Ambient light settings page or the flyout's ambient card.
With the light off the receiver keeps its default or the media cover. - Receiver cover art. The media thumbnail now reaches the receiver as an
image on the encrypted control channel. The ambient image and the
track-info cover share one slot; the light takes it while it is on. - Mute the PC output. A connection switch mutes the local render endpoint
while a session streams and restores its earlier state on disconnect,
quit, or when the switch is turned off. A guard file undoes the mute
after a crash. The settings note warns when the driver lets WASAPI
loopback capture survive the mute. - Appearance. The General page follows Windows, light, or dark, and both
windows repaint when the choice changes. - The About page. It shows the version, the project links, the GPL
license, and the third-party notices. - Directed discovery. A unicast pass over the ARP neighbors and the
remembered hosts finds receivers that miss the multicast browse, so a
HomePod that never answers multicast is still found and can be reached
after a restart.
Changed
- The flyout and the Receivers page list only receivers that can be used:
manual entries, online discovered receivers, and the active session's
row. An offline discovered receiver's saved settings return with the
device. - The Receivers page renders an empty list as plain prose, with the add
row as the only plus, and collapses hidden rows when their group closes. - The meter gates band energy below -50 dBFS and floors each band's gain,
so dither and room tone no longer fill the bars during quiet passages. - The update notes dialog reads the offered version's entry from the
localized changelog, so a Chinese dialog no longer shows English notes. - A local build reports its git describe stamp, and the updater still
offers the release that the build sits past. - The app now builds on mygo 0.8.0.
- The local-output mute, ambient light, and receiver track-info switches
now default on.
Fixed
- The cover art now reaches the receiver. The sender emitted the image,
but the engine passed an empty thumbnail and the app's change key held
only the text. - A song change no longer replaces the ambient light, and turning the
light off hands the cover slot back to the media artwork or the origin
image. - A stereo group name arrives as RFC 1035 byte escapes in the TXT
gpn
field and is now decoded, so a UTF-8 name such as the Chinese for
"bedroom" no longer appears as escapes. - A stale media thumbnail, such as Chrome's placeholder logo, is replaced
when the artwork changes under the same title. - The disconnected idle tray face is an open-eyed line face, distinct from
the silent-session smile. - Connecting to a remembered receiver without a host or port fails closed
instead of dialing an empty address.
新增
- flyout 里的“正在播放”卡片。它读取 Windows 媒体会话,显示应用、封面、标题、艺术家、五段实时电平表、已播放与剩余时间,以及会话提供的播放控制。会话切换箭头在打开的媒体会话之间切换。
- “正在播放”设置页。它控制卡片的显示总开关、封面模式(无封面、默认封面、媒体封面)、封面配色、音频电平、播放控制和接收器曲目信息推送。
- 氛围灯。六套预设加默认复位,通过正在播放封面把颜色画到 software 27.2 的 HomePod 顶屏。可在设置的“氛围灯”页或 flyout 的氛围灯卡片选择预设。关闭后接收端保留默认画面或媒体封面。
- 接收端封面。媒体缩略图现在经加密控制通道作为图片发到接收端。氛围灯图片和曲目信息封面共用一个位置,氛围灯开启时优先显示氛围灯。
- 连接后静音本机输出。“连接”页的开关在串流时静音本机渲染端点,断开、退出或关闭开关时恢复之前的状态;崩溃后由守卫文件撤销静音。驱动允许 WASAPI 环回继续采集时,设置里的说明会给出警告。
- 外观。“通用”页可跟随 Windows、浅色或深色,两个窗口一起重绘。
- “关于”页。显示版本、项目链接、GPL 许可证和第三方声明。
- 定向发现。每五轮通过 Windows ARP 邻居表和记住的主机做一次单播查询,找回不响应组播的接收端,所以从不响应组播的 HomePod 也能被发现,并在重启后仍可连接。
变更
- flyout 和“接收器”页只列出可用的接收端:手动添加的、在线的已发现接收端,以及当前会话那一行。离线的已发现接收端保留设置,设备回来后重新出现。
- “接收器”页的空列表改为普通文字,添加行是唯一的加号;隐藏组收起时一并收起其中的展开行。
- 电平表忽略 -50 dBFS 以下的频段能量,并为每个频段设增益下限,安静段落不再被底噪和抖动填满。
- 更新说明弹窗从本地化 changelog 读取当前提供版本的条目,中文弹窗不再先显示英文说明。
- 本地构建显示 git describe 版本戳,更新器仍会提供它之前的正式版本。
- UI 框架升级到 mygo 0.8.0。
- 连接后静音本机输出、氛围灯和在接收器上显示曲目信息现在默认开启。
修复
- 封面现在能到达接收端。发送端已经发出图片,但引擎传了空缩略图,应用的变更键也只包含文字。
- 切歌不再覆盖氛围灯;关闭氛围灯后,封面位置交还给媒体封面或默认画面。
- 立体声组名在 TXT
gpn字段里以 RFC 1035 字节转义到达,现在会解码,UTF-8 名称“卧室”不再显示为转义序列。 - Chrome 的占位缩略图之类的旧媒体缩略图,会在同一标题下封面变化时刷新。
- 断开后的空闲托盘表情改为睁眼横线脸,与已连接但静音的微笑了区分。
- 连接一台没有主机或端口的记住的接收端时快速失败,不再拨号到空地址。
v0.4.2
Added
- Receiver management on the settings Receivers page. Add a receiver by IP
or hostname when mDNS cannot find it, edit or remove rows, hide them from
the flyout, and set one auto-connect target. Each receiver keeps its own
DSP/DAC delay and a password stored with DPAPI. The newreceivers.json
registry persists discovered receivers across a power-off. - Latency modes. Low 200 ms, standard 1.5 s, stable 2 s, or a custom value
from 20 to 2000 ms, chosen in the flyout or on the Audio page. The ALAC
line shows the resolved latency with the receiver's own delay, and a live
change restarts the stream with a spinner while the last streaming state
stays on screen. - Tray animation. The connect and stream faces animate at 12 frames per
100 ms. The General page has a Tray animation switch, on by default, and
Windows animation effects off holds the static face. - Updates in settings. The Updates page shows available, downloading, ready,
and failed states plus the release-notes history. The notes dialog follows
the app language, and a found update appears as a flyout chip and a tray
tooltip without taking focus. - Stereo groups prompt for a member's receiver password and reconnect the
pair after it is entered.
Changed
- Settings are written once after a short delay instead of on every volume
tick or toggle, so a slow disk no longer stalls playback. - Diagnostics rotate by byte count, and the sender reports pacer lag,
dropped host events, and bounded teardown write failures. - Quitting no longer waits for an in-flight mDNS query, so the window closes
without a freeze of up to 1.5 seconds. - UDP sockets use a 256 KB receive buffer for timing and retransmit bursts.
- Restarting capture stops the previous source on its own goroutine, so it
no longer blocks the playback loop.
Fixed
- A stale PIN dialog is cleared when another device connects.
- A reconnect retry no longer tears down an active session.
- A stereo group whose member drops before launch now fails cleanly and
reconnects instead of staying half-dead. - Changing latency while a PIN dialog is open no longer cancels the pairing,
and an offline receiver is reported instead of silently keeping the old
session. - The tray and flyout show the resting face when a connected stream has been
silent for two seconds. - A receiver that rejects stored pairing credentials now pairs again on the
same connection instead of failing every retry. - The receiver page keeps its selected row, expanded state, and scroll
position across refreshes, and the hidden-group animation no longer
squeezes the enabled card.
新增
- 设置里的“接收器”页可以管理接收端。mDNS 发现不到时可按 IP 或主机名手动添加,也可编辑、删除、隐藏行,并指定一台自动连接。每台接收器可单独设置 DSP/DAC 延迟和经 DPAPI 保存的密码。新的
receivers.json注册表让发现过的接收端断电后仍保留。 - 延迟模式。低延迟 200 ms、标准 1.5 s、稳定 2 s,或 20 到 2000 ms 的自定义值,可在 flyout 或音频页选择。ALAC 行显示解析后的延迟并包含该接收器自己的延迟;直播中切换会重启串流并显示加载状态,同时保留上一次串流画面。
- 托盘动画。连接和串流时表情以 12 帧、每帧 100 ms 播放。“通用”页有“托盘动画”开关,默认开启;系统关闭动画效果时保持静态表情。
- 设置内更新。“更新”页显示可下载、下载中、待安装和失败状态,以及发布说明历史。说明弹窗跟随应用语言,发现新版本时显示 flyout 角标和托盘提示,不抢焦点。
- 立体声组会为需要密码的成员弹出输入框,输入后重连整对。
变更
- 设置改为短暂延迟后合并写入,拖动音量或切换开关不再因为同步写
settings.json而卡顿。 - 诊断日志按字节数轮转,并在日志中报告 pacer 落后、丢弃的主机事件和有界收尾写入失败。
- 退出时不再等待进行中的 mDNS 查询,窗口关闭不再卡住最多 1.5 秒。
- UDP socket 使用 256 KB 接收缓冲,减少定时和重传请求突发时的丢包。
- 重启采集时旧音源在独立 goroutine 停止,不再阻塞播放循环。
修复
- 连接另一台设备时会清除上一个设备残留的配对码对话框。
- 重连重试不再拆掉正在进行的会话。
- 立体声组成员在启动前掉线时,整组会干净地失败并重连,不再停在半死状态。
- 在配对码对话框打开时调整延迟不会取消配对;接收器离线时会报告失败,而不是静默保留旧会话。
- 已连接但静音超过两秒时,托盘和 flyout 显示休息表情。
- 接收端拒绝已保存的配对凭据时,会在同一连接上重新配对,而不是一直重试失败。
- 接收器页在刷新后保留选中行、展开状态和滚动位置,隐藏组动画也不再挤压启用的卡片。
v0.4.1
0.4.1 - 2026-11-02
Fixed
- The volume readout now shows 0% to 100%, not 0% to 10000%.
- Dropped samples are shown only while streaming; idle capture no longer
reports a growing count. - Non-ASCII sender names are encoded as UTF-16BE in the AP2 session plist,
so a Mac receiver shows "声渡" instead of mojibake. - The settings window uses one background across its title bar, sidebar, and
content.