はじめに
ミュージカルや舞台を観ていると、「どうしてこんなに綺麗な発声ができるんだろう?」と気になることがあります。声量や滑舌ももちろん大切ですが、それ以上に、音そのものが整っている感じがします。
少し調べてみると、歌や発声のトレーニングでは 母音法 と呼ばれる考え方がよく使われていることを知りました。子音を一度忘れて、母音だけで発声を整えるという方法です。たしかに、演者の声は透き通っていて、母音がはっきりと聞こえてきます。
そこで今回は、手軽に練習できるように、この母音法を日本語向けに少し噛み砕き、Pythonで簡単に試せる形にしてみます。
母音法とは
たとえば次の言葉を母音だけにすると、次のようになります。
- ありがとう → あいあおう
- すみません → ういあえん
- おつかれさま → おうあえああ
- しゃかいじん → ああいいん
意味はかなり削れていますが、抑揚をつけてこの母音だけを読むと、「何を言いたいか」はなんとなく分かると思います。感謝なのか、挨拶なのか、疲れているのか、といった 言葉の種類 は意外と残ります。このように、母音だけを取り出して発声することで、音の流れや抑揚に意識を向ける練習法が母音法です。
Pythonで実装する
以下が今回使うコードです。ひらがな・カタカナに対応し、拗音も段として処理します。
-
各仮名は「段(あ・い・う・え・お)」に変換
- わ → あ段
- み → い段
- ず → う段
-
「ん/ン」はそのまま残す
-
拗音(しゃ・ちゃ・じゃ など)は小文字が段を決める
- ゃ → あ
- ゅ → う
- ょ → お
-
ひらがな・カタカナ対応
-
漢字・記号はそのまま残す(意味のアンカーとして)
実装コードは、Google Colab の こちら からも実行できます。
# ひらがな → 母音(段)
VOWEL_MAP = {
"あ": "あ", "い": "い", "う": "う", "え": "え", "お": "お",
"か": "あ", "さ": "あ", "た": "あ", "な": "あ", "は": "あ",
"ま": "あ", "や": "あ", "ら": "あ", "わ": "あ",
"が": "あ", "ざ": "あ", "だ": "あ", "ば": "あ", "ぱ": "あ",
"き": "い", "し": "い", "ち": "い", "に": "い", "ひ": "い",
"み": "い", "り": "い",
"ぎ": "い", "じ": "い", "ぢ": "い", "び": "い", "ぴ": "い",
"く": "う", "す": "う", "つ": "う", "ぬ": "う", "ふ": "う",
"む": "う", "ゆ": "う", "る": "う",
"ぐ": "う", "ず": "う", "づ": "う", "ぶ": "う", "ぷ": "う",
"け": "え", "せ": "え", "て": "え", "ね": "え", "へ": "え",
"め": "え", "れ": "え",
"げ": "え", "ぜ": "え", "で": "え", "べ": "え", "ぺ": "え",
"こ": "お", "そ": "お", "と": "お", "の": "お", "ほ": "お",
"も": "お", "よ": "お", "ろ": "お", "を": "お",
"ご": "お", "ぞ": "お", "ど": "お", "ぼ": "お", "ぽ": "お",
"ん": "ん",
}
# 拗音(小文字)→ 母音(段)
YOON_VOWEL = {
"ゃ": "あ", "ゅ": "う", "ょ": "お",
"ャ": "ア", "ュ": "ウ", "ョ": "オ",
}
# 小文字(拗音以外)
SMALL_CHARS = set("ぁぃぅぇぉァィゥェォっッ")
def hira_to_kata(ch):
return chr(ord(ch) + 0x60)
def kata_to_hira(ch):
return chr(ord(ch) - 0x60)
def extract_vowels(text):
result = []
i = 0
while i < len(text):
ch = text[i]
# 拗音
if i + 1 < len(text) and text[i + 1] in YOON_VOWEL:
result.append(YOON_VOWEL[text[i + 1]])
i += 2
continue
# 小文字は素通り
if ch in SMALL_CHARS:
result.append(ch)
i += 1
continue
# カタカナ判定
is_katakana = 0x30A1 <= ord(ch) <= 0x30F6
hira = kata_to_hira(ch) if is_katakana else ch
if hira in VOWEL_MAP:
v = VOWEL_MAP[hira]
if is_katakana:
v = hira_to_kata(v)
result.append(v)
else:
# 漢字・記号など
result.append(ch)
i += 1
return "".join(result)
extract_vowels() に文字列を入れると母音に変換して出力してくれます。
実際に変換してみる
たとえば、以下のような会話文をそのまま入力して、母音列に変換してみます。
## 実際に変換してみる(サンプル)
examples = [
("Aさん", "おつかれさまです"),
("Bさん", "おつかれさま"),
("Aさん", "あっ、みゃくみゃくみにいった?"),
("Bさん", "まだいけてないんだよね、いっかいくらいはいってみたいけど……"),
("Aさん", "あっ、もうおわっちゃったよ"),
("Bさん", "えっ、そうなんですか!?いきたかったな"),
("Aさん", "じゃあ、ポンデリングでもたべにいく?"),
("Bさん", "ん?なんて?"),
("Aさん", "ん?ポンデリングだよ"),
("Bさん", "それはしってるわ!なんできゅうに?"),
("Aさん", "にてるから。かわりになるかなって"),
("Bさん", "あっ、そういうことね。まあ、いいけど"),
("Aさん", "ありがとう。みっつまでおごるよ"),
("Bさん", "わたし、そんなにたべれないんだけど……ふとらせたいの?"),
("Aさん", "あっちがうよ、そういうイミじゃないって"),
("Bさん", "いや、いいわけはいいから"),
("Aさん", "ごめんなさい"),
("Bさん", "……まあ、いいけど"),
("Aさん", "(あぶない、あぶない……母音で話してたら終わってた)")
]
for speaker, line in examples:
print(f"{speaker}:")
print(f" {line}")
print(f" → {extract_vowels(line)}")
print()
Aさん:
おつかれさまです
→ おうあえああえう
Bさん:
おつかれさま
→ おうあえああ
Aさん:
あっ、みゃくみゃくみにいった?
→ あっ、あうあういいいっあ?
Bさん:
まだいけてないんだよね、いっかいくらいはいってみたいけど……
→ ああいええあいんあおえ、いっあいうあいあいっえいあいえお……
Aさん:
あっ、もうおわっちゃったよ
→ あっ、おうおあっあっあお
Bさん:
えっ、そうなんですか!?いきたかったな
→ えっ、おうあんえうあ!?いいああっああ
Aさん:
じゃあ、ポンデリングでもたべにいく?
→ ああ、オンエインウえおあえいいう?
Bさん:
ん?なんて?
→ ん?あんえ?
Aさん:
ん?ポンデリングだよ
→ ん?オンエインウあお
Bさん:
それはしってるわ!なんできゅうに?
→ おえあいっえうあ!あんえううい?
Aさん:
にてるから。かわりになるかなって
→ いえうああ。ああいいあうああっえ
Bさん:
あっ、そういうことね。まあ、いいけど
→ あっ、おういうおおえ。ああ、いいえお
Aさん:
ありがとう。みっつまでおごるよ
→ あいあおう。いっうあえおおうお
Bさん:
わたし、そんなにたべれないんだけど……ふとらせたいの?
→ ああい、おんあいあええあいんあえお……うおあえあいお?
Aさん:
あっちがうよ、そういうイミじゃないって
→ あっいあうお、おういうイイああいっえ
Bさん:
いや、いいわけはいいから
→ いあ、いいあえあいいああ
Aさん:
ごめんなさい
→ おえんああい
Bさん:
……まあ、いいけど
→ ……ああ、いいえお
Aさん:
(あぶない、あぶない……母音で話してたら終わってた)
→ (あうあい、あうあい……母音え話いえああ終あっえあ)
意味はかなり曖昧になっていますが、母音だけでも抑揚をつけて読むと、雰囲気や話の流れは意外と伝わります。このように、会話のやり取りやプレゼンのセリフを入力すれば、発声練習用の素材として使うことができます。
母音だけで読むと見えてくるもの
母音列にして声に出してみると、意味より先に次のようなものが立ち上がってきます。
- 丁寧か、口語か
- 軽いか、重いか
- 疲れているか、元気か
日本語では、「何を言っているか」以上に、「どんな調子で言っているか」を母音が担っているのかもしれません。
発声トレーニングとして使うなら
使い方はとても単純です。
- 普通の文章を母音に変換する
- 母音だけで、なめらかに読む
- その後、元の文章に戻す
子音に引っ張られず、母音を安定させた発声を意識しやすくなると思います。
おわりに
今回は、母音法を練習するために、日本語の文章を母音列に変換する簡単なスクリプトを Python で実装してみました。日本語の場合、「何を言っているか」よりも先に、「どんな調子で話しているか」が母音に現れているのかもしれません。発声トレーニングとしても、言語の構造を観察する遊びとしても、何かの参考になれば幸いです。
母音だけの日本語、思ったより奥が深いです。