micro:bit+MicroPythonで日本語をしゃべらせたい。(ひらがな→音素変換)

micro:bitにそれなりのスピーカーをつないで、MicroPythonでプログラミングすれば、おしゃべりをさせることができます。下記の記事に詳しいです。

http://microbit-micropython.readthedocs.io/ja/latest/tutorials/speech.html

http://microbit-micropython.readthedocs.io/ja/latest/speech.html

日本語をしゃべらそうとするとなかなか上手くいきません。でも、ローマ字ではなく音素を使えばなんとかなります。

 

 

www.youtube.com

 片言ですが、しゃべっていますね。

  (動画ではバングルモジュールを電源の代わりに使っています。あくまでも電源です。バングルモジュールとP0端子の間に紙をはさんでバングルモジュールのスピーカーと絶縁しています)

 

やってみましょう。

 

必要なもの

①MicroPython開発環境(muが便利。 Code With Mu )

②バナナクリップ

③ダイソーのキューブ型スピーカー

(圧電スピーカーだと単なるノイズにしか聞こえません)

④micro:bit

バナナクリップ、スピーカー、micro:bitを動画と同じようにつないで、USBでパソコンとも接続して下さい。

mu上で下記のコードを入力してください。

 

import speech
from microbit import *
while True:
if button_a.is_pressed():
speech.pronounce("BAAKUHWAE MAEIYKUHROHBIYD DEHSUH.",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
else:
display.show(Image.HAPPY)

 

micro:bitに転送してAボタンを押すと、先ほどの動画と同じようにしゃべりますね。

この部分が、micro:bitの喋る言葉にあたるコードです。スピードなどは適当に調整しました。

speech.pronounce("BAAKUHWAE MAEIYKUHROHBIYD DEHSUH.",speed=120, pitch=60, throat=190, mouth=190)

 say関数ではなくpronounce関数、ローマ字ではなく音素で日本語らしく発音させています。

下記でpronounce関数と音素を解説しています。

http://microbit-micropython.readthedocs.io/ja/latest/speech.html#phonemes

 

好きな言葉をしゃべらせたいですね。

簡易的に日本語をしゃべらせるために、ひらがな→音素変換しましょう。

【母音例】

ひらがな
音素 AE IY UH EH OH
AA IH UX ER AX
AH IX UW EY OW
AY   AX EH OY

 

【子音例】

ひらがな か行 さ行 た行 な行 は行
音素 K S T N /H

 

ま行 や行 ら行 わ行
M Y R W

 

が行 ざ行 だ行 ば行 ぱ行
G Z D B P

 

きゃ行 ぎゃ行 しゃ行 じゃ行 ちゃ行
KY GY SY JY CH

 

にゃ行 ひゃ行 びゃ行 ぴゃ行 みゃ行 りゃ行
NY FY BY PY MY

RY

私が試してみて比較的それらしく聞こえたものを書き出したので、他の音素を使ったほうが良い場合もあると思います。 

 

いろんな「あいうえお」があります。

www.youtube.com

 しゃべらせたい言葉によって試行錯誤が必要になります。

 

下記は、Aボタンを押すと、五十音+濁音+半濁音などを延々としゃべるプログラムです。正直、差がわかりにくいところもあります。

import speech
from microbit import *
while True:
if button_a.is_pressed():
speech.pronounce("AE IY UH EH OH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("KAE KIY KUH KEH KOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("SAE SIY SUH SEH SOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("TAE TIY TUH TEH TOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("NAE NIY NUH NEH NOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("/HAE /HIY /HUH /HEH /HOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("MAE MIY MUH MEH MOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("YAE YUH YOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("WAE OH N",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("GAE GIY GUH GEH GOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("ZAE ZIY ZUH ZEH ZOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("DAE DIY DUH DEH DOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("BAE BIY BUH BEH BOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("PAE PIY PUH PEH POH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("KYAE KYUH KYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("GYAE GYUH GYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("SYAE SYUH SYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("JYAE JYUH JYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("CHAE CHUH CHOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("NYAE NYUH NYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("FYAE FYUH FYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("BYAE BYUH BYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("PYAE PYUH PYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("MYAE MYUH MYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
speech.pronounce("RYAE RYUH RYOH",speed=120, pitch=60, throat=190, mouth=190)
sleep(200)
else:
display.show(Image.HAPPY)

 

www.youtube.com

 

音素の組み合わせで、好きな言葉をしゃべらせることが出来ます。しゃべるロボットなんかも作れそうですね。

 

イントネーション調節を試してみた記事もあります。

kkooddoommoo.work

 

ボタンやタッチセンサーとの組み合わせです。

kkooddoommoo.work