织影的配音助手:角色表 → 逐句合成并缓存为音频文件 → 交给 av.film 的 s.audio。
默认引擎 web.edgeTextToSpeech(用到时才加载),可换;av.* 不依赖任何 TTS
角色表:roles 为 {角色名 = 音色 ID 或 {voice;rate;pitch}};返回表里每个角色是函数:
cast.角色名("台词"[,{rate=1.2}]) → {path;text;spoken;role;voice;words;cached},可直接传给 s.audio;
s.audio 返回的 v.word("代码") 用 words 精确对准说到这个词的成片秒。
rate 为语速倍率(默认 1),pitch 为音高(数值 = Hz,如 -10;仅 Edge)。opt: dir(缓存目录,默认 /res/voice/),engine,refresh
同样的音色参数和台词只联网合成一次;失败直接抛错(音色写错会列出同地区可用音色)
缓存目录,默认 "/res/voice/"(相对影片项目)
配音引擎:默认 null(首次使用时创建 web.edgeTextToSpeech)。
可设为任何实现 synthesize(request,{onAudio;onBoundary;onFinish}) 的对象:
request 为角色表里的字段加 text、boundary="word";可选 voices(locale)、name(计入缓存键);输出 mp3 或 wav
说一句:spec 为音色 ID 或 {voice;rate;pitch},text 为台词(可以直接用画面文字:** 标记不读,换行读成停顿)。
返回 {path;text;spoken;role;voice;words;cached};words 为 {{text;at;dur},...},at 是相对开口的秒数。
opt: role(文件名前缀),dir,engine,refresh(true 忽略缓存)
列出可用音色:locale 为地区前缀("zh"、"zh-HK"、"en-US"),返回 {id;locale;localeName;gender;name;categories;personalities} 数组;
失败返回 null,错误信息