応用編3章 声を出してみよう


PC-6601には、ボイスシンセサイザという音声を合成する機能が内蔵されていますので、簡単に日本語を「しゃべらせる」ことができます。

では,さっそく

talk"f ohayo-."

とキーボードから入力してみてください。もちろん最後には、RETURNキーを押すことを忘れないでください。どうですか。PC-6601が女の人の声で朝のあいさつをしてくれましたね。何も聞こえなかった?ちゃんとPC-6601のボリュームは適当なところまで回してありますか?もし左にいっぱい回してあったなら、少し右に回してもう1度同じように入力してみてください。小さな声が出たでしよう。ボリュームをもっと右に回せば声はもっと大きくなります。えっ、右いっぱいに回してもまだ聞こえない? キー入力を間違えていませんか?文字列の最後にピリオド(.)を入れましたか?少しでも文字列に間違いがあると、PC-6601は何もしゃべってくれないことがあります。

さて、朝のあいさつを受けたのは良いけれど、何か元気のないあいさつで拍子抜けした人もいるんじゃないですか?もう少し元気を出してもらうには、次のように入力します。

talk"f  ^ohayo-."

“^”はアップアロー記号です。どうですか。声が高くなって少し元気が良くなりましたね。でも何だかアクセントになまりがあるみたいですね。標準語に近くなるようになまりを取るには、

talk"f ^oha +yo."

と入力してみてください。どうです、なかなかのあいさつになったでしょう。

さて、ここまでくれば、センスの良い人なら違うことをPC-6601にしゃべらせることもできるでしょう。そう、^や+のような特殊な記号は別として、文字列はローマ字を書く要領とほとんど同じなのです。普通のローマ字と違う点は、

「ン」. x
「チ」 ci
「ツ」 cu
「ッ」 q (つまり音)
「一」 - (のばす音)

の5つです。詳しくは音声文字列表(この章のうしろにまとめてあります。)を参照してください。

つまる音、のばす音は次のように入力します。

talk"f  kiqte +to hu-to-."

なお、しゃべらせる文字列(これを音声文字列といいます)の最後は、必ず“.”(ピリオド)または “?”(疑問符)で終結させるようにしてください。“?”で終結させた時は語尾を尻上がりに発声しますので、疑問調の感じになります。

talk"f  wakarimasuka?"

音声文字列の前にある3文字分“f”は制御文字列といい、声の質や発声速度などを決めるためのものです。これについては後でくわしく説明しますので、とりあえず“f”と入力するようにしてください。

制御文字列と音声文字列とをまとめて、音声テキストといいます。

音声テキスト = 制御文字列 + 音声文字列
  ┣ 性別の指定   ┣ 言葉の区切りの指定
┃ ┣ アクセントの指定
┣ 発声速度の指定 ┣ 長音の指定
┃ ┣ 調子の指定
┗ 固定後の指定 ┗ 無声化の指定

さて、こんどは前にも少し触れましたが、アクセント、イントネーションや区切りをつけるための特殊記号を説明しましょう。

まず、“+”(プラス)記号です。次のように入力してみてください。

talk"f  kakikueba."

「柿食えば」と聞こえますか?たぶん、あまりに単調であの俳句のイメージからはほど遠いように感じられたのではないでしょうか。これを少しでも名調子にするために、“+”記号を使ってイントネーションをつけてやりましょう。まず、前に入力した文を次のように一音一音、スペースで区切ってみます。

talk"f  ka ki ku e ba."

このようにして区切られた一音一音を、それぞれ“音節”といいます。どうですか?聞こえ方は前の文と少しも違わないですね。それではここで、次のように“+”記号をつけて入力してみてください。

talk"f  ka +ki +ku e ba."

どうです?イキイキとした調子になったでしょう。そう、“+”記号で、これをつけた音節は少し高い声でしゃべってくれるのです。

いま入力した例は、次のようにしてもほとんど同じです。

talk"f  ka +kiku eba."

つまり、音声文字列をスペースで区切るとき、意味や単語で区切るのではなく、日本語のもつイントネーションにしたがって区切り、音の高い音節がつづく言葉にこの“+”記号をつけてやると自然に聞こえるというわけなのです。

ここで、音節の話が出てきましたのでつけ加えておきますが、音声文字列の長さは最大30音節までにしてください。“a”、“ka”、“sya”などは母音1つにつき一音節とみなし、“x”(ン) や “q”(ッ) “-”(のばす音)も一音節に数えますので注意してください。

次に、“'”(アポストロフィ)を説明しましょう。この記号は、母音(a、i、u、e、o)にアクセントをつける働きを持っています。

talk"f  a' i u' e o'."

この例のように、アクセントをつけたい母音のうしろにこの記号をつけるようにしますが、スペースで区切られた言葉ごとに1つだけしか使えませんから注意してください。1つの単語に2つ以上のアクセントが必要となる音節ごとに区切って“'”(アポストロフィ)をつければ良いのです。

ただし、いま入力した文を注意深く聞けばわかるのですが、この記号を使うとイントネーションにも変化を与えてしまいます。

talk"f  ka +nega +naru'."
talk"f  ka +nega +na'ru."

この2つの例を聞き比べてみてください。前の例は「鐘が鳴る」、後の例は「金が成る」と聞こえませんか?そう、アクセントを与える“'”(アポストロフィ)の後にくる音節の音の高さが通常より低くなってしまい、イントネーションにも変化が出てしまうのです。もっとも、これを逆にうまく利用すればおもしろい方言をしゃべらせることもできますから、いろいろ試してみてください。特に、前の“+”記号との違いをよく覚えて使いこなすようにしてください。上手に組み合わせると、意外な効果が出ますよ。

次は、“^”(アップアロー)記号です。この記号は、音声文字列全体を高く、強く発声させるときに使います。

talk"f  ^ka +kiku eba."

“^”記号のないものと聞き比べてみれば、その違いがよくわかります。この記号は、発声させる音声文字列の先頭に1つだけつけられますが、“/”(スラッシュ)記号または “?”(疑問符)で文字列を区切ったときには、区切られた言葉の先頭にもこれをつけることができます。“/”と“?”の各記号については次に説明します。

さて、今までの例文では、PC-6601 は一息にしゃべりましたが、長い文字列をしゃべらせるときには一呼吸「間」を入れたいことがありますね。こんなときには、「間」を入れたいところに“/” (スラッシュ)記号を入れてやります。

talk"f  ici/ni/sax."

“/”記号は、ひとつの文中に2つまで使うことができます。区切った語尾を少し下げて発声し、一音節分の「間」をおいて次の言葉を発声します。

“?”(疑問符)は、“/”記号と同様に「間」を入れたいときに使いますが、

talk"f  uso?hoxto."

を聞けばわかるとおり、区切った語尾を尻上がりに発声します。“?”(疑問符)は、文字列終結用の“?”とは別に、ひとつの文中に2つまで使えます。

talk"f  kita?minami?nisi?"

なお、“/”と“?”を混ぜて使うこともできますが、このときは文字列終結用の“?”とは別にひ とつの文中に合計2つまで使えます。

以上で、特殊文字の説明はほぼ終わりですが、もうひとつ、母音の「無声化」を指定するための“*”(アスタリスク)記号があります。次の2つの文を聞き比べてみてください。

talk"f  to +bima su."
talk"f  to +bima su*."

上の文より下の文の方が、語尾がより自然な感じで聞こえますね。

talk"f  a +si su*taxto."

この例のように、外来語の場合は母音を無声化したほうがきれいに聞こえる言葉が数多くあります。使い方をいろいろ研究してみてください。

今までの説明で、PC-6601にいろいろな“言葉”をだいたい思いどおりにしゃべらせることができるようになったと思いますが、いかがですか。

ところで、今までの例では、PC-6601はみな女性の声でしゃべりましたね。実は、PC-6601は男性にもなれる(?)のです。そのためには、前にも少し触れましたが、“制御文字列”を変えれば良いのです。

talk"m  bo +isu* +sixsesa iza-."

どうですか?オクターブ低い男性の声になったでしょう。この例でわかるように、制御文字列の先頭を“m”にすると男性(male)の声に、“f”にすると女性(female)の声になるというわけです。

こんどは、しゃべるスピードを変えてみましょう。次のように入力してください。

talk"m4 o +sokunarimasita."

“おそくなりました”ね。制御文字列の2文字目は、発声速度を決めるもので、2〜6の数字を指定します。2がもっとも速く、数が増すごとに遅くなります。この2文字目を空白(スペース)にしたときは、2を指定した場合と同じ速度になります。

また、

poke &hfa5a,peek(&hfa5a) or &h20

を実行すると、発声速度1の指定ができます。

制御文字列の3文字目は、普通の場合(任意の音声文字列をしゃべらせたい場合)、空白(スペース)のままにしておいてください。実は、この3文字目に0〜4の数字を指定すると、PC-6601は“固定語”をしゃべります。固定語の内容は次のとおりです。

talk"f40."
終わりました
talk"f41."
お待ちください
talk"f42."
故障中です
talk"f43."
いらっしゃいませ
talk"f44."
ありがとうございました

固定語を発声させるときは、制御文字列の1文字目は“f”でも“m”でも女性の声となります。2文字目の速度指定は普通の場合と同じです。

また、この3文字目を“#”にすると、PC-6601に歌を歌わせることができます。但し、歌うためには楽譜が必要です。次は楽譜文字列の作り方について説明しましょう。

楽譜文字列は音声文字列の後に“:”(コロン)で区切ってつけます。

音声テキスト= 制御文字列 +音声文字列+":"+楽譜文字列
  ↓ ↓ ↓  
F     ←性別(男性・女性)の指定をします
  □   ←発声速度の指定をします
    # ←歌を歌うことを指定します

とにかく、歌わせてみましょう。次のように入力してください。

talk "f2#doremi.:cde"

どうですか?「ド〜レ〜ミ〜」と歌ったでしょう。 “do”には“c”、“re”には“d”というように1つの音節に対して音を表わすアルファベット(以後、音符と呼びます。)が1つ対応しています。音節の数え方は前に説明しましたね。

音を半音上げるときは“+”(プラス)下げるときは“-”(マイナス)の記号を音符の後につけます。つまり“+”がシャープ、“-”がフラットになるわけです。

talk "f2#aaaaa.:cc+dd+e" talk "f2#aaaaa.:cd-de-e"

次は、音の高さや、長さを変えてみましょう。

talk "f2#doremi.:o3l8cde"

“O”は音の高さを“L”は長さを変えるための記号です。また、音の強さを変えるには“V”を使います。同じテキストの中で“O“、L”、“V”を使って設定された値は、再び設定されるまで変わりません。

音符の後に直接数字をつけると、その音符だけ長さを変えることができます。

ちょっとPLAY文を思い出してみてください。共通している部分がありますね。

記号 意味 範囲 初期状態
Ox 高さの設定 (2≦x≦5) O4
Lx 長さの設定 (1≦x≦16) L4
Vx 強さの設定 (0≦x≦15) V8

ところで、休符はどのようにしてつけるのでしょうか? 次のように入力してください。

talk "f2#saita/saita.:cdercde"

休符には“R”を使います。長さの設定は音符の場合と同じで、“L”または“R”の後に数字をつけます。また“R”は音声文字列の“/”(スラッシュ)または、文の区切りに使う“?”(疑問符)と必ず対応させます。

これで楽譜文字列の作り方はだいたいわかりましたね。でも、もっと使いこなしていただくために、もう少し説明をつづけます。

次の2つの例を聞き比べてみてください。

talk "f2 a'iueo."
talk "f2#aiueo.:19ccccc"

同じ“a”にアクセント記号が入っているのに、歌っている方にはアクセントがつかないことに気が付きましたか?歌う時には “'”(アポストロフィ)や“^”(アップアロー)、“+”(プラス)を使ってアクセントやイントネーションを変えることができません。また、“?”を使って語尾を上げることもできません。

アクセントをつけて歌わせたい人は、次のように入力してみてください。

talk "f2#aiueo.:l8v12cv8cccc"

どうですか?アクセントをつけたい音符だけ、音の強さを変えてみました。但し、“V”は注意して使わなくてはなりません。個々の音節はそれぞれ異った音の強さをあらかじめ持っているので、データの上では同じ音の強さになっていても、ちがった強さに聞こえることがあるからです。

PC-6601の音声合成はPLAY文のように広い音域を持っていません。また、音の高さを急激に変えると音程が狂ってしまうことがあります。では、実際にどこまで歌えるのか聞いてみましょう。まず高音域です。次のように入力してください。

talk "f2#doremihasorasi doremihasorasi.:cdefgab o5cdefgab"

途中から音程がおかしくなりましたね。次は低音域です。

talk "f2#dosirasohamiredo.:o3co2bagfedc"

こんどは途中から音が同じになってしまいました。

これでだいたいの音域がわかりましたね。では最後に音の高さの変化をみてみましょう。次の2つの例を聞いてみてください。

talk "f2#dodododo.:o3cco4cc"
talk "f2#dodododo.:o3cco5cc"

2つめの例は高さの変化が急激すぎて、音が上がりきりませんね。

これで、TALK文についての説明は終りです。この章の終りに、TALK文の書式や、音声テキストの作り方についてまとめておきますので参考にしてください。

次にTALK文を使ったプログラム例をいくつか挙げておきますので、RUNさせて聞いてみてください。

<プログラム>

10 POKE &HFA5A,PEEK(&HFA5A) OR &H20
20 RESTORE
30 READ A$
40 IF A$="\" THEN GOTO 20
50 TALK "f1 "+A$
70 GOTO 30
100 DATA nama'mugi nama'gome namata'mago.
110 DATA tonarino kyakuwa yo'ku kakiku'u kyakuda.
120 DATA \

10行目を実行した後は発声速度1が指定できます。

このプログラムをRUNするとSTOPキーを押さない限り止まりません。しばらく聞いてみてください。

時々、途中でしゃべることをやめてしまうことがありませんか?キーボードを掌でグッと押してみてください。ほらね!この状態になったことをプログラムで判断するために、次の行を追加してもう一度操作を繰り返してみてください。

60 IF (PEEK(&HFA5A) AND &H10)<>0 THEN TALK "f41.":GOTO 50

くプログラム2>

10 TALK"f2 ka'mesax +koxniciwa."
20 TALK"m2 usagi' sa'x +koxniciwa/*i'i te'xkidesune."
30 TALK"f2 hoxtode'su ne'e/do'odesu*? kake'gkodemo simase'xka?"
40 TALK"m2 i'desu +yo/ano wama'made kyo-soudesu*."
50 TALK"f2 +yo'oi.","m2 do'x."

くプログラム3>

10 POKE &HFA5A,PEEK(&HFA5A) OR &H20
20 A$="F1#MASAKARI KATUIDA:L8O3F8.C16FGA8.G16FF16" 
30 B$="F1#KIXTAROO:O3L8G8.F16GAO4C"
40 C$="F1#KU-MANI MATAGARI:L8O3A8.A16GAO4C8.D16CO3A" 
50 D$="E1#OUMANO KEIKO:O4L8C8.C16O3AGAGF"
60 E$="F1#HAISIDODO HAIDODO:L16O3CCFL8FFA16A16FF"
70 F$="F1#HAISIDODO HAIDODO:L16O4CCDL8CO3AG16G16FF"
80 TALK A$,B$,C$,D$,E$,F$

くプログラム4>

10 READ A$,B$ 
20 IF A$="\" THEN END
30 TALK "f1#"+A$+":"+B$
40 GOTO 10
100 DATA haaruno ogawawa sarasara ikuyo
110 DATA o3egagego4cco3aagecde
120 DATA matubara tooku/kiiyuru tokoro
130 DATA o3f8g8aao4c8c8o3grf8g8ab-a8a8g
140 DATA akino yuuhini/teruuyamamomiizi
150 DATA o3ag8f8gaf2crfe8f8go4co3ag8f8g
160 DATA yuukiya koxko/arareya koxko
170 DATA l16c8.dc8.dc8c8o3a8r4a8.b-a8.b-a8a8f8
200 DATA\,\

TALK 文の書式

talk "f2 ^o +hayo-. "
制御文字列 音声文字列 音声テキスト talk "f2#doremi.:cde" 制御文字列 音声文字列 楽譜文字列 音声テキスト

制御文字列の作り方

制御文字は次の3文字より成っています。

f 2 n
┃ ┃ ┗固定語の指定
┃ ┗ 発声速度の指定
┗ ━ 性別の指定

性別の指定

f 女性の声
m 男性の声

発声速度の指定

  • 2〜6の範囲の数字を入れます。
  • 数が大きいほど発生速度は遅くなります。
  • 空白(スペース)を入れた時は、2を指定した時と同じ速度になります。
  • poke &hfa5a,peek(&hfa5a) or &h20を実行した後は、発声速度1の指定が可能になります。

固定語の指定

  • 0〜4の範囲の数字を入れます。
  • 任意の日本語音声を発生する時は空白(スペース)を、歌わせる時は“#”(ナンバーマーク)を入れます。

文字列の作り方

音声文字列は、音声を表わすローマ字表記の言葉と、イントネーションやアクセントなどを表わす特殊記号とで構成されています。

1.音声文字列表

下の表は小文字を使用していますが大文字も使用できます。

表中青で示した4つは、他と異なる表記のものです。

  あ か さ た な は ま や ら わ が ざ だ ば ぱ
あ a ka sa ta na ha ma ya ra wa ga za da ba pa
い i ki si ci ni hi mi   ri   gi zi di bi pi
う u ku su cu nu hu mu yu ru   gu zu du bu pu
え e ke se te ne he me   re   ge ze de be pe
お o ko so to no ho mo yo ro   go zo do bo po

  きゃ しゃ ちゃ にゃ ひゃ みゃ りゃ ぎゃ じゃ びゃ ぴゃ その他の特殊文字
あ kya sya cya nya hya mya rya gya zya bya pya ん → x
っ → q

ティ → ti
トゥ → tu
い                      
う kyu syu cyu nyu hyu myu ryu gyu zyu byu pyu
え kye sye cye nye hye mye rye gye zye bye pye
お kyo syo cyo nyo hyo myo ryo gyo zyo byo pyo
  • 音声文字列の最初には“x”と“q”は使用できません。
  • 音声文字列の最後には“q”は使用できません。

2.音節数の制限

1つの音声文字列の長さは、最大30音節までです。

“a”、“ka”、“sha”など、母音1つにつき一音節とみなし、“x”(ン)や“q”(ッ)、“ニ”(のばす音)も一音節に数えます。

3. “.”(ピリオド)または “?”(疑問符)で終結

音声文字列の最後は必ず“.”または“?”で終結してください。“?”で終結した場合は、疑問調に語尾を尻上がりに発声します。

4.特殊記号

“+”(プラス)
空白(スペース)で区切られた言葉の先頭につけると、その言葉を高く発声します。1つの音声文字列中でいくつでも使えますが、空白で区切られた言葉1つにつき1個ずつしかつけられません。
“'”(アポストロフィ)
母音のうしろにつけると、その母音にアクセントがつきます。“+”記号と同じように、空白で区切られた言葉1つにつき1個しかつけられませんが、1つの音声文字列中でいくつでも使えます。
“^”(アップアロー)
音声文字列の先頭、あるいは“/”(スラッシュ)または“?”(疑問符)で区切られた言葉の先頭につけます(したがって1つの音声文字列中には2個までしか使えないことになります)。
言葉全体を高く、強く発声します。
“/”(スラッシュ)
音声文字列をこれで区切ると、区切られた前の言葉の語尾を少し下げて発声し、一音節分の「間」をおいて次の言葉を発声します。ひとつの音声文字列中に2つまで使えます。
“?”(疑問符)
音声文字列をこれで区切ると、区切られた前の言葉の語尾を疑問調に尻上がりに発声します。ひとつの音声文字列中に、文字列終結用の“?”は別にして、2つまで使えます。
“*”(アスタリスク)
母音のうしろにつけると、その母音を無声化します。空白で区切られた言葉1つにつき1個ずつしかつけられませんが、1つの音声文字列中でいくつも使えます。サ行やハ行を無声化して歌わせても、正確な音程・長さで発声しないので注意してください。

楽譜文字の作り方

  • 楽譜文字列は、音声文字列の後に“:”(コロン)で区切ってつけます。
  • 音節の総数と音符の総数は一致しなくてはなりません。
  • 音声文字列で使われている特殊記号は/(スラッシュ)を除いてその役割を果たしません。
  • 音符にはドレミファソラシに対してCDEFGABを使用します。
  • 半音上げるには“+”(プラス)、下げるには“-”(マイナス)を音符の後につけます。
  • 休符には “R”を用います。これは音声文字列の“/”と対応します。
  • その他に使用する記号を下の表にまとめます。
記号 意味 範囲 初期状態
Ox 高さの設定 (2≦x≦5) O4
Lx 長さの設定 (1≦x≦16) L4
Vx 強さの設定 (0≦x≦15) V8

(楽譜文字列の使用例)

talk "f2#doremihasorasido.:l8o3cdefgabo4c"
talk "f2#saita/saita.:cdercde"