其他
需要在本地音乐库上构建带人声分离、歌词同步和音准评分的…
适用于把本地音频/视频歌曲变成带伴奏分离、逐词歌词高亮和实时音准评分的 karaoke 体验。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
需要在本地音乐库上构建带人声分离、歌词同特定
解决思路
- 预构建二进制:从 GitHub Releases 页面下载对应平台最新 release,解压后直接运行 Nightingale。
- macOS 去除隔离:解压后执行 xattr -cr Nightingale.app。
- 源码构建前置:安装 Rust 1.85+(edition 2024);Linux 额外安装 libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev。
- 源码构建命令:git clone https://github.com/rzru/nightingale;cd nightingale;cargo build --release;./target/release/nightingale。
- Linux/macOS 发布打包:运行 scripts/make-release.sh。
- Windows 发布打包:运行 powershell -ExecutionPolicy Bypass -File scripts/make-release.ps1。
- 发布包输出:Linux/macOS 生成 .tar.gz,Windows 生成 .zip,可直接分发。
- 首次启动 bootstrap:等待应用自动下载并配置 ffmpeg、uv、Python 3.10 via uv、PyTorch + WhisperX + audio-separator 虚拟环境、UVR Karaoke ONNX 模型和 WhisperX large-v3 模型。
- 首次 bootstrap 耗时与进度:通常 2–10 分钟,应用内显示进度屏。
- 强制重新 bootstrap:运行 ./nightingale --setup。
- Bootstrap 完成标记:~/.nightingale/vendor/.ready。
- CLI 参数 --setup:强制重跑 first-launch bootstrap,重新下载 vendor deps。
- 导航移动:键盘 Arrow keys;手柄 D-pad 或 Left stick。
- 导航确认:键盘 Enter;手柄 A (South)。
- 导航返回:键盘 Escape;手柄 B (East) 或 Start。
- 导航切换面板:键盘 Tab。
- 导航搜索:输入文字过滤。
- 播放暂停/恢复:键盘 Space;手柄 Start。
- 播放退出到菜单:键盘 Escape;手柄 B (East)。
- 播放切换 guide vocals:键盘 G。
- 播放 guide volume 调高:键盘 +。
- 播放 guide volume 调低:键盘 -。
- 播放循环背景:键盘 T。
- 播放循环 video flavor:键盘 F。
- 播放切换麦克风:键盘 M。
- 播放下一麦克风:键盘 N。
- 播放切换全屏:键盘 F11。
- 主配置:编辑 ~/.nightingale/config.json 或使用应用内设置;字段包括 music_folder、separator、guide_vocal_volume、background_theme、video_flavor、default_profile。
- separator 配置:设为 uvr(默认,保留 backing vocals)或 demucs。
- background_theme 配置:设为 plasma、aurora、waves、nebula、starfield、video、source_video。
- video_flavor 配置:设为 nature、underwater、space、city、countryside。
- Profiles 配置:编辑 ~/.nightingale/profiles.json;profiles 数组每项含 name 和 scores;scores 以歌曲 blake3_hash_of_song 为键,值含 stars、score、played_at。
- Pixabay release API key:release 构建内嵌 API key。
- Pixabay 本地开发配置:在项目根目录创建 .env,写入 PIXABAY_API_KEY=$PIXABAY_API_KEY。
- Pixabay 发布脚本:make-release.sh 会自动 source .env。
- 数据存储 cache:~/.nightingale/cache/ 存每首歌的 stems、transcripts、lyrics,按 blake3 hash。
- 数据存储 config:~/.nightingale/config.json 存应用设置。
- 数据存储 profiles:~/.nightingale/profiles.json 存玩家档案和每首歌分数。
- 数据存储 videos:~/.nightingale/videos/ 存预下载 Pixabay 视频背景。
- 数据存储 sounds:~/.nightingale/sounds/ 存音效。
- 数据存储 vendor:~/.nightingale/vendor/ 存 ffmpeg、uv、python/、venv/、analyzer/ 和 .ready。
- 数据存储 models:~/.nightingale/models/ 存 torch/、huggingface/、audio_separator/ 模型。
- 缓存键规则:cache 以源文件的 blake3 hash 为键;仅在文件变化或手动失效时重新分析。
- 支持音频格式:.mp3、.flac、.ogg、.wav、.m4a、.aac、.wma。
- 支持视频格式:.mp4、.mkv、.avi、.webm、.mov、.m4v;视频会提取音轨、分离人声,原视频自动作为背景播放。
- PyTorch CUDA 加速:NVIDIA GPU 最快,约 2–5 分钟/歌。
- PyTorch MPS 加速:Apple Silicon macOS 自动使用;WhisperX alignment 回退 CPU。
- PyTorch CPU 加速:任何平台可用,约 10–20 分钟/歌。
- UVR Karaoke ONNX 加速:使用 ONNX Runtime,自动选 CUDA(NVIDIA)或 CoreML(Apple Silicon)。
- 处理流水线分离:音频/视频文件先经 UVR Karaoke (ONNX) 或 Demucs (PyTorch),生成 vocals.ogg + instrumental.ogg。
- 处理流水线歌词获取:通过 LRCLIB API 尝试获取同步歌词。
- 处理流水线转写:用 WhisperX large-v3 做转写和词级时间戳。
- 处理流水线播放与评分:Bevy App (Rust) 播放伴奏、同步逐词高亮、实时音高检测与评分、GPU shader/视频背景、按 profile 记分板。
- 添加新背景主题:在 Bevy plugin 中定义组件如 MyCustomBackground;用 commands.spawn 生成背景实体;定义 CustomBackgroundPlugin,在 app.add_systems(OnEnter(AppState::Playing), spawn_custom_background) 注册。
- 扩展配置反序列化:定义 NightingaleConfig,包含 music_folder、separator、guide_vocal_volume;使用 serde default 函数;定义 StemSeparator enum 为 uvr 或 demucs;从 ~/.nightingale/config.json 读取,serde_json::from_str 反序列化,失败则 default。
- 程序化触发重新分析:实现 invalidate_song_cache(song_hash),删除 ~/.nightingale/cache/<song_hash> 目录,存在则 fs::remove_dir_all。
- 计算歌曲 blake3 hash:用 blake3::Hasher、File::open、BufReader,循环 read 65536 字节并 hasher.update,最后 finalize().to_hex().to_string()。
- Profile 分数更新:定义 SongScore { stars, score, played_at } 和 Profile { name, scores };update_score 将 song_hash 对应 SongScore 插入 profile.scores,played_at 用 chrono::Utc::now().to_rfc3339()。
- Bootstrap 失败/卡住:运行 ./nightingale --setup;或 rm -rf ~/.nightingale/vendor 后重启 ./nightingale。
- 歌曲分析挂起或报错:运行 ~/.nightingale/vendor/venv/bin/python -c "import whisperx; print('ok')" 检查 analyzer venv;损坏则 ./nightingale --setup。
- macOS App is damaged:运行 xattr -cr Nightingale.app。
- GPU 未使用(NVIDIA):确保 CUDA drivers 安装且 nvidia-smi 显示 GPU。
- GPU 未使用(Apple Silicon):MPS 自动使用;WhisperX alignment 回退 CPU 是正常行为。
- GPU 未使用(PyTorch 安装):检查 ~/.nightingale/vendor/venv;如果 PyTorch 是 CPU-only build,安装 CUDA drivers 后重新 bootstrap。
- 缓存损坏/歌词错误:用 b3sum /path/to/song.mp3 找到 blake3 hash;删除 rm -rf ~/.nightingale/cache/<hash>;在 Nightingale 重新打开歌曲以重新分析。
- Linux 音频播放问题:确保 ALSA/PulseAudio/PipeWire 运行;安装依赖 sudo apt install libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev。
- 视频背景不加载:视频背景在 setup 时通过 Pixabay API 预下载;开发构建确保 .env 有有效 PIXABAY_API_KEY;release 构建缺失则运行 --setup 重新触发下载。
- 平台目标 Linux x86_64:x86_64-unknown-linux-gnu。
- 平台目标 Linux aarch64:aarch64-unknown-linux-gnu。
- 平台目标 macOS ARM:aarch64-apple-darwin。
- 平台目标 macOS Intel:x86_64-apple-darwin。
- 平台目标 Windows x86_64:x86_64-pc-windows-msvc。
- 交叉编译:rustup target add aarch64-unknown-linux-gnu;cargo build --release --target aarch64-unknown-linux-gnu。
- 许可证:项目使用 GPL-3.0-or-later,查看 LICENSE。
适用边界 · 注意事项
- 不适用于不想在本地自动下载 ffmpeg、Python、PyTorch 和多个 ML 模型(首次 2–10 分钟、占用磁盘)的场景。
- 不适用于无法访问 GitHub Releases、HuggingFace、LRCLIB、Pixabay API,或没有 NVIDIA CUDA/Apple MPS 且不能接受 CPU 约 10–20 分钟/首歌的环境。
- 不适用于必须保持非 GPL 或不能接受 GPL-3.0-or-later 许可证的项目。