2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« ワンチップ・ボーカロイド eVY1を試してみる(その4) | トップページ | ワンチップ・ボーカロイド eVY1を試してみる(おしまい) »

2013年11月 8日 (金)

ワンチップ・ボーカロイド eVY1を試してみる(その5)

花岡ちゃんのウィークエンド

今回は、eVY1に歌を歌わせる方法を解説します。

eVY1に歌を歌わせるには、まず、MIDIのシステムエクスクルーシブという特殊なメッセージで、歌詞の一部を送り込みます。この後、MIDIで曲を演奏すると、一音ごとに歌詞がついて演奏される訳です。
おもちゃの電子楽器に、あらかじめ組み込まれた曲を、ボタンを押すごとに一音ずつ演奏するものがありますが、それに似ています。

歌詞は、子音と母音の組み合わせで表現します。MIDI仕様書の34ページに一覧表があります。たとえば「花の街」の歌いだし「なないろのたにをこえて」は、次のような文字列になります。一覧表を見ながら変換しますが、なれてしまえば意外と簡単です。

"n a,n a,i,4 o,n o,t a,J i,o,k o,e,t e"

母音と子音の間は半角のスペースで、音と音の間は","で区切ります。文字列の最後にはヌルコード0x00を置く必要がありますが、文字列には必ず最後にヌルコードが入るので、心配する必要はありません。

この文字列をeVY1に送るシステムエクスクルーシブの仕様は、同じ仕様書の8ページの一番下にある、Phonetic symbolsに記載されています。

いっぺんに送れる歌詞の長さは、仕様書によれば、128バイトです。歌詞の一節ずつ、こまめに送った方がいいようです。

次にシーケンサで定期的に歌詞を送り込む方法について説明します。前の投稿で紹介したスケッチを開いた上で、読んでもらうとわかりやすいと思います。

「楽譜」は、const int hana[]に、74,48,47 のように数値の形で記載されています。これは、音程、音の長さ(ステップタイム)、鍵盤を押している長さ(ゲートタイム)を意味しています。ステップタイムは、四分音符を96にしています。48だと八分音符になります。
以前の投稿でちょっと触れたとおり、ゲートタイムが短いほど鋭いスタッカート奏法になり、ゲートタイムをステップタイムと同じにすると、レガート奏法になります。

シーケンサの関数 void seqence(int chan) は、これを読み込んでeVY1に送る訳です。引数のchanはMIDIチャンネルです。0だとボーカロイド、1だとピアノになるので、歌詞を入れる前は、ピアノ音で譜面データのチェックをするとわかりやすいです。

歌詞は 129,0 のように音程部分に129を入れ、二つ目のパラメータで、歌詞を入れた文字列配列、const char* wordTable[] の「節」を指定します。このコマンドのときに、void wordLoader(int wordseq) で、その節の歌詞を送信します。これを譜面データ、主に小節の始めの部分に、適時入れ込むことで、eVY1を歌わせています。

曲の終わりは、譜面の最後に 128,0,0 を置くことで指定します。シーケンサはここで終了し、メインループに戻ってきます。このスケッチでは、その後無限ループでダイナミックストップするので、もう一回聞くにはリセットボタンを押す必要があります。

駆け足で説明しましたが、あとはスケッチを見てください。とても単純なシーケンサです。そのため、これだけでは、ボーカロイドの歌声は単調です。次回は、一音ごとにベロシティを設定して、「花の街」を、もう少し人間らしく歌わせることに挑戦してみたいと思います。

« ワンチップ・ボーカロイド eVY1を試してみる(その4) | トップページ | ワンチップ・ボーカロイド eVY1を試してみる(おしまい) »

花岡ちゃんのウィークエンド」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1140145/53875401

この記事へのトラックバック一覧です: ワンチップ・ボーカロイド eVY1を試してみる(その5):

« ワンチップ・ボーカロイド eVY1を試してみる(その4) | トップページ | ワンチップ・ボーカロイド eVY1を試してみる(おしまい) »