sun9 downloadsListen to your notes with on-demand online speech and randomized review.
Read your Markdown notes aloud in Obsidian. Note Listener adds a play/pause button to each note header, voice selection, playback speed, paragraph navigation, saved progress, and randomized review of folders you explicitly select.
Desktop only. Requires Obsidian 1.14.4 or later. Windows Edge TTS playback is tested. Android and iOS are not supported.
main.js, manifest.json, and styles.css from the latest GitHub release. The release tag must match the manifest version; do not mix files from different releases.<your-vault>/.obsidian/plugins/note-listener/ and place all three files directly inside it. Use your actual configuration directory if it is not .obsidian./ allows the whole vault. Excluded subtrees are skipped.tts: false and excluded folders prevent reading aloud.api.msedgeservices.com; its handshake may use speech.platform.bing.com. Azure uses the configured regional tts.speech.microsoft.com endpoint. Optional presets use api.siliconflow.cn, openspeech.bytedance.com, or api.openai.com. A custom endpoint also receives the submitted text and credentials — only use one you trust.fs import. There is no client telemetry, advertising, automatic code installation, or self-update.Project source is licensed under MIT. Edge networking uses a pinned MIT-licensed MsEdgeTTS dependency. The build applies a checked TypeScript-AST transform to remove unused file-export and voice-list methods and select the desktop transport. Project and bundled-dependency license notices are embedded in main.js.
Obsidian 桌面在线听读插件,使用 MIT 许可证。仅支持桌面端,最低要求 Obsidian 1.14.4。已验收范围是 Windows 桌面端的 Edge 在线朗读及播放器;macOS/Linux、长时间锁屏和其他平台仍待进一步验收,Android/iOS 不在本版本支持范围内。
安装文件:GitHub Releases。本版本只需 main.js、manifest.json 和 styles.css,Edge 已合并进主文件。更新记录见 CHANGELOG.md。
默认使用 Edge TTS,无需账号、密钥或额外 Python 安装。在 Windows Obsidian 内授权后按需在线合成并播放。另提供 Azure、硅基流动、豆包及自定义 OpenAI 兼容 TTS,可在统一窗口配置。其他平台可能收费,不会自动切换。Edge 是微软在线服务,不是本地模型,也不是长期免费、无限量或稳定性的承诺。
此版本按官方要求设置 isDesktopOnly=true,不允许在 Android/iOS 安装。
入口:笔记顶部“音色与播放设置” → 面板内“语音服务配置”;或 Obsidian 设置 → Note Listener → “配置平台、模型与音色”。
| 平台 | 可以配置 | 凭据 |
|---|---|---|
| Edge TTS(默认) | 已内置的中文音色 | 无密钥,仍需在线授权 |
| Azure Speech | 资源区域、中文音色 | 本次会话的 Speech 密钥 |
| 硅基流动 | 完整接口地址、TTS 模型 ID、音色 ID | 本次会话的 API Key |
| 火山引擎 · 豆包 | V3 SSE 接口地址、资源 ID、speaker、可选模型 ID、鉴权方式 | 新版 API Key,或旧版 App ID + Access Token |
| OpenAI 兼容 TTS | 完整 /audio/speech 地址、模型 ID、音色 ID |
本次会话的 Bearer API Key |
每个平台独立保存不含密钥的配置。编辑字段后按 Tab 或点击其他控件提交;改动接口、模型、区域、资源或鉴权方式会停止播放并撤回旧授权。切换平台也会清除旧密钥,不会静默回退。更换同一配置的音色只停止旧音频,保留段落。
首次配置流程:选择平台 → 填写参数 → “输入凭据并授权” → 确认接收服务 → 输入密钥并同意费用 → “试听当前配置”。测试使用固定文本,不读取日记。不要把密钥写进接口地址、普通字段、Markdown 或聊天。
https://api.siliconflow.cn/v1/audio/speechFunAudioLLM/CosyVoice2-0.5BFunAudioLLM/CosyVoice2-0.5B:alex,或该模型下已授权的其他音色。model、input、voice 和 response_format。https://openspeech.bytedance.com/api/v3/tts/unidirectional/sseseed-tts-2.0,必须与已开通的服务和音色匹配。req_params.model 时填写。20000000 后播放。使用“OpenAI 兼容 TTS”填写完整地址,例如 https://your-provider.example/v1/audio/speech。它要求 Bearer 鉴权、OpenAI 风格的 JSON 请求,以及直接返回可播放音频。仅兼容聊天接口不代表兼容语音接口。
接口地址仅接受 HTTPS。只有确认可信的平台地址后才授权;插件不会替你核实第三方代理的隐私政策。
tts: false 及排除目录。尚未实现:安卓 Edge 直连、持久缓存管理、日记日期筛选、逐句高亮等;锁屏控制、来电和耳机断开等场景未实机验收。
1.0.2 起改用 MIT 许可的 msedge-tts 内存音频流,构建时移除文件导出、音色列表和浏览器连接分支,不包含 Node fs 模块。停止、超时或超过大小限制时关闭连接,不在磁盘写正文或 MP3。用户未授权时不发送正文;服务失效时提示错误,不擅自切换服务或关闭 TLS 校验。
已在 Windows Obsidian 1.14.4 的真实实例验证加载、Edge 在线合成、解码与播放事件,测试使用固定非私密短句,未上传真实笔记。
固定构建环境:Node.js 24.15.0、npm 11.12.1。发布复现与工件证明流程见 docs/RELEASING.md。
npm ci --ignore-scripts
npm run lint
npm test
npm run build
npm run verify:build
构建生成 dist/note-listener 目录中的三个安装文件,Edge 已合并到主文件:
note-listener/
manifest.json
main.js
styles.css
第三方许可说明嵌入 main.js 的保留注释中。开发时可运行 npm run dev 监听源码;编译完成后需要在 Obsidian 中禁用再启用插件才会重载。
插件文件要放进你正在使用的笔记仓库的配置目录。
<仓库>/.obsidian/plugins/note-listener/。如配置目录不是默认的 .obsidian,使用你实际的配置目录。如果面板或插件启用报错,可按 Ctrl+Shift+I 打开开发者工具,在 Console 查看错误。反馈前删除密钥和真实笔记内容。
日记、知识/复习;路径相对当前仓库。空列表表示不启用随机范围,/ 显式表示全库。排除目录同样每行一个,例如 日记/私密。授权和所有平台密钥仅存内存,重启、禁用或卸载插件后需重新输入及授权。密钥不会写入 data.json;该文件只保存非敏感平台配置、普通设置及最近播放进度。
tts: false 禁止指定笔记被朗读。---
tts: false
---