シャドーイングは、手本の音を聞きながら、少し遅れて同じ音を自分の口から出す練習だ。
だから、この練習には手本の音そのものが要る。
市販の教材でシャドーイングをやると、速すぎる、間が足りない、その1文だけもう一度聞けない、という壁に必ずぶつかる。
音が固定されているからだ。
ではAI英会話の道具立て、つまり音声合成と発音評価を売っている会社のAPIを使うと、その壁はどこまで動くのか。
この記事では、マイクロソフトとグーグルが公開している開発者向けドキュメントに実際に書かれているタグ名と属性名だけを材料にして、そこを分解していく。
サービスの順位づけはしない。仕組みの話だけをする。
【結論】AI英会話のシャドーイングは「手本を作る・間を置く・答え合わせする」の3点で組み立てられる
先に答えを置く。
シャドーイングという練習を機械の部品に分解すると、必要なものは3つしかない。
| 要るもの | 担当する部品 | 仕様上できるか |
|---|---|---|
| ①速度・間・強勢を調整した手本の音 | 音声合成+SSML | できる(範囲に上限あり) |
| ②手本とまったく同じ文字列 | 自分で書いたスクリプト | できる |
| ③自分の音と①②の照合 | 発音評価(参照テキストあり) | できる(ロケール制限あり) |
⇒ この3つが全部そろうと、シャドーイングの「型」は仕様の上で成立する。
ただし先に断っておくと、今回読んだ公式ドキュメントを全文検索しても「シャドーイング」「shadowing」という語は1件も出てこない。
つまり、シャドーイング専用の機能が用意されているわけではない。
あるのは汎用の部品で、それを組み合わせるとシャドーイングの形になる、という話だ。
この違いは大きい。部品の制限が、そのまま練習の制限になるからだ。
AI英会話のシャドーイングの土台|SSMLという「音の指示書」
まず土台になっている言語の話をする。
SSML(音声合成マークアップ言語)は、マイクロソフトの公式ドキュメントで「ピッチ、発音、読み上げ速度、音量などのテキスト読み上げの出力属性を微調整するために使用できる XML ベースのマークアップ言語です」と定義されている(音声合成マークアップ言語 (SSML) の概要・2026-09-11取得)。
同じページには、SSMLで「段落、文、中断または一時停止、あるいは無音を定義できます」とも書かれている。
⇒ 読み上げの速さと、どこで何ミリ秒止まるかを、文字で指定できる。
これがシャドーイングにとって決定的に重要になる。
グーグル側も同じ規格に乗っていて、Cloud Text-to-Speech の SSML リファレンスに <speak> <break> <say-as> <prosody> <emphasis> <phoneme> <sub> <mark> <par> <seq> といった要素が並んでいる。
2社が別々のドキュメントで、ほぼ同じタグ名を採用している。
W3Cの仕様が土台にあるからで、実際グーグルのリファレンスは各要素の説明から「W3 specification」へリンクを張っている。
もう1つ知っておくべきことがある。課金の単位だ。
マイクロソフトのSSML概要には「句読点を含めて、文字が音声に変換されるごとに課金されます。SSML ドキュメント自体は課金対象外ですが、サービスは、ユーザーがテキストがどのように音声に変換されるかを調整するために使用するオプション要素 (音素やピッチなど) を、課金対象の文字としてカウントします」とある。
⇒ 細かく指示を書き込むほど、合成にかかるコストは上がる。 無限に凝れる仕組みではない。
AI英会話のシャドーイングで話速を落とす|prosody の rate 属性
シャドーイングでいちばん最初に欲しくなるのは「もう少しゆっくり」だ。
これを担当するのが prosody 要素の rate 属性になる。
マイクロソフトのドキュメントには「prosody 要素を使用して、テキスト読み上げ出力のピッチ、輪郭、範囲、レート、音量の変更を指定できます」と書かれている(SSML を使用した音声とサウンド・2026-09-11取得)。
そして rate には、定数で指定できる5段階がある。
rate の値 | ドキュメントに書かれた同等値 | シャドーイングでの使いどころ |
|---|---|---|
x-slow | 0.5、-50% | 初回。音を1つずつ確かめる |
slow | 0.64、-46% | 口が追いつき始めた段階 |
medium | 1(既定値) | 基準の速さ |
fast | 1.55、+55% | 負荷をかける段階 |
x-fast | 2、+100% | 上限 |
定数以外に、相対数値やパーセンテージでも書ける。ドキュメントの例は <prosody rate="50%">some text</prosody> と <prosody rate="-50%">some text</prosody> だ。
ここに、はっきりした限界がある。
同じドキュメントに「レートの変更は、元のオーディオの 0.5 倍から 2 倍の範囲内である必要があります」と明記されている。
⇒ 半分より遅くはできない。 「1音ずつ分解するほど遅く」という要求は、この仕様の外にある。
ピッチのほうも同じ prosody が持っている。グーグルのリファレンスには <prosody rate="slow" pitch="-2st">Can you hear me now?</prosody> という例があり、st はセミトーン(半音)を意味する。
グーグル側の pitch の指定方法は3通りと説明されている。
- Relative=
lowmediumhighのような相対値。mediumが既定。 - Semitones=
+Nstまたは-Nst。「+/-」と「st」の両方が必須。 - Percentage=
+N%または-N%。「%」は必須、「+/-」は任意。
そしてグーグルは注意書きも添えている。「The <prosody> tags should only be used around a full sentence. Enclosing words within a sentence may cause unwanted pauses in speech.」=文の途中の単語だけを囲むと、意図しないポーズが入るという警告だ。
⇒ 「この単語だけゆっくり」は、少なくともグーグル側では推奨されていない使い方になる。
AI英会話のシャドーイングに「間」を差し込む|break と mstts:silence
シャドーイングの2つ目の要求は「言い直す隙間をくれ」だ。
これは break 要素が担当する。
マイクロソフトの構造ドキュメントは、break を「単語間の中断や一時停止の既定の動作をオーバーライドします」と説明している(SSML ドキュメントの構造とイベント・2026-09-11取得)。
属性は2つで、strength と time だ。
strength の値 | 相対期間 |
|---|---|
x-weak | 250 ミリ秒 |
weak | 500 ミリ秒 |
medium(既定値) | 750 ミリ秒 |
strong | 1,000 ミリ秒 |
x-strong | 1,250 ミリ秒 |
time のほうは絶対時間で、「有効な値の範囲は 0 から 20000 ミリ秒です。サポートされている最大値より大きい値を設定した場合、サービスは 20000ms を使用します」と書かれている。
もう1つ、覚えておくと事故が減る記述がある。「time 属性が設定されている場合、strength 属性は無視されます」だ。
⇒ 両方書いても、勝つのは time のほう。
ドキュメントの例では、次の3つがすべて750ミリ秒の中断になると説明されている。Welcome <break /> to text to speech. Welcome <break strength="medium" /> to text to speech. Welcome <break time="750ms" /> to text to speech.
最大20秒まで止められるということは、「1文読み上げ → 20秒沈黙 → 次の1文」という教材を、文字だけで組めるということだ。
これはシャドーイングの前段にあたるリピーティングの形にそのまま使える。
もう1つ、マイクロソフト独自の mstts:silence という要素もある。
これは type 属性で無音を入れる場所を指定するもので、ドキュメントには Leading Leading-exact Tailing Tailing-exact Sentenceboundary Sentenceboundary-exact Comma-exact Semicolon-exact Enumerationcomma-exact の各種類が並んでいる。
break との違いも明記されている。「break 要素はテキスト内の任意の場所に挿入できることです。無音は、入力テキストの先頭または末尾、または隣接する 2 つの文の境界でのみ機能します」。
- 1文ごとに同じ長さの間を入れたいなら
Sentenceboundary-exactを1回設定するほうが早い。 - 特定の1か所だけ長く止めたいなら
break timeを直接書く。 - 末尾に「はい、どうぞ」の余白が欲しいなら
Tailing系を使う。
なお -exact が付く種類について、ドキュメントは「絶対的な無音の種類は、対応する非絶対的な種類よりも優先されます」と書いている。
AI英会話のシャドーイングで強勢と個々の音を指定する|emphasis と phoneme
速さと間が作れたら、次に効いてくるのは「どこを強く読むか」と「その単語をどう読むか」だ。
この2つはそれぞれ別の要素が担当していて、シャドーイングでの役割も違う。
強勢を置く|emphasis 要素と、その厳しい制限
シャドーイングの3つ目の要求は「どこを強く読むのか教えてくれ」だ。
英語は強勢のある言語なので、ここが崩れると単語が全部合っていても通じない。
担当するのは emphasis 要素だ。
マイクロソフトは「省略可能な emphasis 要素を使用して、テキストの単語レベルのストレスを追加または削除できます」と説明し、level 属性の値として reduced none moderate strong を挙げている。level を書かなかった場合の既定は moderate だ。
ドキュメントの例はこうなっている。I can help you join your <emphasis level="moderate">meetings</emphasis> fast.
ここが今回いちばん重い制限だ。
同じページに、次の但し書きが付いている。「単語レベルの強調チューニングは、en-US-GuyNeural、en-US-DavisNeural、en-US-JaneNeural のニューラル音声でのみ使用できます。」
⇒ 強勢を狙って置いた手本を作りたいなら、選べる声は事実上その3つに絞られる。
さらに「低いピッチと短い継続時間を持つ単語の場合、そのピッチが十分に上がらない可能性があります」という注意も添えられている。指定しても効きにくい単語がある、ということだ。
グーグル側の emphasis は level の値として strong moderate none reduced を挙げ、例として <emphasis level="moderate">This is an important announcement</emphasis> を示している。
ただしグーグルにも同じ形の警告がある。「The <emphasis> tags should only be used around a full sentence.」=こちらも文全体に使うものとされている。
⇒ 「この1語だけ強く」という、シャドーイング教材でいちばんやりたいことは、2社ともに制限がかかっている。
できないわけではないが、声を選び、効きを耳で確認しながら使う部品だと理解しておいたほうがいい。
単語の音を指定する|phoneme 要素とカスタム辞書
手本の音を作るとき、最後に残るのが「その単語、そう読むのか?」という問題だ。
合成音声は綴りから読み方を推定するので、固有名詞や同形異音語で揺れる。
これを手で固定するのが phoneme 要素だ。
マイクロソフトの発音ドキュメントは phoneme を「SSML ドキュメントでのふりがなの発音に使用されます」と説明している(SSML の発音・2026-09-11取得)。
属性は alphabet と ph の2つ。alphabet に指定できるのは ipa sapi ups x-sampa で、ドキュメントには「アルファベットを指定する文字列は、小文字で指定する必要があります」とある。
実例として <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme> が載っている。
この ph の中身が、そのままシャドーイングの答え合わせ用の正解になる。
ドキュメントは、音節の境界がIPAの「.」であること、そしてストレス記号の置き方がアルファベットによって違うことまで書いている。
ipaの場合は「この音節の前にストレス記号を配置して 1 つの音節を強調するには、単語のすべての音節をマークする必要があります」。sapiの場合は「1 つの音節を強調する場合は、単語のすべての音節がマークされているかどうかに関係なく、この音節の後にストレス記号を配置する必要があります」。phに「認識できない電話が含まれている場合、テキスト読み上げサービスは無効な SSML に対して http 400 エラーを返します」。
⇒ 手書きのIPAは、間違っていると黙って無視されるのではなく、エラーで落ちる。 そこは分かりやすい。
毎回タグで囲むのが面倒なら、辞書を外に出す方法もある。lexicon 要素だ。
ドキュメントには <lexicon uri="https://www.example.com/customlexicon.xml"/> という書き方と、辞書ファイル側で alphabet="ipa" と xml:lang="en-US" を指定する例が載っている。
自分がいつも崩す単語だけを集めた辞書を1枚作れば、それ以降の教材すべてに効く。
グーグル側にも同じ要素があり、<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak> のような例が示されている。
AI英会話のシャドーイングを採点につなげる|参照テキスト付きの発音評価
ここからが後半戦、自分の声の側の話になる。
シャドーイングは「手本と同じ音を出す」練習なので、答え合わせの相手は最初から決まっている。手本のテキストそのものだ。
マイクロソフトの発音評価には、まさにそのための ReferenceText というパラメーターがある(発音評価を使用する・2026-09-11取得)。
ドキュメントの説明はこうだ。「読み取り言語学習シナリオのスクリプト化された評価を実行する場合は、参照テキストを設定します。スクリプトなしの評価を実行する場合は、参照テキストを設定しないでください。」
⇒ シャドーイングは構造的に「スクリプト化された評価」に当てはまる。 読む文が先に決まっているからだ。
これは精度の面で有利に働く。同じドキュメントのスクリプトなし評価の注記に、次の記述があるからだ。
「スクリプトなしの評価では、使用される音声テキスト変換 (STT) モデルは、STT Azureとは異なります。非常に正確に認識されたテキストに基づく評価が必要な場合は、最初Azure STT を呼び出して参照テキストを取得してから、スクリプト化された評価を実行することをお勧めします」(訳文のまま)。
返ってくるスコアの種類も決まっている。
| スコア | ドキュメントの説明 | 粒度 |
|---|---|---|
AccuracyScore | 「音素がネイティブ スピーカーの発音とどの程度一致するか」 | 音素・音節(en-USのみ)・単語・全文 |
FluencyScore | 「音声がネイティブ スピーカーによる単語間のサイレント区切りの使用にどの程度近づくか」 | 全文レベル |
CompletenessScore | 「入力参照テキストに対する発音された単語の比率によって計算されます」 | 全文レベル |
ProsodyScore | 「ストレス、イントネーション、話す速度、リズムなど、与えられたスピーチがいかに自然であるか」 | 全文レベル |
PronScore | 上記から重み付きで計算される全体のスコア | 全文レベル |
シャドーイングの観点で見ると、FluencyScore と ProsodyScore が本丸になる。
なぜなら、この2つがまさに「間の取り方」と「強勢・リズム」を測っている項目だからだ。
ProsodyScore を返させるには EnableProsodyAssessment というメソッドを呼ぶ必要があり、ドキュメントには「プロソディ評価を調べるには、SDK バージョン 1.35.0 以降にアップグレードします」と書かれている。
ほかにも設定できるパラメーターがある。
GradingSystem=FivePointなら0から5、HundredMarkなら0から100。既定はFivePoint。Granularity=PhonemeWordFullTextの3種類。既定はPhoneme。EnableMiscue=TrueにするとErrorTypeにOmission(飛ばした)やInsertion(余計に言った)が付く。既定はFalse。
EnableMiscue はシャドーイングと相性がいい。
シャドーイングで最初に起きる失敗は、発音の崩れではなく「追いつけずに単語を落とす」ことだからだ。それが Omission として単語レベルで返ってくる。
「間」の失敗を見つける|ErrorType の読み方
発音評価には、単語ごとに付く ErrorType という札がある。
スクリプト化された評価で返る値は、ドキュメントによると None Omission Insertion Mispronunciation UnexpectedBreak MissingBreak Monotone だ。
後半の3つが、シャドーイングの評価に直結する。
ErrorType | ドキュメントの説明 | シャドーイングでの意味 |
|---|---|---|
UnexpectedBreak | 「単語の前に予期しない中断が発生したことを示します」 | そこで詰まって止まった |
MissingBreak | 「単語の前に欠けている区切りを示します」 | 切るべきところで切れていない |
Monotone | 「単調な音声を示します」 | 抑揚が平ら |
ただし、ここには実装上の注意が付いている。
ドキュメントには「現在のバージョンでは、中断エラーの種類は提供されません。UnexpectedBreak – Confidence フィールドと MissingBreak – confidence フィールドにしきい値を設定して、単語の前に予期しない改行や欠落した改行があるかどうかを判断する必要があります」とある。
その推奨値も書かれている。「両方の信頼度スコアで推奨されるしきい値は 0.75 です」。
⇒ 「間の失敗」は札として降ってくるのではなく、確信度の数値を自分で線引きして判定する形になっている。
つまりアプリ側の設計しだいで、同じ音声でも「詰まった」と判定されたりされなかったりする。
点数が甘い、厳しいと感じるとき、モデルの性能ではなくこのしきい値の話であることがある。
総合点の出し方も公開されている。ドキュメントは、精度・プロソディ・流暢さ・完全性のスコアを低いほうから s0 から s3 と置いたうえで、読み上げシナリオのプロソディスコアありの場合を PronScore = 0.4 * s0 + 0.2 * s1 + 0.2 * s2 + 0.2 * s3、プロソディスコアがない場合を PronScore = 0.6 * s0 + 0.2 * s1 + 0.2 * s2 と書いている。
⇒ いちばん低い項目に最大の重みがかかる。 総合点を動かしたいなら、弱い1項目を潰すのが構造的に効く。
AI英会話のシャドーイングで音と文字を同期させる|mark とタイムポイント
シャドーイングの教材には、もう1つ地味だが重要な要件がある。
「いま音声がどこを読んでいるか」を画面の文字の上で示すことだ。
これができないと、追いつけなくなった瞬間に迷子になる。
グーグルのSSMLリファレンスには、この用途にそのまま使える機能が書かれている。タイムポイントだ。
説明はこうだ。「A timepoint is a timestamp (in seconds, measured from the beginning of the generated audio) that corresponds to a designated point in the script.」
使い方は2段階と書かれている。
- タイムスタンプが欲しい位置に
<mark>タグを置く。 TimepointTypeをSSML_MARKに設定する。設定しないと既定ではタイムポイントは返らない。
ドキュメントの例は <speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak> だ。
⇒ 単語の出現時刻が秒で返るということは、テキストのハイライトを音に合わせて動かせるということだ。
ここもシャドーイング教材の設計に直接効く。
ただし制限がある。ドキュメントは「Do not add consecutive marks in your SSML. Marks in rapid succession might not generate events.」と警告していて、マークとマークの間に音声が生成されない場合はイベントが出ないとも書かれている。
⇒ 全単語に印を打つような使い方は想定されていない。 フレーズ単位に置くのが現実的になる。
AI英会話のシャドーイングで仕様上できないこと
ここまでの制限を、1か所にまとめておく。
期待値がずれる場所は、だいたいこの表の中にある。
| やりたいこと | 仕様上どうなっているか |
|---|---|
| 半分より遅く読ませる | rate の変更は元の0.5倍から2倍の範囲内と明記 |
| 特定の1語だけ強く読ませる | 単語レベルの強調は3つのニューラル音声でのみ利用可。グーグル側も文全体への使用を推奨 |
| 米国英語以外でリズムまで採点する | 「プロソディ評価は、en-US ロケールでのみ利用可能です」 |
| 音節単位で精度を見る | AccuracyScore の音節レベルは en-US のみ |
| どの声でもSSMLをフル活用する | HD音声・パーソナル音声・埋め込み音声は「SSML タグが一部しかサポートされていないことがあります」 |
| 「間の失敗」を自動で札にする | 中断エラーの種類は現在のバージョンでは提供されず、しきい値を自分で設定する必要がある |
最後の「声によってSSMLの効き方が違う」という点は、マイクロソフトのテキスト読み上げ概要に書かれている(テキスト読み上げの概要・2026-09-11取得)。
同じページには、標準音声が「100 以上の言語とロケールですぐに使用できる高品質のニューラル音声」であることと、各標準音声モデルが「24 kHz および高忠実度 48 kHz で利用できます」ことも書かれている。
声の選択肢そのものは広い。狭いのは「SSMLの細かい指示が全部効く声」のほうだ。
そしてもう1つ、構造的にできないことがある。
シャドーイングの本質である「手本と重ねて同時に話すこと」そのものを測る指標は、発音評価のスコア一覧に存在しない。
評価シナリオは「スクリプト化された評価(読み取り)」と「スクリプトなしの評価(話す)」の2つに分かれていて、どちらも自分の音声だけを入力に取る形になっている。
⇒ 遅れの大きさ(どれだけ後ろにずれて追いかけたか)は、この仕組みの中では直接は返ってこない。
近いことをやるなら、手本側のタイムポイントと自分の音声側のオフセットを突き合わせる、という自作の処理が要る。
AI英会話のシャドーイングを組み立てる手順(仕様から言えることだけ)
ここまでの仕様から、そのまま導ける手順を並べる。精神論は入れない。
- ロケールを
en-USに寄せる。 プロソディ評価も音節レベルの精度も、そこでしか完全には返らない。 - 同じ1文で3段階の音を作る。
x-slow(0.5)、medium(1)、fast(1.55)。文字を変えずに速さだけ変える。 - 文の境界に無音を入れる。
break timeは最大20000ミリ秒まで取れる。言い直す余白はここで作る。 - 崩す単語だけ
phonemeで固定する。 毎回同じ単語で落ちるならlexiconに移して辞書化する。 - 採点は必ず参照テキスト付きで回す。 手本のテキストがそのまま
ReferenceTextになる。 EnableMiscueをTrueにする。 落とした単語がOmissionで返る。既定はFalseなので明示的に立てる。GradingSystemはHundredMarkにする。 0から100のほうが、前回との差が見える。- 総合点ではなく、いちばん低い項目だけを見る。 計算式が最低点に0.4から0.6の重みをかけている。
この手順は「効果を保証する方法」ではない。
公開されている仕様の範囲で、シャドーイングという練習の形をどこまで再現できるかを並べただけだ。
AI英会話のシャドーイングに関するよくある質問
Q. AI英会話のアプリで、シャドーイング機能と書いてあるものは何をしているのか。 A. 実装は公開されていないので断定はできない。ただし部品側のドキュメントを見るかぎり、SSMLで手本の音を合成し、同じテキストを参照テキストとして発音評価に渡す、という組み合わせで作れる範囲にある。
Q. 手本の速度はどこまで落とせるのか。 A. マイクロソフトのドキュメントに「レートの変更は、元のオーディオの 0.5 倍から 2 倍の範囲内である必要があります」とある。定数の x-slow が0.5にあたる。
Q. イギリス英語でシャドーイングしたいが、採点が雑に感じる。 A. 「プロソディ評価は、en-US ロケールでのみ利用可能です」と明記されている。AccuracyScore の音節レベルも en-US のみだ。感覚ではなく仕様の差になる。
Q. 単語を飛ばしてしまったことは検出されるのか。 A. EnableMiscue を True にすると、ErrorType に Omission または Insertion が設定される、とドキュメントに書かれている。既定値は False なので、アプリ側で有効にしていなければ返らない。
Q. 抑揚が平らだと指摘されることはあるか。 A. ErrorType の値に Monotone がある。ドキュメントには「モノトーンは発話全体で検出されますが、タグはすべての単語に割り当てられます」とあり、単語単位ではなく発話全体の判定として扱われている。
Q. 自分でSSMLを書かないと、この話は関係ないのか。 A. 直接書く必要はない。ただしアプリの「ゆっくり」「もう一度」「強調表示」といったボタンの裏側がここなので、何ができて何ができないかの当たりは付けられる。
まとめ|AI英会話のシャドーイングは、仕様の範囲内なら自分で組み立てられる
もう一度整理する。
- 手本は作れる。
prosodyのratepitch、breakのstrengthtime、emphasisのlevel、phonemeのalphabetphが、2社の公式ドキュメントに実在するタグと属性として並んでいる。 - 間は設計できる。
break timeは最大20000ミリ秒、mstts:silenceは文の境界にまとめて無音を置ける。 - 答え合わせもできる。
ReferenceText付きの「スクリプト化された評価」が、シャドーイングの形にそのまま当てはまる。 - ただし米国英語に寄る。 プロソディ評価も音節レベルの精度も
en-USのみと明記されている。 - 「重ねて話すこと」自体は測れない。 評価シナリオは読み取りと自由発話の2つで、遅れの大きさを返す指標はスコア一覧に無い。
⇒ 「AI英会話でシャドーイングができるか」ではなく、「どの部分が仕様でカバーされ、どの部分が自作になるか」で見る。
そこが分かっていれば、アプリの機能表示を見たときに、その裏で何が動いているかの見当が付く。
※本記事の一次ソースはすべて2026-09-11に各公式ドキュメントで確認した。仕様は更新されるため、最新は各公式ドキュメントで確認してほしい。
Comments