3アクセントボタン実装──US・UK・AUをAnkiカードで聴き分ける仕組みを作った話【PART3】

PART1でAIが英語教材を自動生成する仕組みを作り、PART2でその文章を音声に変換してAnkiカードに届けるところまで完成させた。

n8nで英語シャドーイング教材を自動生成してAnkiにストックする仕組みを作る【PART1】
n8nで英語シャドーイング教材を自動生成してAnkiにストックする仕組みを作る──TTS3回詰まり編【PART2】

ここまでで「気になる記事、ストックしたい記事本文を貼るだけで、シャドーイング用カードが自動で手元に届く」という仕組みは一応できあがった。長い記事って1記事読むのにも時間がかかるから要約してストックできるようにしたけど、記事そのままでも、要約の文章をもっと長くしたり、レベルを調節してもらうことだって簡単です。 英検3級用にとか、2級用にとかも容易にできますのでぜひ学習者の皆さんに共有してみんな英語のレベルがあがっていけばいいなぁという楽しい想像をしています。


実際に使ってみてわかったこと

完成直後からは自動でカードができていく楽しさからいろいろな記事をストックしていきました。英語のニュースを読んで気になった記事があればすぐ本文コピペして、同期すればAnkiにカードが届いている。空いた時間にストックした記事を読んだり、音声に合わせてシャドーイングしたり、結構オススメです。

でも、しばらく使っていくうちに、最初の設定をアメリカ英語にしたので

「音声がずっとアメリカ英語だな」

確か英検2級とかからいろいろな国のアクセントがリスニング試験で混ざってくるような気が…英検準1級の時はバリバリのイギリス英語とかオーストラリアの英語とかあったのでいろいろな国のアクセントが自動で一気に作られてカードのボタンでどのアクセントから聞くかを選べるようにできたらさらにいいんじゃないかなぁと。

せっかく自動生成しているんだから、US・UK・オーストラリアの3種類を一気に作ってしまえないか? 1枚のカードで3つのアクセントを聴き比べられたらおもしろいなと。


アクセントを3種類に増やす

n8n(自動化ツール)のフロー上で、音声を生成する前に「どのアクセントで読むか」を設定する工程を追加してみました。

具体的には、Voice Configというノード(処理のブロック)を1つ追加して、そこで3アクセントの設定をまとめて返すようにするだけ。あとはn8nが自動的に「US用・UK用・AU用」と3回繰り返して音声を生成してくれる。

使った声はMicrosoftが無料で提供しているEdge TTSというサービス。英語ネイティブ向けのサービスに使われているクオリティの高い読み上げ音声で、無料で使えるのがありがたい。

ただ聴き比べてみたところ、代表的なアクセントだなとおもってどれも聞きやすかったかなぁ。なのでもっと詳細な訛りのある音声にするにはもうすこしいい有料サービスならでっきるようになるのかな、と思ったので将来のやることリストへ追加しました。

アクセント使った声
🇺🇸 アメリカ英語en-US-ChristopherNeural / en-US-AriaNeural
🇬🇧 イギリス英語en-GB-RyanNeural / en-GB-SoniaNeural
🇦🇺 オーストラリア英語en-AU-WilliamNeural / en-AU-NatashaNeural

男性・女性をランダムで選ぶようにした

各アクセントに男性と女性の声を1人ずつ用意して、カードを生成するたびにどちらかをランダムで選ぶようにした。ボタンを押すまで、男性か女性かの声が分からずまるで試験みたい・・・いいじゃない♪( ´▽`)

毎回同じ声だと「この声で慣れているから聴けてるだけ」になりかねない。少し声が変わるだけでリスニングの難易度は上がる。同じ文章なのに、声が違うだけで別の練習になる感じがして、これは思いのほか効果的だった。

設定はn8nのコードノードに数行書くだけ。「男性と女性の2択をランダムに選ぶ」という命令を3アクセント分書いている。

これで常時、6種類の音声教材を(実際は3種類)つかっていることに。


音声ファイルを整理したくて、日本語フォルダ名にしようとした

音声ファイルが増えてきたので、Obsidian(メモアプリ)の中に audio/ というフォルダを作って整理することにした。すべて英語で作られているし、音声ファイルから再生させるってことあまりないので見た目でなんの音声かわかったらいいかなって。

せっかくだから日本語でわかりやすく名前をつけたい。ファイル名もカテゴリやタイトルを入れて、あとから何の音声かわかるようにしたかった。

20260523【テクノロジー】AIが変える医療診断_US.mp3
20260523【テクノロジー】AIが変える医療診断_UK.mp3
20260523【テクノロジー】AIが変える医療診断_AU.mp3

こういう名前にしたら見やすいし管理しやすいと思っていた。

PCでは再生できた。でもスマホでは音声が一切聴こえなかった。


漢字のファイル名がモバイル同期の壁だった

しばらく原因がわからなかった。Ankiのカードはスマホにちゃんと届いているのに、音声だけ聴こえない。

Ankiにはメディアファイルの状態を確認する「Check Media」という機能がある。PCで確認すると「Missing(見つからない)」と表示された。スマホで確認しても同じ。「おかしい、ファイルが届いていないのか?」と思ったが——

試しにそのカードを削除してからCheck Mediaを実行したら、「Unused(使われていないファイルがある)」と表示された。

これが重要な手がかりだった。

  • Missing = カードが音声ファイルを参照しているのに、ファイルが見つからない状態
  • Unused = ファイルはあるけど、どのカードも使っていない状態

カードを消したのに「Unused」と出たということは、音声ファイル自体はスマホに届いていた。届いていないんじゃなくて、ファイルの名前に問題があったのかなと推測。

調べてみると、AnkiのWeb同期サービス(AnkiWeb)は漢字・ひらがなを含むファイル名をアップロードできないという制限があるそうです。PCのAnkiには直接届いているから再生できていたが、Web経由でスマホに届ける工程で弾かれていたのかな。


英数字だけのファイル名に変更して解決

ファイル名を英数字と記号だけで構成するように変えた。

20260523_tech_rv0l_us.mp3
20260523_tech_rv0l_uk.mp3
20260523_tech_rv0l_au.mp3

構成は 日付_カテゴリ(英語)_ランダムID_アクセント という形。同じ日に同じカテゴリで複数作っても、ランダムIDが重複することはほぼない。

カテゴリの日英変換テーブルをn8nのコードに書き込んでおいて、「テクノロジー」なら「tech」、「医療・健康」なら「health」というように自動変換される。

これでスマホでも問題なく音声が届くようになった。

ただカードの音声再生ボタンを押しても再生されない。。。 

でもその後さらに、CLAUDE君に調べてもらってスマホに音声が届いているんだったらボタンが反応しないだけなんじゃないかと言うことで、おそらくノートタイプのカードフィールドのコード(HTML)でデザインしているんですけど、ボタンで使っていたコードが再生されない原因だと断定することができました。コードを修正したら無事音声が再生されました♪( ´θ`)ノ

多分音声ファイル名が日本語でも再生できるんじゃないかなと思いますが日本語名だとモバイルに届かないとネット上であったので、結局音声はObsidanのリンク機能で該当の記事を消せばそのリンクされている記事の音声も自動的に削除になるし、英語名の管理でもまぁ問題はないかなと思ったのでここでストップしました。


完成したカードのイメージ

カードを開くと、こんな感じで3つのボタンが並んでいる。

スピーカーアイコンを押すと、そのアクセントの音声が流れる。同じ文章をUS・UK・AUで聴き比べると、発音・イントネーションの違いがよくわかる。同じ文なのに、アクセントが変わるだけで聴き取り難易度が変わるのがおもしろい。


まとめ

今回やったことをざっくりまとめると:

  • アクセント3種類に対応:US・UK・AUの音声を一度に自動生成できるようにした
  • 男女ランダム選択:カードを作るたびに声が変わるので、リスニング練習のバリエーションが増える
  • ファイル名は英数字のみ:日本語(漢字)を含むファイル名はAnkiWebがアップロードを拒否するため、英数字だけの命名ルールに変更

一番の学びは「PCで動いても、スマホで動くとは限らない」ということ。AnkiはAnkiWebを経由してスマホに同期する都合上、ファイル名の制限がある。Anki設定の中にあるCheck Mediaで「ファイルはあるか?」を確認してから実装を疑う——という切り分け方は今後も使えると思う。

PART1〜3でシャドーイング教材ジェネレーターがひとまず完成した形になりました。URLを投げるだけで3アクセントのAnkiカードが自動生成される、という最初の目標はちゃんと達成できた。

実際に使い続けてみてどうだったか、音声品質・学習効果あたりは別途まとめていこうと思います。


スポンサーリンク

今日学んだ英語表現(B2〜C1)

一応英検1級目指してるスーツマンのこの記事のトピックから使えるフレーズをAIがピックアップ。Anki・音声技術系の英語記事を読むときに頻出する表現です。

① iterate(= 繰り返し処理する・反復する)
> n8n iterates over each item returned by the Voice Config node, triggering the TTS request once per accent.
プログラミング・自動化の文脈で「ループ処理する」意味で使われる。「loop」より技術的なニュアンス。「iterate over a list」「each iteration」などの形でよく出る。

② invoke(= 呼び出す・起動する)
> The button invokes a JavaScript bridge method, which instructs Anki to play the corresponding audio file.
関数やAPIを「呼び出す」ときの動詞。「call」よりフォーマルで技術文書に多い。「invoke a function / method / API」の形が定番。

③ nuanced(= 細かいニュアンスを持つ・微妙な)
> Understanding the nuanced differences between US, UK, and Australian accents takes consistent exposure over time.
「単純ではなく、細かい違いがある」という意味。英語学習・文化・政治などの話題で頻出。「a nuanced understanding / approach / argument」の形で覚えると使いやすい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です