3 步把手机声音转发到电脑:Android 音频转发工具 sndcpy 完整教程
【免费下载链接】sndcpyAndroid audio forwarding PoC (scrcpy, but for audio)项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy
sndcpy 是一个开源的 Android 音频转发工具:它把 Android 10 及以上手机正在播放的声音——音乐、会议录音、游戏音效——通过 USB 或 Wi-Fi 实时转发到电脑,再由 VLC 播放。无需 root。适合手游直播需要混入游戏声音、要在电脑端整理会议录音、或想用电脑音箱外放手机音频的人。
sndcpy 解决什么问题
手机声音要用到电脑上,常见做法是戴耳机听,或者导出文件再导入,来回折腾:
- 手游直播:游戏音效走不进摄像头麦克风,转发后 OBS 可以把手机声音和麦克风混流,观众能听到完整的游戏音效
- 会议录音整理:手机回放录音,电脑音箱同步监听,同时用电脑上的录音软件录一份便于后期编辑
- 音频素材分享:手机里的音频直接在电脑音箱或剪辑软件中出声,省去反复导出、导入文件
一句话概括:sndcpy 把手机当前播放的声音实时复制到电脑上,用 VLC 放出来,不改变你使用手机的方式。
工作原理:一段话讲清楚
手机端利用系统 MediaProjection 音频捕获权限拿到正在播放的声音,捕获服务按 48000 Hz、16 位、立体声的 PCM 格式读取,写入手机上一个名为 sndcpy 的本地 socket;电脑端脚本用adb forward把本机 28200 端口映射到这个 socket,最后 VLC 以原始 PCM 格式(rawaud)从 TCP 流里读取并播放。数据流向就是:Android 应用 → adb 通道 → VLC。
| 项目 | 取值 | 说明 |
|---|---|---|
| 音频参数 | 48000 Hz / 16 位 / 立体声 | 原始 PCM,无压缩 |
| 转发端口 | 28200 | 可用环境变量 SNDCPY_PORT 覆盖 |
| 播放器 | VLC | 以--demux rawaud --network-caching=0参数启动 |
关键源码在仓库中的位置:
- 权限申请与应用启动:
app/src/main/java/com/rom1v/sndcpy/MainActivity.java - 音频捕获与 socket 写入:
app/src/main/java/com/rom1v/sndcpy/RecordService.java - 电脑端脚本:
sndcpy(Linux/macOS)与sndcpy.bat(Windows)
安装与首次运行
开始前的三个条件:一台 Android 10 及以上的设备、一台已装 VLC 的电脑、一条能传数据的数据线。
手机 USB 调试怎么开
- 设置 → 关于手机 → 连续点击"版本号"7 次
- 返回设置,打开"开发者选项"
- 打开"USB 调试",插上数据线;若手机弹出电脑授权框,点击允许
获取程序并启动
git clone https://gitcode.com/gh_mirrors/sn/sndcpy cd sndcpy ./sndcpyWindows 用户直接双击sndcpy.bat即可(项目 release 页提供附带 adb 的 Windows 包,省去单独装 adb)。脚本会自动把应用安装到手机(已有旧版本会先卸载),授予 PROJECT_MEDIA 权限,然后启动录制服务。首次运行要装 APK,会稍慢一些。
手机授权后听到声音
启动后,手机弹出"是否允许录制音频"的对话框,点击允许。电脑上 VLC 会自动启动,前几秒可能报一次 "Connection refused",这是两端握手的正常现象,等待 2~3 秒声音就会出来。
注意:手机本身的声音会照常播放,音量可在手机和电脑两侧独立调节。停止传输,在终端按 Ctrl+C 即可;Windows 上直接拔掉数据线,或点手机通知栏里的"停止"也行。
进阶用法
📶 无线连接:Wi-Fi 连接时 IP 怎么填
- 先用数据线连好,执行
adb tcpip 5555 - 拔掉数据线,在电脑端执行
adb connect 192.168.1.100:5555,把 192.168.1.100 换成手机的实际 IP(在手机"设置 → Wi-Fi → 已连接网络详情"里查),两边必须在同一 Wi-Fi 下 - 再执行
./sndcpy开始转发
🔌 多台设备连接:怎么指定设备
先用adb devices列出每台设备的序列号,然后把序列号作为参数传入:
./sndcpy ABC12345 # 指定设备序列号 ./sndcpy --vlc-args "--audio-quality 0" # 给 VLC 传额外参数音质参数范围 0~2,数值越小音质越高,可按延迟表现取舍。
停止与卸载
- 停止转发:Ctrl+C(Linux/macOS);Windows 上拔线或点手机通知栏的"停止"
- 从手机卸载应用:
adb uninstall com.rom1v.sndcpy没声音时的排查方法
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| VLC 报 "Connection refused" | sndcpy 与 VLC 的正常握手 | 等 2~3 秒,会自动恢复,无需处理 |
| 连接成功但电脑没声音 | 音量或输出设备 | 调大 VLC 音量;检查电脑默认播放设备;确认音箱或耳机正常 |
| 声音延迟明显 | 传输抖动导致 VLC 自动加大缓冲 | 换能传数据的数据线;关闭手机后台应用;重启 sndcpy |
| 手机不弹权限请求 | USB 调试状态异常或有旧授权记录 | 关闭再打开 USB 调试;拔掉数据线重插;此前授权过的,删除授权记录后重试 |
如果终端出现pts_delay increased一类的报错,说明 VLC 因抖动自动提高了缓冲,直接重启即可。
⚠️ 还有限制要心里有数:sndcpy 只能转发允许被捕获的应用的音频。按 Android 的捕获策略,target Android 9 及以下的应用默认不允许捕获音频,target Android 10 及以上的应用默认允许,所以个别应用(尤其旧版本)转发不出来,升级该应用一般能解决。另外这个项目定位为概念验证(PoC),延迟表现没有深度优化;如果你要的是"投屏 + 声音",scrcpy 2.0 之后的版本已原生支持音频转发,可以直接用。
接下来可以做什么
- 在手机上开启 USB 调试,用数据线连好电脑
- 运行
./sndcpy(Windows 双击sndcpy.bat),在手机上点击允许录制音频 - 声音出来后,尝试无线方式:
adb tcpip 5555再adb connect <手机IP>:5555 - 想改代码的话,从
app/src/main/java/com/rom1v/sndcpy/RecordService.java读起 - 遇到异常,对照上一节的排查表逐项检查
【免费下载链接】sndcpyAndroid audio forwarding PoC (scrcpy, but for audio)项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考