複数の英語Ankiフラッシュカードを作成した後、今回は国語の注音(ボポモフォ)フラッシュカードを生成します。使用するプラグインは以下の通りです:

  1. Copilot: ChatGPTを呼び出してカード形式と注音を生成
  2. Note Splitter: 指定された区切り文字に基づいて1つのノートを複数のノートに分割
  3. Yanki: 生成された複数のノートをAnkiシステムに同期

1. Copilotでノートを生成

  • Extraフィールドは音声用です。
%BEGIN%と%END%の間の各行のテキストを、指定された11行の形式で生成します。形式の定義は以下の通りです:
1行目: 完全なテキスト。ただし、最初のダブルクォーテーションは「に、2番目のダブルクォーテーションは」に変換します(例:"釐"清 は 「釐」清 に変換)。
2行目: 空行
3行目: 3つのハイフン
4行目: 3つのハイフン
5行目: 空行
6行目: ダブルクォーテーションで囲まれた文字の注音を生成します。前後にダブルクォーテーションがない文字は注音を生成しませんが、元の文字は生成します(例:"清"楚 は ㄑㄧㄥ楚 を生成)。声調記号は省略不可です。
7行目: 空行
- 7~9行目は、その下がExtraフィールドの内容であることを示します。
8行目: 3つのハイフン
9行目: 空行
10行目: 完全なテキスト。ただし、すべてのダブルクォーテーションを削除します。
11行目: 3つのシャープ記号(#)

%BEGIN%
"釐"清
傳"誦"
"謀"財害命
浪"費"
"遲"到
"逛"
%END%

生成結果:

「釐」清

---

---

ㄌㄧˊ清

---

釐清
###

「傳」誦

---

---

ㄔㄨㄢˋ誦

---

傳誦
###

「謀」財害命

---

---

ㄇㄡˊ財害命

---

謀財害命
###

「浪」費

---

---

ㄌㄤˋ費

---

浪費
###

「遲」到

---

---

ㄔˊ到

---

遲到
###

「逛」

---

---

ㄍㄨㄤˋ

---

逛
###

2. Note Splitterでファイルを分割

  • Note Splitterの区切り文字(Delimiter)を###に設定します。
  • <span class='keybs'> Ctrl/Cmd+P</span>を押して<mark style="background-color:#a3be8c">Split by delimiter</mark>コマンドを実行します。
  • /note-splitterフォルダ内のファイルをYankiのスキャンフォルダの対応する場所に移動します。

3. YankiでAnkiシステムに同期

  • <span class='keybs'> Ctrl/Cmd+P</span>を押して<mark style="background-color:#81a1c1">Sync flashcard notes to Anki</mark>コマンドを実行します。

4. Ankiシステムのノートタイプを調整

Ankiシステム内で操作:

  • ノートタイプを管理 → Yanki - Basic (and reversed card with extra) を見つける → 右側の【カード】をクリック
  • 表面テンプレートにはTTSの音声再生ボタンがありますが、JavaScriptを使用して非表示にします。
    • Ankiシステムのテンプレートはウェブページと見なすことができ、{{Front}}フィールドはPHP (<?= ?>)、ASP (<%= %>)、またはJSP (<%= %>) の式タグ(Expression Tag)のようなものです。
  • システムフィールド「{{Deck}}」を使用してデッキ名が「Chinese」で始まるかどうかを判断し、もしそうならTTSボタンを非表示にします。

▼ 表面テンプレート

{{Front}}
<br>

{{#Extra}}
<div id="EXTRA">
{{tts en_US voices=Microsoft_Mark:Extra}}
</div>
{{/Extra}}

{{^Extra}}
<div id="FRONT">
{{tts en_US voices=Microsoft_Mark:Front}}
</div>
{{/Extra}}

<script>
  var sDeck = "{{Deck}}";

  if (sDeck.indexOf("Chinese") >= 0) {
    elem = document.getElementById("FRONT");
    if (elem) {
      elem.style.display = "none";
    }
    elem = document.getElementById("EXTRA");
    if (elem) {
      elem.style.display = "none";
    }
  }
</script>
裏面で中国語音声を再生するには?

AnkiシステムのTTSフィールドは静的に解析されるため、{{tts}}が存在するとJavaScriptで無効にできません。もし{{tts}}があると、不要な英語の裏面でも音声が再生されてしまうため、裏面テンプレートで{{tts}}を使用することはできません。

5. テンプレートで直接音声ファイルを使用

中国語フラッシュカードの裏面での音声再生は、最終的にAwesomeTTSを使用して静的な音声ファイルを生成することで対応します。

  1. 処理したいフラッシュカードのデッキを参照して見つけます。
  2. すべてのカードを選択 → メニュー AwesomeTTS → 【Add Audio to Selected...】
  3. Microsoft Speech API JScript または Google Translate を使用し、右側の Source Field で音声再生したい Extra フィールドを選択し、音声を Back パネルに挿入します。
  4. Generate を押して mp3 ファイルを生成します。mp3 ファイルは C:\Users\ユーザーアカウント\AppData\Roaming\Anki2\プロファイル名\collection.media 内に生成されます。

An image to describe post

6. 💡 関連リンク

💡 解説記事: https://jdev.tw/blog/8494/
✅Copilot: https://github.com/logancyang/obsidian-copilot
✅Note Splitter plugin: https://github.com/decaf-dev/obsidian-note-splitter
✅Yanki plugin: https://github.com/kitschpatrol/yanki-obsidian
✅ テンプレート例: https://gist.github.com/emisjerry/eaada7ec56f8ceba24f74490049e645f

7. チュートリアル動画