工作记录
Todo
TTS 发音功能 【doing】
继续设计:
文案:
- 显示句子发音按钮 [x]
功能:开启后,在每个英语句子后面显示一个播放按钮,点击后显示加载模样,加载成功后,播放音频,同时按钮变为暂停模样;再次点击就暂停,再点击就播放。
播放状态:
idle => 显示播放 loading => 显示加载 playing => 显示暂停 暂停 => 显示播放
开关状态:通过 cookie 序列化功能开启、关闭的状态
TTS 能力:构建一个新的 TTS server, 使用 cached 非实时接口返回音频结果。
- cache 构建:
- 在 hugo 侧,基于 ts 完成英语句子抽取功能:
- 输入:dist 接口
- 输出:一个
{data: [{id: str, text: str, src_doc: list[str]}], project: dajuan}json 文件,annotated as$CACHED_TTS_TEXT
- github action 里,在完成 hugo build 后,调用这个 ts,生成该文件
- 然后 ssh 到 server,执行
cached-tts-gen --data $CACHED_TTS_TEXT --gen-model public
- 在 hugo 侧,基于 ts 完成英语句子抽取功能:
- tts-server 接口
tts生成接口:真正的 TTS 生成接口;给定 text, model, 生成音频【流式】 【这个接口先不做,直接做离线的脚本就行】- 支持模型:
- local-dajuan: 本地的模型
- 支持模型:
- 本地与云端同步: 【done】
- hugo build 后,与云端一样,调用 ts 生成句子文件, 记为 local-list
- 生成 TTS 文件并添加到云端(
cached-tts-gen?)- 设置最佳的 tts-model 为 best-tts-model
- 调用
cached-tts/list获取云端的数据, 记为 remote-list - 对下面的句子做后续生成+添加处理:
- 取 remote-list 与 本地的 local-list 交集,然后取 tts-model 不 等于 best-tts-model 的 句子
- 取 local-list - remote-list (增量)
- 生成+添加处理
- 使用 best-tts-model, 对句子生成音频
- 调用
cached-tts/add添加内容,id_exist_action=override
- 对下面的句子做删除操作:
- 取 remote-list - local-list (减量)
Process
Edge tts 发音已经足够了,应该和 kokoros 差不多。所以,本地的 model,一定要在情绪上更好才行。 所以不要 kokoros 了,直接找一个更好的 model. 目前准备用 Index-tts. 倒是再调研下。
先把 cached-tts 流程跑通再说。
在多版本 tts-model 这里我有点搞不清楚,今儿我觉得这里有点问题:
不要那么复杂:
当前的需求:就 1 个版本的 TTS 结果即可。
问题所在:好的 TTS 服务不是实时在线的,所以导致新的文章出来后,可能没有音频
解决方法:
- 但为了让所有文本都有音频,只能让差的音频在好的音频不存在时补位
- 所以搞了个 light-weight tts provider,方便在 server 侧部署新文章后,马上去算好
- 然后隔一段时间,去启动一下好的 TTS 服务,再去更新下新的文章的音频数据
- 然而,如何处理这个好、差的数据,让服务端优先用好的、没有的情况下用差的?
目前想到的方法:
- 存储的时候,id 和 tts-model 无关,这样读取的时候,不管好的坏的,都直接打到这个有的数据上来
- 扩展性:未来如果要支持多个 model 同时存在, 就再把需要区分的参数加入到 id 计算中来。
=> DONE
关于 TS 抽取句子:
User:
在 hugo 的流程里,我实现这么一个功能:
从 html 元素中筛选出供 TTS 发音的句子。 目前这个句子可能考虑 2 个来源:
对 class name == bilingual-alternating, 从子元素中筛选中满足下面条件的 p: 其 text (含嵌套子元素)只包含英语字符,或者标点(至少包含 1 个英语字母)
对 class name == “pronounce” 的元素
分别从这两个来源,识别到该元素,并在此元素的末尾(也就是子节点的最后一个元素),添加一个 icon 用于显示发音按钮。
点击这个发音按钮,会从该元素中抽取出TTS 发音的句子,然后调用 后端的 /cached-tts/gen 来获取音频并播放声音
我想把这个功能用 ts 写,然后让 hugo 编译成 js, 在页面中的合适位置调用; 此外,这个 ts 还要被额外的一个离线 ts 引用,用于离线抽取出句子,预先生成 tts cache 可以做到吗?
=> 我们就只关注这 2 类元素即可!
生活记录
半夜睡不着,黄车车也醒了,我就窝在被窝里又看了 2 集犬夜叉。 如果正常点去看,戈薇挺不对的
- 自己没啥能力却那么莽
- 自己没啥能力却对犬夜叉指手画脚
- 自己到处跑,还得多少损伤
- 自己击碎了四魂之玉,导致各地异变,是罪魁祸首?
在这样的设置下,那些嘻嘻哈哈,甚至还会回去考试的逻辑,感觉一下子就失去了魅力。
还是低龄向的东西?但是又一想,是否背负太多,就只能一天天都阴沉呢?不太懂,但至少没能力别去作死啊,这点实在太硬伤了。
弃了。
情绪记录
Good
Bad
Reflect
一早又一顿买买买,把之前腾罗出来的资金又买光了。特别的,招商轮船和海熊又买了一部分回来,离谱的是比上次卖的钱还高。 择时就是这样啊,这个错误应该是非常常见的了。说明上周后面有点恐慌了,但是经过一个周末,觉得长远看还是有效的,所以今天观察了下盘面, 看起来还是比较强的,就买入了。
这么看,思路是也算不上错吧,算是走一步看一步,只是这样实际犯错的概率还是非常大的。情绪太容易反转了。看清远期目标才能够坚定。
晚上黄车车 8 点多就睡了,意外的容易。我大概 9 点半醒,又去刷手机了,看到了父母落户、城乡养老保险的等等事情,又睡不着了;后来好好进来, 又瞎扯了下。 主要是得先把户口转回来,这样黄车车好上幼儿园。
因为中途醒了又聊了这些,然后看了下犬夜叉,最后估计 3 点多才睡吧。