【工具】Sonobus|局域网多台设备共享音频的全部方案探索过程(最终的方案需要一台电脑)

我注意到我自己常用的手机外放的人声方面(中低频)十分差劲,但是备用机的人声还可以,但是高频很糊。有一天因为一些奇怪的原因,我将两个手机放在一块儿播放音乐,这一放可不得了了,我发现效果那真是一级棒啊!

于是我开始琢磨起怎么两个手机同时播放音乐。当然,在后来寻找方案的过程中,我注意到我这个需求除了听音乐,还有其他的应用场景,比如小孩跳舞或者做运动时跑动,音乐有时候会听不到,也需要同时播放音乐,这些是后话了。

我的探索过程也非常朴实无华,都是先找找有没有最简单的方案,然后再一点点找难的,以下是全部过程的记录,非常具备借鉴价值。

嗐,这注定又是一篇其他平台很难发出去的文。

目录
  • 前言:最简单的方案
  • 安卓to安卓
    • ⭐⭐屏幕共享软件
    • ⭐⭐⭐BeatSync
    • ⭐soundseeder
    • ⭐snapcast
    • ⭐⭐AudioRelay
    • ⭐音乐软件的“一起听”功能
    • ⭐荣耀或者华为的party功能
    • ⭐近期的新软件:VividStereo
    • 脑洞:用距离打败延迟
  • 电脑to安卓
    • ⭐⭐⭐⭐snapcast
    • Soundit
    • 等待微软更新
    • AudioShare
    • ⭐⭐⭐⭐⭐sonobus
  • 后话

前言:最简单的方案

首先,我是考虑了打开同一个音乐软件、然后两边同时点这一最古朴的手段。很显然,点击速度以及手机的反应速度,导致我的调整时间较长。

为了减少调整次数,我为两边播放同一个音乐列表,由于我登录的不是同一个账号,所以并没有同一个列表,所以我直接播放了周深的《反深代词》,这句话可以不提,因为和技术方案没有实质关联,但是既然是我的博客,我想写什么就写什么——这是一张好专辑。

由于两个手机的反应速度有差异,在切换下一首歌时,双方出现不同步的情况,这导致设置列表没有办法彻底解决调整次数过多的问题。

因此,只能另辟蹊径。

我尝试的方案巨多,所以这里直接列出来,就不描述我的心理历程了。

考虑到我的宿舍网速有实测百兆以上(不是千兆是因为我路由器没有买一个好的,网线也没有买一个好的,没有买一个好的路由器和网线是因为宿舍够用了就没买),我认为区区音频共享应该不足挂齿,尝试方案时也确实考虑过太多安卓to安卓直接无线贡献的方案,如果你们网速本来就差,那这种方案直接跳过不看都行;但要是你们网速比我还好得多,你们可以尝试一下。

安卓to安卓

安卓to安卓意思是两个安卓手机都下载同一个软件(或者加入同一个网页),然后通过这个软件(或网页)共享音频。

在这里插入图片描述

⭐⭐屏幕共享软件

我尝试下载了我能找到的最轻量的开源且中文的局域网安卓to安卓的屏幕共享软件,https://github.com/lesa1127/AndroidScreenShare,这个软件仅仅只有两个功能,连接ip和开放被连接,简单到没话说。经测试发现即使屏幕共享的帧率等相关参数已经都设置成了0,音频共享还是会出现明显的延迟,没有量化测量,但听感上感觉延迟大于100ms了。所以基本上可以排除所有无线的局域网纯屏幕共享软件了。

⭐⭐⭐BeatSync

这是一个网页,链接是https://www.beatsync.gg/,不用下载软件,只要创建同一房间就可以分享音频,但是由于是网页,它没有办法直接分享手机APP的音频。我有很多音乐资源是会员专享的,或者仅限视频网站上放,直接离线下载文件也很麻烦,所以我不爱用这种方案。

⭐soundseeder

直接从谷歌应用商店下载不了,那个是专供旧版安卓的。从其他的官网比如uptodown上下载到比较新的是2.7.1版本,https://soundseeder.cn.uptodown.com/android(这个链接直接点可能点不了,如果点不了自己去搜一下别的下载路径)。可以发现两个重大缺陷,第一是也有延迟,即使这延迟只延迟50ms左右,对于音响来说也是不可饶恕的;第二是免费版,最多只能连续共享15分钟,不然就要升高级版。值得一提的是,这个软件也有几点比较好,一是可以让任何的设备成为播放器或者被播放的源,二是可以自选共享的应用,三是可以自主调整共享给其他机器的音量,四是支持电脑共享音频给手机。整体相当于阉割了屏幕共享的屏幕部分的屏幕共享软件。

⭐snapcast

开源软件,但只支持linux系统作为server端(播放源),不支持安卓to安卓,也不支持winodwsTo安卓这个后面再说。

⭐⭐AudioRelay

可以直接从谷歌应用商店下,和soundseeder属于竞品软件。它有两个突出缺陷,首先反复调整后延迟还是仅仅从90ms降低到平均50ms左右,不可饶恕;其次断断续续的情况很严重,比soundseeder严重,可能是因为它有降低延迟的技术。然后列一下它的优点,一是连续播放时间高达一个小时,二是支持电脑和手机以及手机与手机的同步,三是支持查看延迟的具体情况曲线,四是支持设置共享的音频码率(但是只能调整24网络通话和128音乐电影这两种,其他都要开高级版),五是支持两种降低延迟的技术,虽然对我来说用处不大因为我要求太高了。
在这里插入图片描述

⭐音乐软件的“一起听”功能

尝试了QQ音乐的,延迟超过100ms,相当明显。

⭐荣耀或者华为的party功能

已下架,在音乐里,但只有老款没升级的才有这个功能,我的已经没了。听说鸿蒙next系统会将这个功能加上。

⭐近期的新软件:VividStereo

主要就是一些up主自己公开的,我试了下手机直接连手机不行,但是up主说可以。你们要是有兴趣就去看下,开源链接:https://github.com/Teacher-Cai/VividStereo-Android。考虑到屏幕共享+降音频码率都卡,我估摸着这个估计也不行。

脑洞:用距离打败延迟

通过以上尝试,我差不多也已经放弃了无线+低延迟的安卓to安卓的方案了,因为我的网速确实做不到那么低的延迟。

于是我换了思路,考虑声音的传播速度只有340m/s,延迟区区50ms,1000ms=1s,一番换算不难得到,只要我把两个手机相隔17m,我就可以得到无延迟的声音信号啦!

然后我朋友说还得考虑多普勒效应(意思是相对运动速度会影响音调的高低),我:?。。。
我虽然也不会怎么运动,但我再考虑到17m这声音强度也肯定扰民了,不得不放弃了这一脑洞。

电脑to安卓

这种就简单多了,唯一缺点就是需要打开电脑。电脑to安卓意思是用一台电脑放音乐,其他设备连接这台电脑,但把电脑的声音关了。

这种连接方式八成是没延迟的,原因是它就算有延迟,手机和手机(或者平板)都是接收方,延迟相近,相互之间是确实没有delay的。同理其实前面说的BeatSync很可能也没有延迟,因为音源实质上不是自己的设备,是人家的服务器。

⭐⭐⭐⭐snapcast

开源链接是https://github.com/badaix/snapcast,开源的比较安心,而且各种版本都有,支持debian运行说明就支持树莓派和香橙派之类的了,这点很好。并且也提供了安卓客户端(client),这也很好。唯一不好的点就是不支持安卓手机、Winodows电脑作为server。因为使用比较复杂还得配置server,我虽然下了但我暂时没用它。后面可能专门出一篇博客讲怎么配置它。

Soundit

不开源,但下载很简单,在官网https://soundit.app/,并且只支持Windows下载,不支持安卓下载。你可以下载并参考官网教程使用,手机或者其他设备只需要浏览器输入网址并允许连接音频就能用了,设备数量和连接时长都没有限制,我用着也不卡。刚连上去如果有延迟就刷新一下网页就好了。(如果官网教程你看不懂可以看看知乎这篇教程分享一个多设备音频共享软件:Soundit)
为了防止知乎这位朋友旧的博客失效,我进行一下不抹掉用户名的搬运,他没有写不能直接搬运,如侵权请联系删除。
在这里插入图片描述
我目前就是采用了Soundit这种方案,因为简单且能满足我的需要。评论区有说这种共享方式音质很差,我没有这样的感觉。并且,我寻思着音源不差+电脑芯片本身就不差+网络不差+Soundit没有额外削减原本的码率,也不太可能导致音质变差。


补充

我使用过程中发现自己的键盘无法正常打字了,一直在按某个按键,这很显然是异常的,然后我就怀疑soundit有问题。拿virscan扫了下确实有报异常(不排除误报的可能性):

在这里插入图片描述
考虑到安全性还是不敢用了。

这个软件卸载必须要打开文件所在位置然后双击Uninstall卸载,不能直接卸载,比较繁琐。

在这里插入图片描述

更不敢用了。

等待微软更新

听说Win11会上线一个共享音频的功能:
在这里插入图片描述

AudioShare

这是开源软件,中文README,star比较少,还报毒,也不打算用了:
https://github.com/HeHang0/AudioShare
在这里插入图片描述
在这里插入图片描述

⭐⭐⭐⭐⭐sonobus

开源软件,源代码:https://github.com/sonosaurus/sonobus

官网地址:https://sonobus.net/

扫了exe安装程序和apk都没报毒,apk安装的时候甚至连手机都没报没备案,说明它真的甚至备案了。

先设置成简体中文:
在这里插入图片描述

配置网上教程很多,这里参考一个博主:https://www.bilibili.com/opus/894196711996522529

在这里插入图片描述

连接方式参考我的就行:

  1. 从官网下载apk和exe并自行安装

  2. 安装虚拟声卡:https://vb-audio.com/Cable/(这个步骤是为了将电脑的输出作为输入,参考https://linux.do/t/topic/391682)(装完需要重启电脑)
    在这里插入图片描述

  3. 电脑打开软件

  4. 设置输入为虚拟声卡
    在这里插入图片描述

  5. 再设置你自己的音乐播放软件的音频设备为CABLE Input即可,例如QQ音乐:
    在这里插入图片描述
    如果你的音频输出软件不能配置音频设备,你可以直接win+s搜索“声音”然后设置cable input为默认设备,然后重新打开发出声音的软件即可,具体参考这个:在游戏中播放音乐或将电脑声音输出到麦克风——使用VB-Cable。

  6. (这一步如果不懂,就直接创建私人群组)电脑点连接/Connect,右上角三个点”Connect to Raw Address”/“连接原始地址”,可以看到电脑的端口

  7. (这一步如果不懂,就直接创建私人群组)手机点连接/Connect,右上角三个点”Connect to Raw Address”/“连接原始地址”,输入电脑的IP地址(局域网地址)和端口。参考https://sonobus.net/sonobus_userguide.html#Direct-Connection

  8. 即可听到声音。

这种方案最大的优点就是音质极其可控,也很安全。但是有些段落有点卡卡的,网络状况不稳定可以稍微降降音质。

后话

总之,目前我拥有了两个同步的无损播放器,相当于一组音响,效果已经不错了。

说实话安卓to安卓的无线方案,要不是我也确定了自己写不出来(我放的HQ音质,音频大小普遍在10MB左右),网速问题我也克服不了,我就调研完自己写了。不过现在这样也行,勉强也是能用的,虽然这和买个音响效果其实是一样的,不过其实这个共享功能的探索对没有扬声器的台式机也是很有帮助,相信还有其他作用。

我写这篇博客的主要目的,也是不希望江山代有才人出,各领韭菜数十年。一个小功能,硬是各种收费,或者重复的轮子一堆,还往里面加病毒,也是离谱。

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/155246385。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/976660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins的基本使用

一、下载安装与首次启动 1.确保jdk版本大于112.下载Jenkins官网地址:https://www.jenkins.io/download/ 3.执行命令:java -jar jenkins.war 4.生成的密码复制下来 5.打开http://127.0.0.1:8080/login?from=%2F,将…

huggingface 仓库申请权限失败 (换 modelscope)

huggingface 有些仓库需要申请权限才能下载和查看,例如:https://huggingface.co/facebook/sam3 这种仓库填中国大陆的信息基本一定会失败,失败了这个账号就可能永久不能再申请该仓库权限了。 一种方法是申请时虚拟一…

2016-PTA初赛-L3-1 天梯地图(dijkstra模板)

dijkstra思路dijkstra模板题,不需要小根堆优化,这题的第二个样例:路径一样则合并输出,怎么判断路径一样?会想到C++的vector对==进行了重写(即每个对应位置的元素一样)。AcCode: #include<iostream> #inc…

KEYDIY Toyota 8A (BA) 4A All-Lost Adapter Cable: Simplify Key Replacement for Mechanics Car Owners

When All Keys Are Lost: The Toyota Key Programming Challenge For European and American automotive repair professionals and car owners, the scenario of losing all keys to a Toyota can be frustrating and…

PyCodeObject

2025.11.26 1.python是用C语言写成的,根据名字空间特性,以下代码经过python编译器编译后,一共得到()个PyCodeObject对象class A:pass def Fun():pass a = A() Fun()Python编译器在编译代码时,每个独立的作用域(…

python拷贝

2025.11.26 1.当我们使用下面的操作的时候,会产生浅拷贝的效果:使用切片 [:] 操作使用工厂函数(如list/dir/set)使用copy模块中的copy()函数 2.拷贝的特殊情况 对于非容器类型(如数字、字符串、和其他’原子’类…

KEYDIY KD ZB02-4 Universal Smart Remote Key 3+1 Buttons for BMW - 5pcs/lot

Solving BMW Smart Key Woes: The KEYDIY KD ZB02-4 Universal Smart Remote Key Problem: The High Cost of BMW Smart Key Replacements For European and American BMW owners, a lost or malfunctioning smart key…

Universal 3-Button Smart Remote Key for BMW - KEYDIY KD ZB02-3 (5pcs/lot)

Problem: The Frustration of BMW Smart Key Replacements For European and American BMW owners and mechanics, finding a reliable, affordable smart remote key can feel like a challenge. Dealerships often c…

列表,元组,字典,集合笔记

列表,元组,字典,集合笔记列表 定义:列表是处理一组有序项目的数据结构 格式:列表名 = [元素1,元素2,元素3,元素4....] 一个列表中的数据类型可以各不相同 列表相关操作 添加 append  整体添加 extend  分散…

sam3 (3)匹配mask - MKT

sam3 (3)匹配mask 1 -1平移视角差异 1-2对应的还有大小 1-3 旋转 2 残缺部分不全

Educational Codeforces Round 184 (Div. 2)

A. Alice and Bob根据题目要求,Bob要想得分最大化就是要使Bob能够得分的球尽可能得多。 通过 lower_bound 函数和 upper_bound(这是因为题目中说平局也就是数组中的元素与a一样大是使Alice得分,我们要避免与a相同)…

KEYDIY KD NB08-4 3+1 Button Universal Flip Remote Key for Volkswagen – 5pcs/lot

Solving Volkswagen Remote Key Woes: The KEYDIY KD NB08-4 Universal Flip Remote Key For European and American Volkswagen owners and automotive repair professionals, the struggle to find reliable, afford…

C++学习日志——蓝桥杯课程总结_基础篇/2025.11.26

C++课程学习记录——递归递归 概念: 函数直接或间接调用自身的过程 两个关键要素 1.基本情况(递归终止条件):递归函数中的一个条件,当满足该条件时递归终止,避免无限递归。[直接解决极小规模问题的方法] 2.递归表…

KEYDIY KD NB104 4-Button Universal Remote Key (5pcs) – Reliable Replacement for Euro/American Cars

The Remote Key Problem: Costly Delays and Compatibility Headaches For European and American automotive repair shops, nothing derails efficiency faster than tracking down OEM remote keys that cost custo…

在 linux 操作系统中,使用 vim 打开一个文本文件时,出现中文乱码的原因和解决方法

在 linux 操作系统中,使用 vim 打开一个文本文件时,出现中文乱码的原因和解决方法问题场景: 例如:使用 vim 打开一个文件后,中文是乱码乱码原因: 文件的编码格式 和 vim 用于解析文件内容的编码格式不一致,导致…

【实验报告】sglang,vllm,transformers 在强制串行推理场景下的表现

【实验报告】sglang,vllm,transformers 在强制串行推理场景下的表现我们现在考虑若干强制串行的需求。也就是说,必须推理完这个之后再推理下一个。调包范围是 transformers,vllm,sglang投机采样/不使用投机采样。 投…

实验3类和对象

实验任务1 源代码如下: button.hpp#pragma once#include <iostream> #include <string>class Button { public:Button(const std::string &label_);const std::string& get_label() const;void c…

what is A

ai. "Amor vincit omnia" ὁ θεὸς ἀγαπᾷ τὸν κόσμοv from ancient Greek to Roman, even in the ancient Chinese. not lo.

夺命雷公狗—好用的截图工具分享

夺命雷公狗—好用的截图工具分享今天在工作 由于环境没有网络 但是又非常想截图~ ~! 无意间发现了一款非常不错的截图工具 pixpin ~ ~! 真心好用 暴赞 ! 而且还可以截长图,下载地址我就不分享了~ ~! 文档地址:…

Windows给文件夹别名

Windows 和 macOS 采用了不同的技术来实现多语言显示,思路与 macOS 的 .localized 机制非常相似。macOS 的方式:.localized 文件夹 正如您所说,macOS 使用一种非常直观的文件系统层面的本地化方案:你创建一个名为 …