tldr: .mp3/.wav -(ffmpeg)-> .pcm -(wtgv2_encode.exe)-> .wts -(packres.exe) -> .cfg
一般而言,你应该使用 JLStudio 那个玩意从提示音选项卡中直接生成资源文件的。但如果你的用例比较特殊(比如多项目共享同一个仓库),那么就得自己跑整个流程。
以下是根据 JLStudio 的行为通过 Procmon 抓事件分析得出的过程。这个过程可能随着后续更新而有所修改。
这些工具都需要你想办法能安装 JLStudio. 你可以没有任何 SDK 授权,主要是里面的工具文件 C:\JLStudio\tools\JLTools 需要使用。除了 ffmpeg.exe 是原版 FFmpeg 以外,其他的工具在网上似乎都没有公开提供。
首先,将你的音频文件转成 16kHz 的裸 PCM, 格式为小端序 16bit 有符号数。这个部分可以通过 FFmpeg 做,或者你也可以自己写一个程序来搞。用 FFmpeg 转换的指令为:
ffmpeg.exe -y -i audio.mp3 -f s16le -acodec pcm_s16le -ac 1 -ar 16000 audio.pcm
WAV 格式的音频同理,只需要替换输入文件名,保留其他参数即可。
得到 PCM 数据后,再调用 wtgv2_encode.exe 把它编码成杰里的 WTS 格式:
wtgv2_encode.exe audio.pcm audio.wts o.raw 16000 16000 20 0 0
其中,各个参数的推测意义如下:
| 参数位置 | 意义 | 备注 |
|---|---|---|
| 1 | 输入文件名 | 可以是一个绝对路径 |
| 2 | 输出文件名 | 可以是一个绝对路径,如果目标已经存在,则它会被覆写 |
| 3 | ??? | 固定为 o.raw, 暂时没抓到其他的情况 |
| 4 | 输入采样率? | 目前观察到的值固定是 16000, 不确定是否支持其他采样率 |
| 5 | 输出采样率? | 同上;设备端是否支持其他采样率也需要调查 |
| 6 | ??? | 固定为 20, 暂时没抓到其他情况 |
| 7 | ??? | 固定为 0, 暂时没抓到其他情况 |
| 8 | 压缩偏好 | 0 表示质量优先;1 表示大小优先 |
得到 WTS 文件后,还需要将其打包成 .cfg 文件才能喂给烧录器下载。使用 packres.exe 即可:
packres.exe -n audio -o audio.cfg audio.wts:audio.wts
其中,-n 参数指定一个名称(至于这个名称是啥作用我还在摸索),-o 参数指定输出文件名;之后的每一项参数都是一个由冒号分隔的打包条目,冒号左手侧是资源文件路径,右手侧是机上文件名称。
注意到:packres.exe 会拒绝文件名超过 11 个字节的文件。所以在之前的生成 WTS 的步骤中,输出文件名的长度必须控制在 11 个字节以内。
考虑到命令行最大参数限制,packres.exe 还额外接受从 .txt 中按行读取音频文件。考虑如下的文件 audios.txt
D:\work\jl\proj\res\audio1.wts|audio1.wts
D:\work\jl\proj\res\audio2.wts|audio2.wts
则可以通过以下命令指示 packres.exe 按此文件打包音频:
packres.exe -n audio -o audio.cfg -pipe-sep -utf8-list -list audios.txt
其中,-pipe-sep 指定使用 | 分隔打包指令;如果你要使用绝对路径的话,一定要加这个参数;-utf8-list 指定输入的文件是 UTF-8 编码的,这个主要是为了应对潜在的非 ASCII 路径问题,可按情况选择加或者不加;-list 参数指定输入列表文件的路径。












