|
大家好, 折腾了一段时间,今天把 scream2diretta 正式发布到 GitHub 了。这是一个 C++ 写的小工具,专门运行在 Linux 上(树莓派 4/5、x86 小主机均可),功能是:把 Scream 协议发来的 UDP PCM 流,不经过 ALSA,直接喂给 Diretta Host SDK。 对已经在用 DRUP 的朋友,这不是替代品,而是补充。DRUP 在 UPnP 流(LMS、Roon、Audirvana)上表现很好,而 scream2diretta 主要覆盖 DRUP 不太方便处理的几个场景: Spotify、Foobar2000 等桌面应用:Windows 走 ASIOScream,Linux 走 ScreamAlsa → scream2diretta → Diretta Target → DAC HQPlayer + NAA(绕开 DirettaAlsaHost):NAA → ScreamAlsa → scream2diretta,避免 ALSA 的 period/buffer 唤醒带来的抖动 UPnP 流 + DSP:upmpdcli → MPD → CamillaDSP(EQ / 分频 / 房间校正)→ ScreamAlsa → scream2diretta,实现 Diretta + DSP 同时使用 手机 / 随身播放器(Apple Music / Spotify):Apple Music / Spotify App → USB gadget(树莓派虚拟声卡)→ CamillaDSP(可选)→ ScreamAlsa → scream2diretta → Diretta Target → DAC
内部是双线程无锁 SPSC 架构,Scream 接收线程和 Diretta SDK 工作线程可以分别绑核(--cpu-scream、--cpu-audio),尽量减少调度干扰。 支持 aarch64(树莓派 4 的 4K 页、树莓派 5 的 16K 页)和 x86-64(AVX2 / AVX-512 / Zen 4 等变体)。自带交互式安装脚本,一条命令基本可以完成编译和部署。 目前项目还处在比较早期阶段,我自己的测试主要是在树莓派平台(RPi 4/5)上完成的,也欢迎大家在不同平台和环境下帮忙测试、反馈。 最后特别感谢 cometdom 的 [DirettaRendererUPnP (DRUP)] 和 [slim2Diretta],本项目的整体思路和实现方式很大程度上受到了这两个项目的启发(包括 getNewStream() 拉流模型和 buffer 参数设计),也从中学习了很多。 由于本职工作比较忙,后续回复和问题跟进可能会稍慢一些,但我会尽量持续跟进。 GitHub:https://github.com/ayanamilee/scream2diretta
中文说明:https://github.com/ayanamilee/scream2diretta/blob/main/README_CN.md 欢迎交流、测试,也欢迎提 issue 或 PR。
|