Lorenzooone/cc3dsfs
GitHub: Lorenzooone/cc3dsfs
一个用 C++ 编写的跨平台低延迟采集卡显示工具,专为 3DS/DS 系列掌机采集卡提供全屏输出和多屏幕布局管理。
Stars: 97 | Forks: 10
# cc3dsfs
cc3dsfs 是一个多平台的采集与显示程序,使用 C++ 编写,专为 [3dscapture的](https://3dscapture.com/) N3DSXL、3DS 和 DS 采集卡设计。
其主要目标是通过全屏模式,提供在电视上使用采集卡的能力。
程序还支持 IS Nitro Emulator(较新的版本)、IS Nitro Capture 和 IS TWL Capture。不过结果可能会有所不同(并且根据所使用的线材,视频延迟可能会明显增加)。
此外,还支持 Optimize Old 3DS/2DS 采集卡以及 Optimize New 3DS/2DS 采集卡。
支持 Partner CTR Capture 设备。
最后,还支持一款非常老旧的 Chameleon USB FX2 板,它与 Nisetro DS(i) 采集卡配合使用。
## 功能
- 注重性能的设计,音频和视频均具有低延迟(经测量,在 120hz 显示器上波动在 1 到 2 帧之间)。
- 可选择将屏幕拆分到单独的窗口中,以便分别进行操作。
- 让你的游戏以全屏模式运行。如果你拥有多台显示器,甚至可以为每个窗口单独分配一个显示器。
- 针对屏幕内置了许多裁剪选项。
- 许多其他设置,已在[控制](#Controls)中详细说明。
- 为了方便使用,[Releases](https://github.com/Lorenzooone/cc3dsfs/releases/latest) 页面提供了预编译的可执行文件。
- 提供各种命令行参数,用于自定义软件的运行方式。使用 -h 或 --help 作为参数即可显示帮助信息。
_注意:在 3DS、DS、GBA、GBC 和 GB 游戏上,默认以缩放分辨率模式启动。在启动这些游戏时按住 START 或 SELECT 键,将以原始分辨率模式启动。_
_注意:请确保 3DS 的音频未设置为环绕声。_
## 依赖项
cc3dsfs 有三个构建依赖项:CMake、g++ 和 git。
请确保已安装所有依赖项。
在 MacOS 上,可以使用 [Homebrew](https://brew.sh/) 来安装 CMake 和 git。在编译时,应该会自动弹出一个提示来安装 g++。
cc3dsfs 有四个库依赖项:[FTDI 的 D3XX 驱动](https://ftdichip.com/drivers/d3xx-drivers/)(在 Windows 上)、[FTDI 的 D2XX 驱动](https://ftdichip.com/drivers/d2xx-drivers/)(在 Windows 上)、[libusb](https://libusb.info/) 和 [SFML](https://www.sfml-dev.org/)。
在构建过程中,所有这些库都应该会通过 CMake 自动下载。
希望编译此程序的 Linux 用户,还需要安装 SFML 的依赖项。不同的发行版需要略有不同的操作过程。
下面是基于 Debian 的发行版的命令,其中也列出了所需的库。
```
sudo apt update
sudo apt install \
g++ \
git \
cmake \
libxrandr-dev \
libxcursor-dev \
libudev-dev \
libflac-dev \
libvorbis-dev \
libgl1-mesa-dev \
libegl1-mesa-dev \
libdrm-dev \
libgbm-dev \
libfreetype-dev \
libharfbuzz-dev \
xorg-dev
```
此外,在为 Raspberry Pi 编译时,需要安装 gpiod 和 libgpiod-dev。
在 Windows 上,您可能需要安装 Visual C++ Redistributable 库集。您可以在这里获取:[微软官方 VC Redist 链接](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version)。
## 编译
要编译此程序,假设系统上已经安装了 CMake、git 和 g++,则需要运行以下命令:
```
cmake -B build -DCMAKE_BUILD_TYPE=Release ; cmake --build build --config Release
```
该过程将下载 FTD3XX、FTD2XX、libusb 和 SFML,因此在首次执行该命令时可能需要一些时间。随后的运行速度应该会快得多。
在 MacOS 上,系统可能还会提示您先安装 Apple Command Line Developer Tools。
在 Raspberry Pi 上编译时,为了启用 GPIO,请使用:
```
cmake -B build -DCMAKE_BUILD_TYPE=Release -DRASPBERRY_PI_COMPILATION=TRUE ; cmake --build build --config Release
```
### Docker 编译
或者,您可以通过运行以下命令,使用 Docker 为其不同的架构编译 Linux 版本:`docker run --rm -it -v ${PWD}:/home/builder/cc3dsfs lorenzooone/cc3dsfs:`
可用的构建器包括:builder32、builder64、builderarm32、builderarm64、builderriscv64 和 builderandroid(测试版)。
## 控制
该软件具有一个 GUI,其中公开了所有可用的设置。此外还有各种可用的键盘快捷键,可以更快地访问这些选项。
大多数设置都在[键盘快捷键](#Keyboard-shortcuts)中进行了解释。
### 键盘控制
- __回车键__:用于在 GUI 未显示时将其打开,以及确认选项的选择。长按 10 秒会将应用程序重置为默认设置。
- __方向键__:用于在 GUI 中更改选中的选项。
### 鼠标控制
- __右键__:用于在 GUI 未显示时将其打开。长按 10 秒会将应用程序重置为默认设置。
- __左键__:用于确认选项的选择。
### 摇杆/手柄控制
- __Option/Share 按钮__:用于在 GUI 未显示时将其打开。
- __A/B/X/Y 按钮__:用于确认选项的选择。长按 B 键(在 PS5 手柄上为 X 键)10 秒会将应用程序重置为默认设置。
- __方向键/摇杆__:用于在 GUI 中更改选中的选项。
_注意:目前仅使用 PS5 手柄进行了测试。_
### 键盘快捷键
- __O 键__:打开/关闭与 3DS/DS 的连接。
- __F 键__:开启/关闭全屏模式。仅保证在主显示器上有效。在某些特定设置下,它也适用于多显示器。
- __S 键__:在拆分模式和合并模式之间切换。在拆分模式下,每个屏幕都有其独立的窗口。在合并模式下,它们被合并为一个窗口。
- __C 键__:循环切换聚焦窗口的下一个裁剪模式。对于 3DS,目前支持的裁剪模式有:3DS、16:10 DS、缩放 DS、原生 DS、缩放 GBA、原生 GBA、缩放 GB、原生 GB、缩放 SNES、原生 SNES 和原生 NES。对于 DS,目前支持的裁剪模式有:DS、上部 GBA 和下部 GBA。此外还有针对特定游戏的裁剪模式,可以通过视频设置启用。
- __-/0 键__:以 0.5x 为步长,减小/增大非全屏聚焦窗口的缩放比例。最小为 1.0x。最大为 45.0x。
- __Y/U 键__:在合并全屏模式下,增大上/下屏幕的尺寸。对应于_屏幕比例_视频设置。
- __Z/X 键__:以 0.1 为步长,减小/增大菜单缩放系数。最小为 0.3。最大为 10.0。
- __T 键__:顺时针移动下屏幕在合并模式窗口内的相对位置。对应于_屏幕相对位置_视频设置。
- __V 键__:为聚焦窗口开启/关闭 VSync。VSync 可以防止屏幕撕裂。然而,在低刷新率(60 hz)下,它可能会显著增加图像延迟。
- __A 键__:为聚焦窗口开启/关闭异步模式。关闭此选项可确保所有可用窗口显示相同的帧。如果您遇到帧率问题,开启或关闭此设置可能会有所帮助。
- __B 键__:为聚焦窗口开启/关闭模糊效果。这仅在 1.5x 或更大的缩放比例下才会明显。
- __6 键__:在合并模式下,在 0、1/2 最大值和最大值之间更改较小屏幕相对于较大屏幕的位置。可以通过_偏移设置_或_屏幕偏移_视频设置进行访问。
- __7 键__:在合并全屏模式下,在 0、1/2 最大值和最大值之间更改与上屏幕的距离。可以通过_偏移设置_视频设置进行访问。
- __4 键__:在全屏模式下,在 0、1/2 最大值和最大值之间更改距边界的 X 轴距离。可以通过_偏移设置_视频设置进行访问。
- __5 键__:在全屏模式下,在 0、1/2 最大值和最大值之间更改距边界的 Y 轴距离。可以通过_偏移设置_视频设置进行访问。
- __8/9 键__:将聚焦窗口的屏幕逆时针/顺时针旋转 90 度。可以通过_旋转设置_视频设置进行访问。
- __H/J 键__:将聚焦窗口的上屏幕逆时针/顺时针旋转 90 度。可以通过_旋转设置_或_屏幕旋转_视频设置进行访问。
- __K/L 键__:将聚焦窗口的下屏幕逆时针/顺时针旋转 90 度。可以通过_旋转设置_或_屏幕旋转_视频设置进行访问。
- __R 键__:开启/关闭额外填充。它可用于适应带有圆角的窗口。
- __2/3 键__:循环切换上/下屏幕可用的像素宽高比 (PAR)。对 VC 游戏和 Chrono Trigger DS 非常有用。
- __M 键__:开启/关闭音频静音。
- __,/. 键__:以 5 个单位为步长减小/增大音量。最小为 0。最大为 200。
- __N 键__:重启音频输出。如果在更改操作系统设置后音频停止工作,此功能非常有用。
- __F1 - F4 键__:分别从布局 1 到 4 加载。要访问更多配置文件,必须使用 GUI。
- __F5 - F8 键__:分别保存到布局 1 到 4。要访问更多配置文件,必须使用 GUI。
- __Esc 键__:正常退出程序。
_注意:音量独立于主机物理滑块设置的实际音量级别。_
## 配置文件/布局
首次启动程序时,将显示指示加载 cc3dsfs.cfg 文件失败的消息,并且在尝试从任何给定的布局文件加载(如果之前未保存过)时也会出现同样的情况。这是正常的。必须先由程序创建这些文件,然后才能从中加载。程序在成功关闭时,会将其当前配置保存到 cc3dsfs.cfg 文件中(如果该文件不存在,则创建该文件),并在每次启动时从中加载。
当前配置可以保存到各种额外的配置文件中,如果指定的文件不存在,则会创建该文件。加载布局后更改设置不会自动覆盖其文件。要使更改永久生效,需要再次保存配置文件。
可以通过更改文件中的 __name__ 字段来更改配置文件的名称。
在 Linux 和 MacOS 上,默认情况下可以在 "${HOME}/.config/cc3dsfs" 文件夹中找到配置文件。或者是 "/home//.config/cc3dsfs"。
在 Windows 上,配置文件可以在程序运行目录下的 ".config/cc3dsfs" 文件夹中找到。
可以使用 CC3DSFS\_CFG\_DIR 环境变量为 cc3dsfs 指定不同的目标文件夹来存储其数据。
## 注意事项
- 在 Linux 上,您可能需要包含 udev USB 访问规则。您可以使用代码库的 usb\_rules 目录中提供的 .rules 文件,或者定义您自己的规则。为了方便起见,发布版中附带了一个名为 install\_usb\_rules.sh 的脚本来执行此操作。它可能需要提升的权限才能正常执行。如果未安装规则,您可能会遇到权限错误。
- 启动时,音频可能不稳定。如果给它足够的时间,它应该会自行修复。
- 如果一开始与 3DS/DS 的连接失败,请重新连接 3DS/DS,然后再试一次。如果还是不行,请尝试重启程序。如果依然无效,请尝试重启计算机。
- USB Hub 可能是导致连接问题的原因。如果您遇到问题,请尝试在没有连接任何其他设备的情况下,检查 3DS/DS 是否能正常连接。
- 当前使用的字体:OFL Sorts Mill Goudy TT
- 启用 Slow Poll 可以略微提升软件的 FPS,代价是帧延迟极其轻微地降低,并且软件对按键的反应时间变慢。默认情况下禁用(因为当 FPS 高于采集卡的 FPS 时,不建议启用)。
- 在 MacOS 上,您可能会收到 Apple 无法检查恶意软件或开发人员未知的提示。若要忽略此提示继续打开程序,请查阅适用于您当前 MacOS 版本的[苹果官方“如何打开未知开发者应用程序”指南](https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unknown-developer-mh40616/mac)。
- 某些设备(包括运行 MacOS 15 或更高版本的 Apple 硬件)在以 Nintendo DS/3DS 主机的刷新率显示图像时可能会遇到问题。为了解决此问题,我们提供了设置固定输出帧率的选项。您可以在 _Video Settings_ -> _Output Framerate Settings_ 下找到它们。在使用此固定输出帧率时,建议开启 VSync 以避免画面瑕疵。为了获得最佳效果,请确保固定帧率是 60 的倍数,并且固定帧率与显示器的刷新率相匹配。
- 某些电视/显示器为了实现视频/唇形同步,可能会增加一些音频延迟。如果您在使用本软件时感觉音频延迟过大,请尝试在电视/显示器设置中检查是否可以减少增加的延迟。该设置的一个常见名称是“Lip Sync”或类似字眼。
- MacOS 通常不允许运行同一应用程序的多个实例。如果您想在 MacOS 上运行多个 cc3dsfs 实例,请打开 cc3fs 所在文件夹中的终端,然后输入 `open -n cc3dsfs.app`。
- 要恢复默认设置,除了[控制](#Controls)中显示的选项外,您还可以在 _Extra Settings_ 中找到 _Reset Settings_ 选项。
- 有多种采集卡使用了相同的 EZ-USB FX2LP 板,从而产生了冲突。这些是 Optimize Old 3DS/2DS 采集卡和 Nisetro DS(i) 采集卡。这意味着当用户连接使用 EZ-USB FX2LP 板的设备时,他们需要在可能的卡中选择一款采集卡。为了避免这个额外的步骤,用户可以禁用对他们不打算使用的冲突采集卡的扫描。执行此操作的设置位于 _Extra Settings_ -> _USB Conflict Resolution_ 下。
### Loopy 采集卡
- 在 Windows 上使用全新的 2024 款 Loopy DS 采集卡时,默认驱动程序 (FTD2XX) 会增加一帧延迟。为了消除延迟,请考虑将驱动程序切换为 WinUSB。要更改驱动程序,请下载一个用于安装驱动程序的软件,例如 [Zadig](https://zadig.akeo.ie/),选择有问题的设备并选择 WinUSB。然后安装驱动程序并等待其完成。现在应用程序将使用 WinUSB,具有更好的延迟(状态菜单中显示的序列号中,原来的 d 将被替换为 l)。
### Optimize 采集卡
- 要在 cc3dsfs 中正常使用 Optimize 采集卡,需要序列号密钥。这可以通过 _Optimize 3DS Settings_ 下的 _Add New Serial Key_ 选项进行添加。您可以在文本框中使用 CTRL+V 粘贴序列号密钥,或者手动输入。要获取密钥,请获取您的设备 ID(可以从 _Optimize 3DS Settings_ 菜单中复制),并在[官方网站](https://optimize.ath.cx/productkey_en.html)上输入。建议(但非必须)使用键盘进行此操作。软件将从 Optimize New 3DS 采集卡 (v1) 的 EEPROM 中读取序列号密钥。
- 密钥保存在 cc3dsfs 配置文件夹内的 keys 文件夹中。
- 在 Windows 上使用 Optimize Old 3DS 采集卡或 Nisetro DS(i) 采集卡时,请确保已安装 Cypress USB 驱动程序或 Optimize Old 3DS 驱动程序。发布版附带了一个包含用于安装所需驱动程序的 .bat 文件的文件夹。
- 在 Windows 上使用 Optimize New 3DS 采集卡时,请确保已安装 Optimize New 3DS 驱动程序。发布版附带了一个包含用于安装所需驱动程序的 .bat 文件的文件夹。
- 根据 2DS 硬件的版本(从 2014 年末开始的 2DS),Optimize Old 2DS 采集卡可能需要使用特殊(较旧)的固件。可以在首次连接采集卡时进行选择。RGB888 模式正常工作。RGB565 没有声音。对于这些 2DS 采集卡,首次连接时还必须进行初始同步。为此,在连接采集卡后,转到 Optimize 3DS Settings -> Synch Settings,并更改参数直到显示图像。
- Windows 11 可能会以无法“验证数字签名”为由阻止 Optimize Old/New 3DS/2DS 采集卡的驱动程序。为了让设备再次与 cc3dsfs 配合使用,可以安装 Cypress USB 驱动程序。发布版附带了一个包含用于安装所需驱动程序的 .bat 文件的文件夹。
- 在 _Optimize 3DS Settings_ 菜单中,有一个选项可以将 Optimize New 3DS (v1) 采集卡降级到 v2(通过移除 EEPROM 配置)。这使得采集卡能够兼容某些软件的最新版本。然而,这样做会导致:1) 采集卡不再兼容需要特定 USB ID 的旧版软件;2) 无法再从 EEPROM 中读取采集卡的序列号密钥。通常情况下,不建议降级到 v2,尽管我们提供了此选项。
### IS Nitro/TWL 设备
- 在 Windows 上使用 IS Nitro Emulator、IS Nitro Capture 或 IS TWL Capture 设备时,cc3dsfs 兼容官方驱动程序和 WinUSB,如果您无法获取官方驱动程序,后者将非常有用。要安装并使用 WinUSB,请插入您的设备,下载一个用于安装驱动程序的软件,例如 [Zadig](https://zadig.akeo.ie/),选择有问题的设备并选择 WinUSB。然后安装驱动程序并等待其完成。现在这些设备应该可以在此应用程序中正常工作了。
### Partner CTR 捕获
- 在 Windows 上使用 Partner CTR Capture 设备时,cc3dsfs 兼容官方驱动程序和 libusb-win32(或替代方案),如果您无法获取官方驱动程序,后者将非常有用。要安装并使用 libusb-win32(或替代方案),请插入您的设备,下载一个用于安装驱动程序的软件,例如 [Zadig](https://zadig.akeo.ie/),选择有问题的设备并选择 libusb-win32(或替代方案)。然后安装驱动程序并等待其完成。现在这些设备应该可以在此应用程序中正常工作了。
标签:3DS/DS, Bash脚本, C++, 数据擦除, 桌面应用, 游戏外设, 请求拦截, 采集卡, 音视频采集