找回密码
 -注册-
查看: 537|回复: 2
打印 上一主题 下一主题

关于moode,我问了Gemini二个问题

[复制链接]
跳转到指定楼层
1
发表于 2026-5-22 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 | 来自上海 来自 中国
本帖最后由 下江人 于 2026-5-22 15:46 编辑

Nas里有14t音乐文件,其中6t是ISO格式,moode8.24扫描的时间是12个小时,而moode10.2的扫描时间是5天20小时,为什么差别这么大?

面对 14TB 如此海量的音乐库(尤其是其中还包含了多达 6TB 的 SACD ISO 这种大体积高规格音频容器),从 12 小时暴涨到接近 6 天的扫描时间,确实会让人崩溃。
​这种断崖式的速度变化并不是你的 NAS 或网络变慢了,而是因为 Moode 从 8.x 升级到 10.x 后,底层的数据库架构和对音频标签(Metadata)的提取机制发生了本质上的改变。简单来说,新版 Moode 在扫描时“想得更多、做得更深”了,但这成了超大媒体库的性能灾难。
​主要原因有以下三点:
​1. Moode 10 引入了沉重的“全量标签缓存(Tag Cache)”
  • 在 Moode 8.2.4 中:系统主要依赖 MPD(Music Player Daemon)自带的轻量级数据库,扫描过程相对单纯,只读取最基础的音轨和基础标签。
  • 在 Moode 10.2 中:为了实现更华丽的 Web UI、全局快速搜索、更智能的艺术家/专辑墙美化,Moode 引入了自己独立的 SQLite 标签缓存数据库。在扫描时,后台的 PHP Worker 程序必须把 14TB 里每一首歌的内嵌标签(采样率、流派、甚至内嵌封面)全都串行读取出来,再一条条写入树莓派的本地数据库。对于树莓派的 CPU 和 MicroSD 卡的 I/O 写入性能来说,这个数据量引发了严重的吞吐量瓶颈。
​2. NAS 网络环境下解析 6TB SACD ISO 的“灾难级”开销
​这 6TB 的 ISO 文件(SACD 镜像)是导致时间拉长到 5 天多的主要“罪魁祸首”:
  • ​每个 SACD ISO 都是一个几 GB 大小的压缩包裹。Moode 10.2 升级了底层的 DSD/ISO 解析插件(随 MPD 0.24 核心升级),为了在 UI 里完美展示,它会尝试去深度解包并提取 ISO 内部每一首轨道的详细文本
  • ​当这些数吉字节(GB)的大文件存放在 NAS 上时,树莓派必须通过网络协议(SMB 或 NFS)频繁地把 ISO 文件的头部和尾部数据“拖”过来进行解析。网络延迟 + 串行单线程解析 + 几千个大 ISO 文件,网络交互的开销被放大了成千上万倍。
​3. MPD 0.24 容错机制与系统挂载策略的变化
​Moode 10 基于较新的树莓派系统(PiOS Trixie/Bookworm 核心),其网络挂载的安全性和稳定性策略更加严格。新版 MPD 0.24 在遇到部分标签编码错误(例如网络传输引发的轻微校验失败、或者早年间不规范的中文/日文歌曲 Tag)时,不再像老版本那样直接跳过,而是会进行更长时间的超时重试或纠错。在 14TB 的基数下,只要有 1% 的文件触发了这种深度探测或重试,总体时间就会呈指数级积压。
官方的填坑方案:
Moode 官方开发者其实也注意到了“超大曲库用户”或“大量 DSD/ISO 用户”的扫描噩梦。因此在后来的更新中,专门在设置里增加了一个自救开关,允许用户放弃那些华丽的标签分类墙,回归到老版本那种纯粹、高效的扫描。


2
 楼主| 发表于 2026-5-22 15:36 | 只看该作者 | 来自上海 来自 中国
第二个问题:怎样修改coverart.php让moode支持ISO格式的Sacd显示封面,还需要其它地方的修改吗?
在 moOde audio player 中,SACD ISO 格式无法显示封面是一个非常经典的问题。
### 🔍 为什么默认无法显示?
这是因为 MPD(音乐播放器守护进程)在解析 SACD ISO 时,会把 .iso 文件当成一个**虚拟文件夹**。
例如,某首歌的实际路径在 MPD 看来是:
NAS/Music/周杰伦-叶惠美.iso/01.以父之名.dsf
当 moOde 的 coverart.php 试图获取这首歌的封面时,它会使用 PHP 的 dirname() 函数去寻找父目录。
* **默认逻辑:** dirname(".../周杰伦-叶惠美.iso/01.以父之名.dsf")
* **错误结果:** 返回了 .../周杰伦-叶惠美.iso 这个并不真实存在的“文件夹”。
* **导致后果:** moOde 会去 周杰伦-叶惠美.iso/ 里面寻找 cover.jpg,自然什么都找不到。
我们要做的修改,就是让 coverart.php 识别出 .iso/,并强制让路径再往上跳一级,回到 ISO 文件所在的真正物理文件夹。
### 🛠️ 第一步:修改 coverart.php
使用 SSH 连接到你的树莓派,先备份原文件,然后进行修改。
1. **备份原文件(稳妥起见):**
   ```bash
   sudo cp /var/www/coverart.php /var/www/coverart.php.bak
   
   ```
2. **编辑文件:**
   ```bash
   sudo nano /var/www/coverart.php
   
   ```
3. **插入代码逻辑:**
   在文件顶部,找到获取 $file 或 $uri 参数的代码行(通常在前面几行,类似于 $file = $_GET['file'] ?? ''; 或 $uri = ...)。
   紧跟在这行参数获取的后面,添加以下**虚拟路径修正代码**:
   ```php
   // === SACD ISO 封面路径修正开始 ===
   if (stripos($file, '.iso/') !== false) {
       // 如果路径中包含 .iso/,说明是虚拟路径,截取 .iso/ 之前的部分
       $file = substr($file, 0, stripos($file, '.iso/'));
   }
   // === SACD ISO 封面路径修正结束 ===
   
   ```
   > **原理解释:** 经过这段代码处理后,原本的 .../叶惠美.iso/01.以父之名.dsf 会被强行裁剪为 .../叶惠美.iso。这样接下来 moOde 原有的 dirname($file) 就会正确返回 .../(即 ISO 所在的文件夹),从而完美触发 moOde 自带的 cover.jpg / folder.jpg 扫描机制。
   >
4. **保存并退出:**
   按 Ctrl + O 保存,按 Enter 确认,再按 Ctrl + X 退出编辑器。
### ⚠️ 第二步:还需要其它地方的修改吗?(关键前置条件)
只改 PHP 代码是不够的,你还需要确保以下几点,否则依然无法显示:
#### 1. 必须手动放置物理封面文件(最重要)
树莓派的性能和 PHP 脚本无法做到“实时从封闭、压缩的 SACD ISO 镜像内部提取嵌入的图片”。因此,**你必须把这个 SACD 专辑的封面图片(命名为 cover.jpg 或 folder.jpg),直接放在放有 .iso 文件的那个文件夹里。**
* 📁 示例结构:
   * 📂 周杰伦 - 叶惠美 [SACD]/
     * 📄 周杰伦 - 叶惠美.iso
     * 🖼️ cover.jpg  *(就是这张图)*
#### 2. 清理缓存(Cache)
修改完代码并放好图片后,如果界面还没刷新,是因为 moOde 和浏览器有严重的图片缓存:
* **moOde 端:** 去 moOde 网页设置 ➡️ Configure ➡️ Audio 或 Library 中,找到 **Regenerate image cache(重新生成图像缓存)** 并运行一下。
* **浏览器端:** 在电脑浏览器上按 Ctrl + F5(Mac 上 Cmd + Shift + R)强制刷新,或者清除一次浏览器缓存。
#### 3. 关于 moOde 版本升级的提醒
这种修改属于“硬核魔改”(Hack)。每次你升级 moOde 系统(比如从 moOde 8.x 升级到新版本)时,/var/www/coverart.php 都会被官方的新文件覆盖。记得把这段代码保存好,以后升级了系统重新填进去进去即可。
回复

使用道具 举报

3
 楼主| 发表于 2026-5-22 16:38 | 只看该作者 | 来自上海 来自 中国
关键的来了:最后Gemini好心地劝我全部转换为dsf,并给了我这个,也分享给大家:
SACD_Batch_Convert.bat

@echo off
:: 设置编码为UTF-8,防止中文乱码
chcp 65001 >nul
title SACD ISO 批量无损转换 DSF 工具

echo ====================================================================
echo               SACD ISO 批量无损转换 DSF 工具 (发烧无损模式)
echo ====================================================================
echo.
echo [提示] 请确保本脚本 (.bat) 与 "sacd_extract.exe" 放在同一个文件夹内。
echo [提示] 脚本会自动扫描当前文件夹(及所有子文件夹)下的所有 .iso 镜像并进行转换。
echo.

:: 检查主程序是否存在
if not exist "%~dp0sacd_extract.exe" (
    echo ❌ [错误] 未能在当前目录下找到 sacd_extract.exe 主程序!
    echo 请将 sacd_extract.exe 复制到本脚本所在的文件夹中再运行。
    echo.
    pause
    exit
)

echo ⚙️ [状态] 已找到 sacd_extract.exe,准备开始批量转换...
echo.

setlocal enabledelayedexpansion
set count=0

:: 循环遍历当前目录及子目录下的所有 .iso 文件
for /r %%i in (*.iso) do (
    set /a count+=1
    echo ====================================================================
    echo 正在处理第 !count! 个文件:
    echo 文件路径: %%i
    echo ====================================================================
   
    :: 执行核心转换指令:
    :: -2: 仅提取双声道 (避免多声道浪费空间)
    :: -s: 输出为支持内嵌标签的 DSF 格式
    :: -c: 将 DST 压缩实时解压为原生的纯净 DSD 数据
    "%~dp0sacd_extract.exe" -2 -s -c -i "%%i"
   
    echo.
    echo 💾 [完成] "%%~nxi" 转换结束。
    echo.
)

echo ====================================================================
echo 🎉 [大功告成] 所有找到的 !count! 个 SACD ISO 文件已全部批量处理完毕!
echo ====================================================================
echo.
pause
回复

使用道具 举报

您需要登录后才可以回帖 登录 | -注册-

本版积分规则

Archiver|手机版|粤icp备09046054号-9|耳机网-耳机大家坛

粤公网安备 44030602000598号 耳机大家坛、www.erji.net、网站LOGO图形均为注册商标

GMT+8, 2026-6-24 16:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表