Making「音声出力」

Home PC-6001mkII Program etc

関連リンク 滑舌厨早口テスト 初音ミクの消失 -イントロ- ながら音声 音階 生麦生米生卵 寿限無

更新日:2013/11/02
作成日:2011/12/26

 PC-6001mkIIの音声合成はまだまだ謎が多いですが、少しずつ紐解いていこうと思います。
 当時にわかってなかったことや、不明点、単純ミス、いまだに勘違いしている箇所などがありますので、全てを信じないで下さい(^_^;)。

2013/10/13:制御コード追加その2
 無音部分をカットする事で弊害が出た。「っ」が出せないじゃないか。

 ということで、制御コードに無音制御を追加する。処理は単純で、指定した長さ分だけ音量を0にして、Tone/NoiseをToneのみにしたデータを追加する。

 あと、「ー」もついでに実装しておこう。これは、直前の7バイトデータを指定した長さだけ繰り返し使用する。

 あとは、肝心のデータ入力だな。

2013/10/07〜09:制御コード追加その1
 音の途切れている部分が多い部分について対策する。

 主な原因としては、音データの始めにある無音部分が入っていたのと、後半の母音部分が長すぎるようだ。
 というわけで、最初の無音部分を飛ばして音の出始め部分から固定長部分を音速変換元のデータとして使用することにする。これで、多少マシになったかな?

 さて次!前作の仕組みを使って、制御コードの指定で音の長さと音程を可変にするようにする。
 音の長さは、とりあえず1000で10msにするかな?実際は10ms単位の発声になるけど、例えば6500にしたときに60ms, 70ms, 60ms, ...となるようにすれば、割と細かいテンポでも応用できるだろう。

 音程は、Pitchの値に足し合わせる数値をそのまま書く。若干人間にやさしくないが、理論上これで6601相当の音階は出せるはずだ。

2013/09/28〜10/06:実験
 何度か元動画を聞きながら、実現性について考える。

 音声データは、「初音ミクの消失 -イントロ-」と同様にHSPで作るのが良いだろう。音声の音階については、「音階」を応用すればたぶんできるだろう。あとは、データサイズと、高速音声の限界値か。

 データサイズについて少し考えてみる。P6mkIIの音声データは、10msで7バイトを消費する。動画が84秒だから、最高でざっと58,800バイト。データだけで結構ギリギリだ。画像も入れたいところだけど、オンメモリでは厳しいかな?

 音の速さについては、これはもう実際に鳴らしてみるしかない。ということで、前に作ったHSPのプログラムと音声の元データをひっぱり出してきて改造する。

 とりあえず音声の速度を変数で変えられるようにして、最速部分の音声を鳴らすよう設定する。...なんか妙に一音一音がが途切れるぞ?とりあえず、高速でしゃべらせてみたが、どうひいき目に聞いてもまともに聞こえない。

 前作よりも音の出方が悪いので、どうやら何かが間違えていそうだ。音声はもっとマシにはなるだろうが、このあたりどこで折り合いをつけるかになりそうだな。

微妙すぎる音声(WAVファイル)


2013/09/23:ターゲット変更
 鼻歌計画、一時器はやる気があったのだが、仕事が忙しくなって6月も超えたあたりでだんだんとやる気が失せていった。いつかやりたいという気持ちはあるけど、今ではなさげだ。

 それからしばらく経って9/23、初音ミク関係の歌って今どうなっているのかなと一覧の一番上を再生すると、「【初音ミク】滑舌厨早口テスト【オリジナルPV】」が再生された。

 これは...すごくPC-6001mkII向けの題材ではないだろうか?早口に関しては以前に研究していたし、音程の変化も比較的少ない。そして、再生時間も短い。三拍子揃っているではないか。

 ということで、気持ちは「滑舌厨早口テスト」に向かっていった。

2013/05/2x:鼻歌計画
 さて、次の段階に行くか。

 ここまでは、高速の音声がどこまで聞き取れるかを調べる目的があって、事前に作成した音声データを鳴らす方法を取ったが、この方法だと今回の約16秒の音声で約11KBかかるので、頑張っても本体メモリでは80〜90秒あたりが限界になってしまう。

 という事で、今度は一歩進めて音データをPC-6001mkII上である程度リアルタイムに加工できるようにしていきたいと思う。イメージは「鼻歌」で。

 さて、音声データ出力でやりたい事を列挙してみる。
  • 基本長(テンポのようなもの)
  • 音の長さ(基本長との掛け算が実際に鳴らす音の長さ)
  • 相対音程
  • 相対音量
  • 音の種類
  • 休符
  • 音のつなぎ
 これを仮のフォーマットに当てはめると、おおむねこんな感じか。
制御コード備考
00H-7FH音データPitch初期値の指定(0-127)
80H-8FH音データの種類(下4bitで最大16種類)
90H + 1バイト基本長
C0H-CFH相対音量(音データAmp値と足し合わせて00H-0FHの範囲に丸める)
D0H + 1バイト?音長
E0H休符
F0H音のつなぎ(音データの参照アドレスを最初に戻さない)
 ここまで一気に決めたけど、はたしてどこまでできるやら。

履歴

ページ項目
その1 2008/xx/xx:解析その1
2008/xx/xx:解析その2
2008/05/xx〜2009/09/xx:お蔵入りと蔵出し
2009/10/0x:7バイトデータ
2009/10/0x:生麦生米生卵
2009/10/1x:非7バイトの謎
2010/01/xx:音階
その2 2010/05/xx:解析その3
2010/06/xx:割り込み処理その1
2010/06/xx:割り込み処理その2
2010/06/30:ながら音声 V1.0
2011/01/09:改善
その3 2011/05/27〜29:マミさん
2011/06/xx:解析その4
2011/06/26〜07/01:ザカリテ
2013/01/xx〜02/xx:再始動
2013/02/xx:データ形式
2013/02/xx:目標
2013/02/xx:音声データ作成その1
2013/02/28〜03/03:音声データ作成その2
その4 2013/03/06〜10:音声データ作成その3
2013/03/09〜12:ミク画像
2013/03/11〜13:マシン語その1
2013/03/13:音質改善
2013/03/16:仮お披露目
2013/03/20:歌詞表示
2013/03/31:前奏


PC-6001mkII