Making「音声出力」その4

Home PC-6001mkII Program etc

 このページでは、高速音声データの作成過程を書いています。

Making「音声出力」 Top


2013/03/06〜10:音声データ作成その3
 一音の出力はなんとかできたので、次は複数音か。というわけで、16バイト単位データの結合プログラムを作成する。

 データに応用を利かせるため、結合を行う音のデータの並びを1行1音でテキストファイルに記述し、そのテキストファイルを読み込んでバイナリ結合させるようにする。

画像

 音の結合部分はどうしたら良いか悩んだが、とりあえず1音目の最後の16バイトデータを内部変数の指定回数分フェードアウトさせながら追加することにした。

 出力された音声データをPC-6001VW上で鳴らしてみるが、譲歩して聞こえなくもないといったレベルだった。

2013/03/09〜12:ミク画像
 話は前後するが、動画にすることを見越して背景グラフィックの作成を行う。

 オリジナルの動画を参考に、作成することにする。動画の絵だと顔部分が小さすぎるので、バストアップの絵に変更しようかな...とりあえずこんな感じで。

画像

 次に、背景部分を付け加える。模様はちょっと作れなさそうだったので、それらしい色をおいて代用する。遠目で見ると、それなりに似た感じになったかな?

画像

 この時はこれで良いと思ったが、後日改めて見ると、服の色に違和感がある。やっぱり青系統にするかな...。

画像

 まあ、こんなところか。

2013/03/11〜13:マシン語その1
 肝心の音声データが滞っているが、ここらで気分を変えてmkII側のプログラムを作る。

 ここで、えすびさんの音声合成に関するブログを参照する。うむ、細かくタイミングの順序が書いてあるな。

 何度か読み返したが、一番重要なのは

「制限時間までにホルマントデータを設定しないと、エラーになります。」

 の部分のようだ。乱暴な言い方だが、正しい音声データを「制限時間」内にuPD7752に送り終わりさえすれば、ちゃんと発声されるという事だ。

 「制限時間」は初回のみ厳しいようなので、初回の7バイトデータの送信のみ、割り込みも止めて一気に送る事にする。

 それ以外の部分については、割込みが必要な処理と同時に使う可能性を考えて、割り込みは止めずに実行する。10ms単位の発声では7.5msの余裕があるようなので、途中で1つや2つの割り込みが入っても制限時間オーバーにはならないだろう。

 割り込み処理以外は過去に作ったプログラムとほぼ同じなので、割と簡単に作成した。

 あとは、オリジナル動画のように音声に合わせて歌詞を表示させたいな。表示するタイミングをどうするかは後で考えるとして、とりあえず歌詞を打ち込むか。

 こうして文字コードを16進で入力する簡単なお仕事を行う。

2013/03/13:音質改善
 とりあえず、歌詞を最後までつなげた音声データを作成して音声出力を行う。

 うーむ、結構ひいき目に聞いているのだが、今ひとつ聞き取れない。どうすりゃいいんだ...。思うに、結合前のデータ(16バイトデータ)の切り出し範囲があまりよろしくないのだろう。

 この時点で、16バイトデータの切り出し開始位置を「一定以上の音量を越えた時点」から「固定長」分とし、さらに終り部分の音量をフェードアウトさせていた。例えば「あー」だと以下の濃い青部分が出力する16バイトデータの音量となる。

画像

 ただこの基準だと、元の音声データによっては切り出し開始位置がかなり後ろになってしまうものがある。

画像

 元の音声データごとに切り出し開始位置を設定しようかと思いはしたが、面d...いや効率が悪いので、基準となる音量をもう少し下げてみる。
 ついでに、結局逆効果となっていたフェードアウト部分も取り去る。

画像

 さて、吉とでるか凶とでるか...

 幸い、変更前よりはだいぶマシに聞こえるようになった。多分歌詞を見ながらだと、もう少し聞き取れるだろう。

2013/03/16:仮お披露目
 3/16は、すがやみつる氏の講演会がある。P6erも大勢来るとの事で、まだ途中だけど持っていくかな?

 とりあえず、画像は出し惜しみしておいて(^^;)、ディスクイメージから起動できるようにマシン語部分をディスクに保存する。

 これをPC6001VWで実行すると、なぜか想定していたスピードよりも音声が速い。別のエミュではどうだろう と、PC6001Vでも試してみる。音声データの再生速度としては、こちらの方が忠実かな。

 講演会が終わった後、場所を移し二次会へ。ここで、頃合を見て仮お披露目してみる。反応は...ちょっと聞き取れない様子で微妙な感じだった。これでも、最初よりは結構マシになったと思ったんだけどな。何回も繰り返し聞いているうちに自分の耳が慣れたのかも知れないけど。

 とはいえ、これ以上音質を上げる方法も思いつかないので、このまま突っ走るかな?

2013/03/20:歌詞表示
 まだ作りこんでいない、歌詞表示に移る。

 音声と歌詞を、どう連動させるか?歌詞表示に音声を合わせるのはタイミング的に難しいので、必然的に音声出力側で都合が良いタイミングに歌詞表示をさせたほうが良いだろう。

 という事で今回考えた手段は、音声データに制御コードを埋め込む手段だ。マシン語で7バイトデータの1バイト目を読み込んだ時、F0H以上の場合は制御コードとみなし、歌詞の表示処理を行うことにする。

 あわせて、音声データを作成するHSPプログラムにも手を加える。元となる音のデータに「*」+数字 の歌詞描画行の情報を追加し、HSPでこのコードを見つけると対応する制御コードに変換し出力するようにする。
 あ、歌詞エリアの消去も要るな。歌詞エリアの消去を伴う場合は、さらに8を加えるか。

画像

 マシン語に歌詞の描画/消去ルーチンを加え、いざ実行!
 多少の表示文字のミスはあったが、処理自身はうまく動いた。やっぱり歌詞が出ると聞こえやすい...ような気がする。

 あとは、最終的に動画にするには避けられないであろう前奏か。

2013/03/31:前奏
 音声合成ではないが、話の展開上PSGによる演奏について書く。

 前奏部分だが、私は耳コピー能力が低いので、聴いた曲を楽譜に書き起こす事はほとんどできない。という事で、楽譜が載っているところがないかをまず探す事となった。幸いにして、今回の用途にちょうど良い動画が見つかった。

初音ミクの消失 ピアノソロ 楽譜/ The disappearance of Hatsune Miku piano sheet

 動画中にある楽譜に沿って、音を出してみることにする。...うっ、楽譜の左端にフラット記号が一杯だ。これはフラットのある位置の音がデフォルトで半音下がるのかな?

 イメージとしてオルゴール風の音にしたいというのがあって、一音のはじめのみ音量を上げてすぐ音量を下げるというMMLを書いていったのだが、四音目くらいで気づいた。長いよ!

画像


 この調子じゃやってられない。うーむ、今まで使った事がなかったが、よっしゅさん作のPSGドライバの力を借りるか。これだと、音データを別途作成できるので、まだ何とかなりそうだ。という事で、PSGドライバの説明書とにらめっこしつつ、前奏のデータを書き込んでいく。

画像

 今ひとつオルゴールの音色にはなり損ねたが、割と良い感じに前奏部分が仕上がった。あとはこれを音声出力+画面表示のプログラムとつなげて...できた!

 急いでHP用のページを作成し、公開へと移る。4/1のエイプリルフールネタと間違えられそうだが、ギリギリ3月中に出すことができた。

 これでとりあえず一区切り。ようやく次の段階に進めるかな?


その3 Making「音声出力」