用按鍵實現tts功能

遇到的问题

想要在notes中建立按鍵,按下按鍵後可以語音輸出note裡的特定內容(PC/android)。

照著ChatGPT的指示,裝了templator和button插件,並建立了對應的文件檔,在閱讀模式下可以看到按鍵,但點擊沒有任何效果

预期的效果

按下按鍵後,可以播放google TTS語音

已尝试的解决方案

用ChatGPT搞了很久都搞不定…

已建script目錄,並在裡面建立tts_script.js,templator有抓到這個script (tp.user.tts_script)

內容如下:『
function speak(text) {
const utterance = new SpeechSynthesisUtterance(text);
speechSynthesis.speak(utterance);
}

// 获取当前笔记内容
const noteContent = editor.getValue();

// 正则表达式匹配被双引号包含的内容
const regex = /“([^”]+)"/g;

let match;
while ((match = regex.exec(noteContent)) !== null) {
// 执行 TTS 函数朗读匹配到的文本(去除双引号)
const textToSpeak = match[1]; // match[1] 是正则表达式捕获的内容,即双引号内的部分
speak(textToSpeak);
break; // 只朗读第一个匹配到的内容,可以根据需要修改
}

測試md檔的內容:「

“这是要朗读的特定段落内容”

`button
name 朗读双引号内内容
type click
action tp.file.run_js(“[[scripts/tts_script.js]]”)

進閱讀模式可以看到 朗读双引号内内容 的button,但點擊沒反應

1 个赞

建议长代码还是得搁在代码块里

```js
这里放很长代码
```

否则许多格式会乱


简单试了下,

  • 首先 function speak(text) 是好用的
  • action tp.file.run_js("[[scripts/tts_script.js]]") 我怀疑没这个 run_js 语法? (GPT 对于不在训练数据集的知识容易瞎说)
  • 可能生成的其他代码也有细节坑

如果是为了读文字的功能, 其实可以考虑现成的 Ob tts 插件, 有好多

如果不用插件, 就要自己写脚本读文本, 那也未必非要 Templater js + Buttons 组合

如果就是为了学习 Templater js + Buttons:

  • 不能低估难度, 得老实研究细节
  • 建议先排版好代码, 大家慢慢交流探讨, 我自己不保证能搞定, 但是论坛里厉害小伙伴很多, 大家一起还是能琢磨出点啥的
1 个赞