以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
図1は、電子鍵盤楽器の一実施形態100の外観例を示す図である。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、音量の指定、ソング再生のテンポ設定、ソング再生開始、伴奏再生等の各種設定を指示する第1のスイッチパネル102と、ソングや伴奏の選曲や音色の選択等を行う第2のスイッチパネル103と、ソング再生時の歌詞、楽譜や各種設定情報を表示するLCD104(Liquid Crystal Display:液晶ディスプレイ)等を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
図2は、図1の電子鍵盤楽器100の制御システム200の一実施形態のハードウェア構成例を示す図である。図2において、制御システム200は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、音源LSI(大規模集積回路)204、音声合成LSI205、図1の鍵盤101、第1のスイッチパネル102、及び第2のスイッチパネル103が接続されるキースキャナ206、及び図1のLCD104が接続されるLCDコントローラ208が、それぞれシステムバス209に接続されている。また、CPU201には、自動演奏のシーケンスを制御するためのタイマ210が接続される。更に、音源LSI204及び音声合成LSI205からそれぞれ出力される楽音出力データ218及び歌声音声出力データ217は、D/Aコンバータ211、212によりそれぞれアナログ楽音出力信号及びアナログ歌声音声出力信号に変換される。アナログ楽音出力信号及びアナログ歌声音声出力信号は、ミキサ213で混合され、その混合信号がアンプ214で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。
CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラム及び各種固定データのほか、歌詞データ及び伴奏データを含む曲データを記憶する。
CPU201には、本実施形態で使用するタイマ210が実装されており、例えば電子鍵盤楽器100における自動演奏の進行をカウントする。
音源LSI204は、CPU201からの発音制御指示に従って、例えば特には図示しない波形ROMから楽音波形データを読み出し、D/Aコンバータ211に出力する。音源LSI204は、同時に最大256ボイスを発振させる能力を有する。
音声合成LSI205は、CPU201から、歌詞のテキストデータと音高と音長と開始フレームに関する情報を歌声データ215として与えられると、それに対応する歌声の音声データを合成し、D/Aコンバータ212に出力する。
キースキャナ206は、図1の鍵盤101の押鍵/離鍵状態、第1のスイッチパネル102、及び第2のスイッチパネル103のスイッチ操作状態を定常的に走査し、CPU201に割り込みを掛けて状態変化を伝える。
LCDコントローラ208は、LCD104の表示状態を制御するIC(集積回路)である。
図3は、図2の音声合成LSI205の構成例を示すブロック図である。この音声合成LSI205は、後述するソング再生処理により図2のCPU201から指示される歌声データ215を入力することにより、例えば下記文献に記載の「深層学習に基づく統計的音声合成」の技術に基づいて、歌声音声出力データ217を合成し出力する。
(文献)
橋本佳,高木信二「深層学習に基づく統計的音声合成」日本音響学会誌73巻1号(2017),pp.55−62
音声合成LSI205は、音声学習部301と音声合成部302を含む。音声学習部301は、学習用テキスト解析部303と学習用音響特徴量抽出部304とモデル学習部305とを含む。
学習用テキスト解析部303は、歌詞テキストと音高と音長を含む学習用歌声データ311を入力してそのデータを解析する。この結果、学習用テキスト解析部303は、学習用歌声データ311に対応する音素、品詞、単語、音高などを表現する離散数値系列である学習用言語特徴量系列313を推定して出力する。
学習用音響特徴量抽出部304は、上記歌詞テキストを或る歌手が歌うことによりマイク等を介して集録された学習用歌声音声データ312を入力して分析する。この結果、学習用音響特徴量抽出部304は、学習用歌声音声データ312に対応する音声の特徴を表す学習用音響特徴量系列314を抽出して出力する。
モデル学習部305は、下記(1)式に従って、学習用言語特徴量系列313(これを
と置く)と、音響モデル(これを
と置く)とから、学習用音響特徴量系列314(これを
と置く)が生成される確率(これを
と置く)を最大にするような音響モデル
を、機械学習により推定する。即ち、テキストである言語特徴量系列と音声である音響特徴量系列との関係が、音響モデルという統計モデルによって表現される。
モデル学習部305は、(1)式によって機械学習を行った結果算出される音響モデル
を表現するモデルパラメータを学習結果315として出力し、音声合成部302内の音響モデル部306に設定する。
音声合成部302は、テキスト解析部307と音響モデル部306と発声モデル部308とを含む。音声合成部302は、歌詞テキストを含む歌声データ215に対応する歌声音声出力データ217を、音響モデル部306に設定された音響モデルという統計モデルを用いて予測することにより合成する、統計的音声合成処理を実行する。
テキスト解析部307は、自動演奏に合わせた演奏者の演奏の結果として、図2のCPU201より指定される歌詞のテキストデータと音高と音長と開始フレームに関する情報を含む歌声データ215を入力し、そのデータを解析する。この結果、テキスト解析部307は、歌声データ215に対応する音素、品詞、単語などを表現する言語特徴量系列316を解析して出力する。
音響モデル部306は、言語特徴量系列316を入力することにより、それに対応する音響特徴量系列317を推定して出力する。即ち音響モデル部306は、下記(2)式に従って、テキスト解析部307から入力する言語特徴量系列316(これを再度
と置く)と、モデル学習部305での機械学習により学習結果315として設定された音響モデル
とに基づいて、音響特徴量系列317(これを再度
と置く)が生成される確率(これを
と置く)を最大にするような音響特徴量系列317の推定値
を推定する。
発声モデル部308は、音響特徴量系列317を入力することにより、CPU201より指定される歌詞テキストを含む歌声データ215に対応する歌声音声出力データ217を生成する。歌声音声出力データ217は、図2のD/Aコンバータ212からミキサ213及びアンプ214を介して出力され、特には図示しないスピーカから放音される。
学習用音響特徴量系列314や音響特徴量系列317で表される音響特徴量は、人間の声道をモデル化したスペクトル情報と、人間の声帯をモデル化した音源情報とを含む。スペクトルパラメータとしては例えば、メルケプストラムや線スペクトル対(Line Spectral Pairs:LSP)等を採用できる。音源情報としては、人間の音声のピッチ周波数を示す基本周波数(F0)を採用できる。発声モデル部308は、音源生成部309と合成フィルタ部310とを含む。音源生成部309は、音響モデル部306から入力する音源情報319の系列を順次入力することにより、例えば、音源情報319に含まれる基本周波数(F0)で周期的に繰り返され、音源情報319に含まれるパワー値を有するパルス列(有声音音素の場合)、又は音源情報319に含まれるパワー値を有するホワイトノイズ(無声音音素の場合)からなる音源信号を生成する。合成フィルタ部310は、音響モデル部306から順次入力するスペクトル情報318の系列に基づいて声道をモデル化するデジタルフィルタを形成し、音源生成部309から入力する音源信号を励振源信号として、デジタル信号の歌声音声出力データ217を生成し出力する。
本実施形態では、言語特徴量系列316から音響特徴量系列317を予測するために、音響モデル部306がディープニューラルネットワーク(Deep Neural Network:DNN)により実装される。これに対応して、音声学習部301内のモデル学習部305は、言語特徴量から音響特徴量へのDNN内の各ニューロンの非線形変換関数を表すモデルパラメータを学習し、そのモデルパラメータを学習結果315として音声合成部302内の音響モデル部306のDNNに出力する。
通常、音響特徴量は例えば5.1msec(ミリ秒)幅のフレームを単位として算出され、言語特徴量は音素を単位として算出される。従って、音響特徴量と言語特徴量は時間単位が異なる。DNNである音響モデル部306は、入力である言語特徴量系列316と出力である音響特徴量系列317の一対一の対応関係を表すモデルであるため、時間単位の異なる入出力データ対を用いてDNNを学習させることはできない。このため、本実施形態では、予めフレーム単位の音響特徴量系列と音素単位の言語特徴量系列の対応関係が設定され、フレーム単位の音響特徴量と言語特徴量の対が生成される。
図4は、上述の対応関係を示す音声合成LSI205の動作説明図である。例えば、童謡「きらきら星」の歌い出しの歌詞文字列「き」「ら」「き」(図4(a))に対応する言語特徴量系列である歌声音素列「/k/」「/i/」「/r/」「/a/」「/k/」「/i/」(図4(b))が得られているときに、これらの言語特徴量系列が、フレーム単位の音響特徴量系列(図4(c))に対して、1対多の関係(図4の(b)と(c)の関係)で対応付けられる。なお、言語特徴量は音響モデル部306におけるDNNへの入力として使用されるため、数値データとして表現する必要がある。このため、言語特徴量系列としては、「直前の音素は「/a/」であるか?」や「現在の単語に含まれる音素の数は?」などのコンテキストに関する質問に対する二値のデータ(0又は1)、或いは、連続値での回答を連結して得られる数値データが用意される。
図3の音声学習部301内のモデル学習部305は、図4の破線矢印群401として示されるように、フレーム単位で、図4(b)に対応する学習用言語特徴量系列313の音素列と図4(c)に対応する学習用音響特徴量系列314の対を音響モデル部306のDNNに順次与えて学習を行う。なお、音響モデル部306内のDNNは、図4のグレー色の丸印群として示されるように、入力層、1つ以上の中間層、及び出力層からなるニューロン群を含む。
一方、音声合成時には、上記フレーム単位で、図4(b)に対応する言語特徴量系列316の音素列が音響モデル部306のDNNに入力される。この結果、音響モデル部306のDNNは、図4の太実線矢印群402として示されるように、上記フレーム単位で、音響特徴量系列317を出力する。従って、発声モデル部308においても、上述のフレーム単位で、音響特徴量系列317に含まれる音源情報319及びスペクトル情報318がそれぞれ音源生成部309及び合成フィルタ部310に与えられて、音声合成が実行される。
この結果、発声モデル部308は、図4の太実線矢印群403として示されるように、フレーム毎に、例えば225サンプル(samples)ずつの歌声音声出力データ217を出力する。フレームは5.1msecの時間幅を有するため、1サンプルは「5.1msec÷225≒0.0227msec」であり、従って、歌声音声出力データ217のサンプリング周波数は1/0.0227≒44kHz(キロヘルツ)である。
DNNの学習は、フレーム単位の音響特徴量と言語特徴量の対を用いて、下記の(3)式で演算される二乗誤差最小化基準によって行われる。
ここで、
と
はそれぞれt番目のフレームtにおける音響特徴量と言語特徴量、
は音響モデル部306のDNNのモデルパラメータ、
はDNNによって表される非線形変換関数である。DNNのモデルパラメータは誤差逆伝播法によって効率良く推定することができる。前述した(1)式によって表される統計的音声合成におけるモデル学習部305の処理との対応関係を考慮すると、DNNの学習は下記の(4)式のように表すことができる。
ここで、下記(5)式が成立する。
上記(4)式及び(5)式のように、音響特徴量と言語特徴量の関係は、DNNの出力を平均ベクトルとする正規分布
によって表すことができる。DNNを用いた統計的音声合成処理では、通常、言語特徴量
に非依存な共分散行列、即ち全てのフレームにおいて同じ共分散行列
が用いられる。また、共分散行列
を単位行列とすると、(4)式は(3)式と等価な学習処理を示している。
図4で説明したように、音響モデル部306のDNNは、フレーム毎に独立に音響特徴量系列317を推定する。このため、得られる音響特徴量系列317には、合成音声の品質を低下させるような不連続が含まれる。そこで、本実施形態では例えば、動的特徴量を用いたパラメータ生成アルゴリズムを利用することにより、合成音声の品質を改善することができる。
図1、図2、及び図3の構成例を有する本実施形態の動作について、以下に詳細に説明する。図5は、歌詞制御技術の説明図である。図5(a)は、自動演奏に従って進行する歌詞テキストとメロディの関係を示す図である。例えば、前述した童謡「きらきら星」の歌い出しの場合、曲データには、「き/Twin(第1文字)」「ら/kle(第2文字)」「き/twin(第3文字)」「ら/kle(第4文字)」の歌詞の各文字(歌詞情報)と、歌詞の各文字を出力するt1、t2、t3、t4の各タイミング情報と、歌詞の各文字のメロディ音高「E4(第1音高)」「E4(第2音高)」「B4(第3音高)」「B4(第4音高)」等の各音高情報が、含まれている。t4の後のt5、t6、t7の各タイミングには、「ひ/lit(第5文字)」「か/tle(第6文字)」「る/star(第7文字)」の歌詞の各文字が対応付けられている。
例えば、図5(b)における、t1、t2、t3、t4のタイミングは、図5(a)の本来の発声タイミングt1、t2、t3、t4に対応している。ここで、演奏者が、本来の発声タイミングに対応したタイミングt1とt2で、図1の鍵盤101において、曲データに含まれる音高情報が示す第1音高E4と同じ音高E4の鍵を2度正しく押鍵したとする。この場合、図2のCPU201は、タイミングt1及びt2それぞれに応じたタイミングで、歌詞「き/Twin(第1文字)」及び「ら/kle(第2文字)」と、演奏者に指定された音高E4を示す情報と、例えばそれぞれ四分音符長の時間長を示す情報(少なくとも曲データ及び演奏者による演奏のいずれかに基づいて得られる)と、が含まれる歌声データ215を、図2の音声合成LSI205に出力する。この結果、音声合成LSI205は、タイミングt1及びt2でそれぞれ歌詞「き/Twin(第1文字)」及び「ら/kle(第2文字)」に対応するそれぞれ四分音符長の歌声音声出力データ217を第1音高(=指定された音高)E4と、第2音高(=指定された音高)E4でそれぞれ出力する。タイミングt1、t2に対応する判定「○」印は、曲データに含まれる音高情報が示す音高及び歌詞情報に応じて発声が正しく行われたことを示している。
また、演奏者は、本来の発声タイミングに対応したタイミングt4で、図1の鍵盤101において、本来の第4音高B4とは異なる音高G4の鍵を押鍵したとする。この場合、CPU201は、タイミングt4で歌詞「ら/kle(第4文字)」が指定され、タイミングt4で演奏された鍵に対応する音高G4が指定され、例えば八分音符長の時間長が指定された歌声データ215を、図2の音声合成LSI205に出力する。この結果、音声合成LSI205は、タイミングt4で歌詞「ら/kle(第4文字)」に対応する八分音符長の歌声音声出力データ217を、演奏(押鍵)された音高G4で出力する。
この本実施形態によれば、演奏者が本来の発声タイミングに応じたタイミングで演奏(押鍵)の操作を行った場合でも、演奏者による操作により指定された音高を歌声音声出力データ217に反映させることにより、発声される歌声に演奏者の意図をより良く反映させることを可能にする。
次に、本来の発声タイミングで、演奏者がそのタイミングに合わせて図1の鍵盤101のいずれの鍵も押鍵せずに、音高が指定されなかった場合には、以下の制御が実行される。図2のCPU201は、そのタイミングに対応する文字(歌詞情報)に応じた歌声を、曲データに含まれる音高情報が示す音高で出力するように制御する。この結果、図2又は図3の音声合成LSI205は、上記タイミングに合わせて、そのタイミングに対応する文字に応じた歌声音声出力データ217を、曲データに含まれる音高情報が示す音高で出力する。
例えば、図5(b)において、演奏者が、本来の発声タイミングに対応したタイミングt3に合わせて、図1の鍵盤101の鍵を演奏(押鍵)しなかったとする。この場合、図2のCPU201は、タイミングt3に対応する歌詞情報「き/twin(第3文字)」に応じた歌声を、曲データに含まれる音高情報が示す第3音高B4で出力するように指定した歌声データ215を、図2の音声合成LSI205に出力する。この結果、図2又は図3の音声合成LSI205は、上記タイミングt3に合わせて、タイミングt3に対応する歌詞情報「き/twin(第3文字)」に応じた歌声音声出力データ217を、対応する第3音高B4で出力する。
図5(c)のタイミングt3は、本実施形態による上述の制御動作が行われなかったと仮定した場合において、演奏者が、本来の発声タイミングに対応したタイミングt3に応じて、図1の鍵盤101の鍵を押鍵しなかった場合の制御動作を説明したものである。本実施形態による上述の制御動作が行われなかった場合には、図5(c)のタイミングt3では、本来発声されるべき歌詞文字列「き/twin(第3文字)」の発声は行われない。
以上のように、演奏者が本来の発声タイミングで演奏操作を行わなかった場合には、本実施形態による制御動作が実行されない場合には、発声されるべき歌詞文字列の発声が行われず、不自然な感じになってしまっていた。例えば、自動伴奏に合わせてメロディを演奏している場合に、自動伴奏による出力が歌詞に応じた歌声の出力より先に進んでしまう。これに対して、本実施形態では、演奏者が本来の発声タイミングで演奏操作を行わなかった場合には、曲データに含まれるそのタイミングに対応する歌詞情報(文字)に応じた歌声を、曲データに含まれる歌詞情報(文字)に対応する音高で出力させることが可能となる。これにより、本実施形態では、自然な歌詞進行を行うことができる。
次に、本来の発声タイミングのいずれのタイミングも到来していないタイミングで、演奏者が図1の鍵盤101の任意の鍵(操作子)を演奏(押鍵)操作すると、図2のCPU201は、音声合成LSI205において出力されている歌声音声出力データ217に応じた歌声の音高を、演奏操作により指定された音高に変更することを指示する歌声データ215を、図2の音声合成LSI205に出力する。この結果、図2又は図3の音声合成LSI205は、上記本来の発声タイミングのいずれのタイミングも到来していないタイミングで、発声中の歌声音声出力データ217の音高を、CPU201から指定された音高に変更する。
例えば図5(b)において、本来の発声タイミングt1、t2、t3、t4のいずれのタイミングも到来していないタイミングt1′、t3′、及びt4′で、演奏者が、図1の鍵盤101においてそれぞれ音高G4、A4、及びE4の鍵を押鍵したとする。この場合、CPU201は、音声合成LSI205においてそれぞれ出力されている歌詞文字列「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」の歌声音声出力データ217の各音高E4、B4、及びG4を、演奏操作により指定された各音高G4、A4、及びE4にそれぞれ変更して発声を継続させることを指示する歌声データ215を、図2の音声合成LSI205に出力する。この結果、図2又は図3の音声合成LSI205は、タイミングt1′、t3′、及びt4′で、発声中の歌詞文字列「き/Twin(第1文字)」に応じた「ぃ/in(第1文字´)」、「き(第3文字)」に応じた「ぃ/in(第3文字´)」、及び「ら(第4文字)」に応じた「ぁ/le(第4文字´)」の歌声音声出力データ217の各音高を、CPU201から指定された各音高G4、A4、及びE4にそれぞれ変更して発声を継続する。
図5(c)のタイミングt1′、t3′、及びt4′は、本実施形態による上述の制御動作が行われなかったと仮定した場合において、演奏者が、本来の発声タイミング以外のタイミングt1′、t3′、及びt4′で、図1の鍵盤101の鍵を演奏(押鍵)した場合の制御動作を説明したものである。本実施形態による上述の制御動作が行われなかった場合には、図5(c)のタイミングt1′、t3′、及びt4′では、本来の発声タイミングではない次の歌詞に応じた歌声がそれぞれ出力され、歌詞が進行してしまう。
以上のように、演奏者が本来の発声タイミング以外のタイミングで演奏操作を行った場合には、本実施形態による制御動作が実行されない場合には、歌詞の進行が先に進んでしまって、不自然な感じになってしまっていた。これに対して、本実施形態では、そのタイミングに発声されている歌声音声出力データ217の音高を演奏者により演奏された音高に変更して継続させる。この場合には、例えば図5(b)の本来の各ソング再生タイミングt1、t3、及びt4で発声された「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」に対応する歌声音声出力データ217が途切れることなく、その音高が各押鍵タイミングt1′、t3′、及びt4′において新たな押鍵により指定された音高に連続的に変化してゆくように聞こえる。これにより、本実施形態では、自然な歌詞進行を行うことができる。
なお、演奏者が本来の発声タイミング以外のタイミングで演奏操作を行った場合に、そのタイミングに発声されている歌声音声出力データ217に基づく発声の音高を演奏者により指定された音高に変更して、新たに繰り返すように制御してもよい。この場合には、例えば図5(b)の本来の各ソング再生タイミングt1、t3、及びt4で発声された「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」に対応する歌声音声出力データ217に続けて、押鍵タイミングt1′、t3′、及びt4′において新たな押鍵により指定されたそれぞれの音高で、「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」に対応する歌声音声出力データ217が別に発声されるように聞こえる。或いは、発声タイミング以外のタイミングでは、歌声音声出力データ217の発声を行わないように制御されてもよい。
更には、演奏者が本来の発声タイミング以外のタイミングで演奏操作を行った場合に、そのタイミングの直前ではなく直後のタイミングで発声されるべき歌声音声出力データ217の発声が、演奏者により指定された音高で先行して発声されるように制御されてもよい。この場合には、例えば図5(b)の本来の各ソング再生タイミングt2、t4、及びt5で発声されるべき「ら/kle(第2文字)」、「ら/kle(第4文字)」、及び「ひ/lit(第5文字)」に対応する歌声音声出力データ217に先行して、押鍵タイミングt1′、t3′、及びt4′において新たな押鍵により指定されたそれぞれの音高で「ら/kle(第2文字)」、「ら/kle(第4文字)」、及び「ひ/lit(第5文字)」に対応する歌声音声出力データ217が発声されてもよい。
図6は、本実施形態において、図2のROM202からRAM203に読み込まれる曲データのデータ構成例を示す図である。このデータ構成例は、MIDI(Musical Instrument Digital Interface)用ファイルフォーマットの一つであるスタンダードMIDIファイルのフォーマットに準拠している。この曲データは、チャンクと呼ばれるデータブロックから構成される。具体的には、曲データは、ファイルの先頭にあるヘッダチャンクと、それに続く歌詞パート用の歌詞データが格納されるトラックチャンク1と、伴奏パート用の演奏データが格納されるトラックチャンク2とから構成される。
ヘッダチャンクは、ChunkID、ChunkSize、FormatType、NumberOfTrack、及びTimeDivisionの4つの値からなる。ChunkIDは、ヘッダチャンクであることを示す"MThd"という半角4文字に対応する4バイトのアスキーコード「4D 54 68 64」(数字は16進数)である。ChunkSizeは、ヘッダチャンクにおいて、ChunkIDとChunkSizeを除く、FormatType、NumberOfTrack、及びTimeDivisionの部分のデータ長を示す4バイトデータであり、データ長は6バイト:「00 00 00 06」(数字は16進数)に固定されている。FormatTypeは、本実施形態の場合、複数トラックを使用するフォーマット1を意味する2バイトのデータ「00 01」(数字は16進数)である。NumberOfTrackは、本実施形態の場合、歌詞パートと伴奏パートに対応する2トラックを使用することを示す2バイトのデータ「00 02」(数字は16進数)である。TimeDivisionは、4分音符あたりの分解能を示すタイムベース値を示すデータであり、本実施形態の場合、10進法で480を示す2バイトのデータ「01 E0」(数字は16進数)である。
トラックチャンク1、2はそれぞれ、ChunkID、ChunkSizeと、DeltaTime_1[i]及びEvent_1[i](トラックチャンク1/歌詞パートの場合)又はDeltaTime_2[i]及びEvent_2[i](トラックチャンク2/伴奏パートの場合)からなる演奏データ組(0≦i≦L:トラックチャンク1/歌詞パートの場合、0≦i≦M:トラックチャンク2/伴奏パートの場合)とからなる。ChunkIDは、トラックチャンクであることを示す"MTrk"という半角4文字に対応する4バイトのアスキーコード「4D 54 72 6B」(数字は16進数)である。ChunkSizeは、各トラックチャンクにおいて、ChunkIDとChunkSizeを除く部分のデータ長を示す4バイトデータである。
DeltaTime_1[i]は、その直前のEvent_1[i−1]の実行時刻からの待ち時間(相対時間)を示す1〜4バイトの可変長データである。同様に、DeltaTime_2[i]は、その直前のEvent_2[i−1]の実行時刻からの待ち時間(相対時間)を示す1〜4バイトの可変長データである。Event_1[i]は、トラックチャンク1/歌詞パートにおいて、歌詞の発声タイミングと音高を指示するメタイベントである。Event_2[i]は、トラックチャンク2/伴奏パートにおいて、ノートオン又はノートオフを指示するMIDIイベント、又は拍子を指示するメタイベントである。トラックチャンク1/歌詞パートに対して、各演奏データ組DeltaTime_1[i]及びEvent_1[i]において、その直前のEvent_1[i−1]の実行時刻からDeltaTime_1[i]だけ待った上でEvent_1[i]が実行されることにより、歌詞の発声進行が実現される。一方、トラックチャンク2/伴奏パートに対して、各演奏データ組DeltaTime_2[i]及びEvent_2[i]において、その直前のEvent_2[i−1]の実行時刻からDeltaTime_2[i]だけ待った上でEvent_2[i]が実行されることにより、自動伴奏の進行が実現される。
図7は、本実施形態における電子楽器の制御処理例を示すメインフローチャートである。この制御処理は例えば、図2のCPU201が、ROM202からRAM203にロードされた制御処理プログラムを実行する動作である。
CPU201は、まず初期化処理を実行した後(ステップS701)、ステップS702からS708の一連の処理を繰り返し実行する。
この繰返し処理において、CPU201はまず、スイッチ処理を実行する(ステップS702)。ここでは、CPU201は、図2のキースキャナ206からの割込みに基づいて、図1の第1のスイッチパネル102又は第2のスイッチパネル103のスイッチ操作に対応する処理を実行する。
次に、CPU201は、図2のキースキャナ206からの割込みに基づいて図1の鍵盤101の何れかの鍵が操作されたか否かを判定して処理する鍵盤処理を実行する(ステップS703)。ここでは、CPU201は、演奏者による何れかの鍵の押鍵又は離鍵の操作に応じて、図2の音源LSI204に対して、発音開始又は発音停止を指示する発音制御データ216を出力する。
次に、CPU201は、図1のLCD104に表示すべきデータを処理し、そのデータを、図2のLCDコントローラ208を介してLCD104に表示する表示処理を実行する(ステップS704)。LCD104に表示されるデータとしては、例えば演奏される歌声音声出力データ217に対応する歌詞とその歌詞に対応するメロディの楽譜や、各種設定情報がある(後述する図13及び図14を参照)。
次に、CPU201は、ソング再生処理を実行する(ステップS705)。この処理においては、CPU201が、演奏者の演奏に基づいて図5で説明した制御処理を実行し、歌声データ215を生成して音声合成LSI205に出力する。
続いて、CPU201は、音源処理を実行する(ステップS706)。音源処理において、CPU201は、音源LSI204における発音中の楽音のエンベロープ制御等の制御処理を実行する。
続いて、CPU201は、音声合成処理を実行する(ステップS707)。音声合成処理において、CPU201は、音声合成LSI205による音声合成の実行を制御する。
最後にCPU201は、演奏者が特には図示しないパワーオフスイッチを押してパワーオフしたか否かを判定する(ステップS708)。ステップS708の判定がNOならば、CPU201は、ステップS702の処理に戻る。ステップS708の判定がYESならば、CPU201は、図7のフローチャートで示される制御処理を終了し、電子鍵盤楽器100の電源を切る。
図8(a)、(b)、及び(c)はそれぞれ、図7のステップS701の初期化処理、図7のステップS702のスイッチ処理における後述する図9のステップS902のテンポ変更処理、及び同じく図9のステップS906のソング開始処理の詳細例を示すフローチャートである。
まず、図7のステップS701の初期化処理の詳細例を示す図8(a)において、CPU201は、TickTimeの初期化処理を実行する。本実施形態において、歌詞の進行及び自動伴奏は、TickTimeという時間を単位として進行する。図6の曲データのヘッダチャンク内のTimeDivision値として指定されるタイムベース値は4分音符の分解能を示しており、この値が例えば480ならば、4分音符は480TickTimeの時間長を有する。また、図6の曲データのトラックチャンク内の待ち時間DeltaTime_1[i]値及びDeltaTime_2[i]値も、TickTimeの時間単位によりカウントされる。ここで、1TickTimeが実際に何秒になるかは、曲データに対して指定されるテンポによって異なる。今、テンポ値をTempo[ビート/分]、上記タイムベース値をTimeDivisionとすれば、TickTimeの秒数は、次式により算出される。
TickTime[秒]=60/Tempo/TimeDivision (6)
そこで、図8(a)のフローチャートで例示される初期化処理において、CPU201はまず、上記(6)式に対応する演算処理により、TickTime[秒]を算出する(ステップS801)。なお、テンポ値Tempoは、初期状態では図2のROM202に所定の値、例えば60[ビート/秒]が記憶されているとする。或いは、不揮発性メモリに、前回終了時のテンポ値が記憶されていてもよい。
次に、CPU201は、図2のタイマ210に対して、ステップS801で算出したTickTime[秒]によるタイマ割込みを設定する(ステップS802)。この結果、タイマ210において上記TickTime[秒]が経過する毎に、CPU201に対して歌詞進行及び自動伴奏のための割込み(以下「自動演奏割込み」と記載)が発生する。従って、この自動演奏割込みに基づいてCPU201で実行される自動演奏割込み処理(後述する図10)では、1TickTime毎に歌詞進行及び自動伴奏を進行させる制御処理が実行されることになる。
続いて、CPU201は、図2のRAM203の初期化等のその他初期化処理を実行する(ステップS803)。その後、CPU201は、図8(a)のフローチャートで例示される図7のステップS701の初期化処理を終了する。
図8(b)及び(c)のフローチャートについては、後述する。図9は、図7のステップS702のスイッチ処理の詳細例を示すフローチャートである。
CPU201はまず、図1の第1のスイッチパネル102内のテンポ変更スイッチにより歌詞進行及び自動伴奏のテンポが変更されたか否かを判定する(ステップS901)。その判定がYESならば、CPU201は、テンポ変更処理を実行する(ステップS902)。この処理の詳細は、図8(b)を用いて後述する。ステップS901の判定がNOならば、CPU201は、ステップS902の処理はスキップする。
次に、CPU201は、図1の第2のスイッチパネル103において何れかのソング曲が選曲されたか否かを判定する(ステップS903)。その判定がYESならば、CPU201は、ソング曲読込み処理を実行する(ステップS904)。この処理は、図6で説明したデータ構造を有する曲データを、図2のROM202からRAM203に読み込む処理である。これ以降、図6に例示されるデータ構造内のトラックチャンク1又は2に対するデータアクセスは、RAM203に読み込まれた曲データに対して実行される。ステップS903の判定がNOならば、CPU201は、ステップS904の処理はスキップする。
続いて、CPU201は、図1の第1のスイッチパネル102においてソング開始スイッチが操作されたか否かを判定する(ステップS905)。その判定がYESならば、CPU201は、ソング開始処理を実行する(ステップS906)。この処理の詳細は、図8(c)を用いて後述する。ステップS905の判定がNOならば、CPU201は、ステップS906の処理はスキップする。
最後に、CPU201は、図1の第1のスイッチパネル102又は第2のスイッチパネル103においてその他のスイッチが操作されたか否かを判定し、各スイッチ操作に対応する処理を実行する(ステップS907)。その後、CPU201は、図9のフローチャートで例示される図7のステップS702のスイッチ処理を終了する。
図8(b)は、図9のステップS902のテンポ変更処理の詳細例を示すフローチャートである。前述したように、テンポ値が変更されるとTickTime[秒]も変更になる。図8(b)のフローチャートでは、CPU201は、このTickTime[秒]の変更に関する制御処理を実行する。
まず、CPU201は、図7のステップS701の初期化処理で実行された図8(a)のステップS801の場合と同様にして、前述した(6)式に対応する演算処理により、TickTime[秒]を算出する(ステップS811)。なお、テンポ値Tempoは、図1の第1のスイッチパネル102内のテンポ変更スイッチにより変更された後の値がRAM203等に記憶されているものとする。
次に、CPU201は、図7のステップS701の初期化処理で実行された図8(a)のステップS802の場合と同様にして、図2のタイマ210に対して、ステップS811で算出したTickTime[秒]によるタイマ割込みを設定する(ステップS812)。その後、CPU201は、図8(b)のフローチャートで例示される図9のステップS902のテンポ変更処理を終了する。
図8(c)は、図9のステップS906のソング開始処理の詳細例を示すフローチャートである。
まず、CPU201は、自動演奏の進行において、TickTimeを単位として、直前のイベントの発生時刻からの相対時間をカウントするためのRAM203上の変数DeltaT_1(トラックチャンク1)及びDeltaT_2(トラックチャンク2)の値を共に0に初期設定する。次に、CPU201は、図6に例示される曲データのトラックチャンク1内の演奏データ組DeltaTime_1[i]及びEvent_1[i](1≦i≦L−1)の夫々iを指定するためのRAM203上の変数AutoIndex_1と、同じくトラックチャンク2内の演奏データ組DeltaTime_2[i]及びEvent_2[i](1≦i≦M−1)の夫々iを指定するためのRAM203上の変数AutoIndex_2の各値を共に0に初期設定する(以上、ステップS821)。これにより、図6の例では、初期状態としてまず、トラックチャンク1内の先頭の演奏データ組DeltaTime_1[0]とEvent_1[0]、及びトラックチャンク2内の先頭の演奏データ組DeltaTime_2[0]とEvent_2[0]がそれぞれ参照される。
次に、CPU201は、現在のソング位置を指示するRAM203上の変数SongIndexの値を0に初期設定する(ステップS822)。
更に、CPU201は、歌詞及び伴奏の進行をするか(=1)しないか(=0)を示すRAM203上の変数SongStartの値を1(進行する)に初期設定する(ステップS823)。
その後、CPU201は、演奏者が、図1の第1のスイッチパネル102により歌詞の再生に合わせて伴奏の再生を行う設定を行っているか否かを判定する(ステップS824)。
ステップS824の判定がYESならば、CPU201は、RAM203上の変数Bansouの値を1(伴奏有り)に設定する(ステップS825)。逆に、ステップS824の判定がNOならば、CPU201は、変数Bansouの値を0(伴奏無し)に設定する(ステップS826)。ステップS825又はS826の処理の後、CPU201は、図8(c)のフローチャートで示される図9のステップS906のソング開始処理を終了する。
図10は、図2のタイマ210においてTickTime[秒]毎に発生する割込み(図8(a)のステップS802又は図8(b)のステップS812を参照)に基づいて実行される自動演奏割込み処理の詳細例を示すフローチャートである。以下の処理は、図6に例示される曲データのトラックチャンク1及び2の演奏データ組に対して実行される。
まず、CPU201は、トラックチャンク1に対応する一連の処理(ステップS1001からS1006)を実行する。始めにCPU201は、SongStart値が1であるか否か、即ち歌詞及び伴奏の進行が指示されているか否かを判定する(ステップS1001)。
CPU201は、歌詞及び伴奏の進行が指示されていないと判定した(ステップS1001の判定がNOである)場合には、CPU201は、歌詞及び伴奏の進行は行わずに図10のフローチャートで例示される自動演奏割込み処理をそのまま終了する。
CPU201は、歌詞及び伴奏の進行が指示されていると判定した(ステップS1001の判定がYESである)場合には、トラックチャンク1に関する前回のイベントの発生時刻からの相対時刻を示すDeltaT_1値が、AutoIndex_1値が示すこれから実行しようとする演奏データ組の待ち時間DeltaTime_1[AutoIndex_1]に一致したか否かを判定する(ステップS1002)。
ステップS1002の判定がNOならば、CPU201は、トラックチャック1に関して、前回のイベントの発生時刻からの相対時刻を示すDeltaT_1値を+1インクリメントさせて、今回の割込みに対応する1TickTime単位分だけ時刻を進行させる(ステップS1003)。その後、CPU201は、後述するステップS1007に移行する。
ステップS1002の判定がYESになると、CPU201は、トラックチャック1に関して、AutoIndex_1値が示す演奏データ組のイベントEvent[AutoIndex_1]を実行する(ステップS1004)。このイベントは、歌詞データを含むソングイベントである。
続いて、CPU201は、トラックチャンク1内の次に実行すべきソングイベントの位置を示すAutoIndex_1値を、RAM203上の変数SongIndexに格納する(ステップS1004)。
更に、CPU201は、トラックチャンク1内の演奏データ組を参照するためのAutoIndex_1値を+1インクリメントする(ステップS1005)。
また、CPU201は、トラックチャンク1に関して今回参照したソングイベントの発生時刻からの相対時刻を示すDeltaT_1値を0にリセットする(ステップS1006)。その後、CPU201は、ステップS1007の処理に移行する。
次に、CPU201は、トラックチャンク2に対応する一連の処理(ステップS1007からS1013)を実行する。始めにCPU201は、トラックチャンク2に関する前回のイベントの発生時刻からの相対時刻を示すDeltaT_2値が、AutoIndex_2値が示すこれから実行しようとする演奏データ組の待ち時間DeltaTime_2[AutoIndex_2]に一致したか否かを判定する(ステップS1007)。
ステップS1007の判定がNOならば、CPU201は、トラックチャック2に関して、前回のイベントの発生時刻からの相対時刻を示すDeltaT_2値を+1インクリメントさせて、今回の割込みに対応する1TickTime単位分だけ時刻を進行させる(ステップS1008)。その後、CPU201は、図10のフローチャートで示される自動演奏割込み処理を終了する。
ステップS1007の判定がYESならば、CPU201は、伴奏再生を指示するRAM203上の変数Bansouの値が1(伴奏有り)であるか否かを判定する(ステップS1009)(図8(c)のステップS824からS826を参照)。
ステップS1009の判定がYESならば、CPU201は、AutoIndex_2値が示すトラックチャック2に関する伴奏に関するイベントEvent_2[AutoIndex_2]を実行する(ステップS1010)。ここで実行されるイベントEvent_2[AutoIndex_2]が、例えばノートオンイベントであれば、そのノートオンイベントにより指定されるキーナンバー及びベロシティにより、図2の音源LSI204に対して伴奏用の楽音の発音命令が発行される。一方、イベントEvent_2[AutoIndex_2]が、例えばノートオフイベントであれば、そのノートオフイベントにより指定されるキーナンバー及びベロシティにより、図2の音源LSI204に対して発音中の伴奏用の楽音の消音命令が発行される。
一方、ステップS1009の判定がNOならば、CPU201は、ステップS1010をスキップすることにより、今回の伴奏に関するイベントEvent_2[AutoIndex_2]は実行せずに、歌詞に同期した進行のために、次のステップS1011の処理に進んで、イベントを進める制御処理のみを実行する。
ステップS1010の後又はステップS1009の判定がNOの場合に、CPU201は、トラックチャンク2上の伴奏データのための演奏データ組を参照するためのAutoIndex_2値を+1インクリメントする(ステップS1011)。
また、CPU201は、トラックチャンク2に関して今回実行したイベントの発生時刻からの相対時刻を示すDeltaT_2値を0にリセットする(ステップS1012)。
そして、CPU201は、AutoIndex_2値が示す次に実行されるトラックチャンク2上の演奏データ組の待ち時間DeltaTime_2[AutoIndex_2]が0であるか否か、即ち、今回のイベントと同時に実行されるイベントであるか否かを判定する(ステップS1013)。
ステップS1013の判定がNOならば、CPU201は、図10のフローチャートで示される今回の自動演奏割込み処理を終了する。
ステップS1013の判定がYESならば、CPU201は、ステップS1009に戻って、AutoIndex_2値が示すトラックチャンク2上で次に実行される演奏データ組のイベントEvent_2[AutoIndex_2]に関する制御処理を繰り返す。CPU201は、今回同時に実行される回数分だけ、ステップS1009からS1013の処理を繰り返し実行する。以上の処理シーケンスは、例えば和音などのように複数のノートオンイベントが同時タイミングで発音されるような場合に実行される。
図11は、図7のステップS705のソング再生処理の第1の実施形態の詳細例を示すフローチャートである。この処理は、図5で説明した本実施形態による制御処理を実行するものである。
まずCPU201は、図10の自動演奏割込み処理におけるステップS1004で、RAM203上の変数SongIndexに、値がセットされてNull値でなくなっているか否かを判定する(ステップS1101)。このSongIndex値は、現在のタイミングが歌声の再生タイミングになっているか否かを示すものである。
ステップS1101の判定がYESになった、即ち現時点がソング再生のタイミング(図5の例のt1、t2、t3、t4等)になったら、CPU201は、図7のステップS703の鍵盤処理により演奏者による図1の鍵盤101上で新たな押鍵が検出されているか否かを判定する(ステップS1102)。
ステップS1102の判定がYESならば、CPU201は、演奏者による押鍵により指定された指定音高を、発声音高として特には図示しないレジスタ又はRAM203上の変数にセットする(ステップS1103)。
続いて、CPU201は、RAM203上の変数SongIndexが示すRAM203上の曲データのトラックチャンク1上のソングイベントEvent_1[SongIndex]から、歌詞文字列を読み出す。CPU201は、読み出した歌詞文字列に対応する歌声音声出力データ217を、ステップS1103で設定された押鍵に基づく指定音高がセットされた発声音高で発声させるための歌声データ215を生成し、音声合成LSI205に対して発声処理を指示する(ステップS1105)。
以上のステップS1103とS1105の処理は、図5(b)のソング再生タイミングt1、t2、又はt4に関して前述した制御処理に対応する。
一方、ステップS1101の判定により現時点がソング再生のタイミング(図5の例のt1、t2、t3、t4等)になったと判定されると共に、ステップS1102の判定がNO、現時点で即ち新規押鍵が検出されていないと判定された場合には、CPU201は、RAM203上の変数SongIndexが示すRAM203上の曲データのトラックチャンク1上のソングイベントEvent_1[SongIndex]から音高のデータを読み出し、この音高を発声音高として特には図示しないレジスタ又はRAM203上の変数にセットする(ステップS1104)。
その後、CPU201は、前述したステップS1105の処理を実行することにより、ソングイベントEvent_1[SongIndex]から読み出した歌詞文字列に対応する歌声音声出力データ217を、ステップS1104で設定された発声音高で発声させるための歌声データ215を生成し、音声合成LSI205に対して発声処理を指示する(ステップS1105)。
以上のステップS1104とS1105の処理は、図5(b)のソング再生タイミングt3に関して前述した制御処理に対応する。
ステップS1105の処理の後、CPU201は、RAM203上の変数SongIndexが示す再生を行ったソング位置を、RAM203上の変数SongIndex_preに記憶させる(ステップS1106)。
更に、CPU201は、変数SongIndexの値をNull値にクリアして、これ以降のタイミングをソング再生のタイミングでない状態にする(ステップS1107)。その後、CPU201は、図11のフローチャートで示される図7のステップS705のソング再生処理を終了する。
前述したステップS1101の判定がNOである、即ち現時点がソング再生のタイミングではないときには、CPU201は、図7のステップS703の鍵盤処理により演奏者による図1の鍵盤101上で新たな押鍵が検出されているか否かを判定する(ステップS1108)。
ステップS1108の判定がNOならば、CPU201はそのまま、図11のフローチャートで示される図7のステップS705のソング再生処理を終了する。
ステップS1108の判定がYESならば、CPU201は、現在音声合成LSI205が発声処理中の、RAM203上の変数SongIndex_preが示すRAM203上の曲データのトラックチャンク1上のソングイベントEvent_1[SongIndex_pre]の歌詞文字列に対応する歌声音声出力データ217の音高を、ステップS1108で検出された演奏者の押鍵に基づく指定音高に変更することを指示する歌声データ215を生成し、音声合成LSI205に出力する(ステップS1109)。このとき、歌声データ215において、既に発声処理中の歌詞の音素のうち後半部分の音素、例えば歌詞文字列「き」であればそれを構成する音素列「/k/」「/i/」のうちの後半の「/i/」が始まるフレーム(図4(b)及び(c)を参照)が、指定音高への変更の開始位置にセットされる。
以上のステップS1109の処理により、現在の押鍵タイミングの直前の本来のタイミング、例えば図5(b)のt1、t3、及びt4からそれぞれ発声されている歌声音声出力データ217の発声がその音高が演奏者により演奏された指定音高に変更されて、例えば図5(b)の現在の押鍵タイミングt1′、t3′、及びt4′でそれぞれの発声を継続させることが可能となる。
ステップS1109の処理の後、CPU201は、図11のフローチャートで示される図7のステップS705のソング再生処理を終了する。
図12は、図7のステップS705のソング再生処理の第2の実施形態の詳細例を示すフローチャートである。この処理は、図5で説明した本実施形態による他の制御処理を実行するものである。図12において、図11の第1の実施形態の場合と同じステップ番号を付したステップは、第1の実施形態の場合と同じ処理を実行するものとする。図12の第2の実施形態の制御処理が図11の第1の実施形態の制御処理と異なる部分は、第1の実施形態の説明で前述したステップS1101の判定がNOである、即ち現時点がソング再生のタイミングではない場合であって、ステップS1108の判定がYESのとき、即ち演奏者による新たな押鍵が検出されている場合のステップS1201とS1202の制御処理である。
図12において、ステップS1108の判定がYESの場合に、CPU201はまず、演奏者による押鍵により指定された指定音高を、発声音高として特には図示しないレジスタ又はRAM203上の変数にセットする(ステップS1201)。
その後、CPU201は、RAM203上の変数SongIndexが示すRAM203上の曲データのトラックチャンク1上のソングイベントEvent_1[SongIndex]から、歌詞文字列を読み出す。CPU201は、読み出した歌詞文字列に対応する歌声音声出力データ217を、ステップS1103で設定された押鍵に基づく指定音高がセットされた発声音高で新たに発声させるための歌声データ215を生成し、音声合成LSI205に対して発声処理を指示する(ステップS1202)。
ステップS1202の処理の後、CPU201は、図12のフローチャートで示される図7のステップS705のソング再生処理を終了する。
上述の第2の実施形態の制御処理により、前述したように、例えば図5(b)の本来のソング再生タイミングt1、t3、及びt4でそれぞれ発声された「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」に対応する歌声音声出力データ217に続けて、各押鍵タイミングt1′、t3′、及びt4′において新たな押鍵により指定されたそれぞれの指定音高で「き/Twin(第1文字)」、「き/twin(第3文字)」、及び「ら/kle(第4文字)」にそれぞれ対応する歌声音声出力データ217が別に発声されるように聞こえる効果がある。
図13は、図6のデータ構造として例示した曲データをMusicXML形式で実施した場合の曲データの構成例を示す図である。このようなデータ構成により、歌詞文字列(文字)とメロディ(音符)の楽譜データを持たせることが可能となる。そして、このような曲データをCPU201が例えば図7のステップS704の表示処理でパースすることにより、例えば図1の鍵盤101上で、現在ソング再生中の歌詞文字列に対応するメロディに対応する鍵を光らせて演奏者による歌詞文字列に対応する鍵の押鍵をガイドさせるような機能を持たせることが可能となる。同時に、例えば図14に示されるような表示例の現在ソング再生中の歌詞文字列とそれに対応する楽譜を、図1のLCD104に表示させることが可能となる。
以上説明した実施形態では、言語特徴量系列316から音響特徴量系列317を予測するために、音響モデル部306がDNN(ディープニューラルネットワーク)により実装される。その他、上記予測のために、音響モデル部306がHMM(Hidden Markov Model:隠れマルコフモデル)によって実装されてもよい。この場合、音声学習部301内のモデル学習部305は、音声の音響的な特徴を精度良くモデル化するために,コンテキストを考慮したモデルを学習する。音響特徴量を詳細にモデル化するために、直前、直後の音素だけでなく、アクセント、品詞、文長などの要因も考慮する。しかし、コンテキストの組み合わせが膨大なものとなるため、すべてのコンテキストの組み合わせについて精度良くコンテキスト依存モデルを学習することができる音声データを用意することは困難である。この問題を解決するために、モデル学習部305は、決定木に基づくコンテキストクラスタリングの技術を採用することができる。決定木に基づくコンテキストクラスタリングでは、「直前の音素は/a/であるか?」などのコンテキストに関する質問を用いてコンテキストに依存したモデルを分類し,類似したコンテキストのモデルパラメータを、学習結果315として音響モデル部306に設定する。決定木の構造によって考慮されるコンテキストが変化するため,適切な決定木構造を選択することで高精度かつ汎化性能の高いコンテキストに依存したモデルを推定できる。図3の音声合成部302内の音響モデル部306は、テキスト解析部307により歌声データ215から抽出された言語特徴量系列316に従って、コンテキストに依存したHMMを連結し,出力確率が最大となる音響特徴量系列317を予測する。
以上説明した実施形態は、電子鍵盤楽器について本発明を実施したものであるが、本発明は電子弦楽器など他の電子楽器にも適用することができる。
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
少なくとも第1音高を示す情報と、前記第1音高に対応する第1文字を含む歌詞情報と、を有する曲データの前記第1音高を指定すべきタイミングに応じて複数の操作子のうちのいずれかの操作子が操作されることにより音高が指定された場合に、前記第1文字に応じた歌声を、前記操作に応じて指定された音高で出力する歌声出力処理と、
前記第1音高を指定すべきタイミングに応じて前記複数の操作子のうちのいずれの操作子も操作されないことにより音高が指定されない場合に、前記第1文字に応じた歌声を、前記第1音高を指定すべきタイミングに合わせて前記第1音高で出力するように制御する歌声出力制御処理と、
を実行する電子楽器。
(付記2)
前記歌声出力処理及び前記歌声出力制御処理に合わせて伴奏データを出力する伴奏データ出力処理、を実行する付記1に記載の電子楽器。
(付記3)
前記曲データは、前記第1音高の次に指定すべき第2音高を示す情報と、前記歌詞情報としての前記第2音高に対応する第2文字と、を含み、
前記歌声出力処理又は前記歌声出力制御処理により前記第1文字に応じた歌声の出力後、前記第2音高を指定すべきタイミングの到来前に前記いずれかの操作子が操作されることにより音高が指定された場合に、前記第1文字に応じた歌声の音高を、前記操作に応じて指定された音高に変更する音高変更処理、を実行する付記1または2に記載の電子楽器。
(付記4)
前記歌声を音声合成により生成する音声合成処理、を実行し、
前記歌声出力処理は、音高を指定すべきタイミングに応じて音高が指定された場合に、指定されたタイミングに応じて前記音声合成処理により音声合成された歌声を指定された音高で出力するとともに、音高を指定すべきタイミングに応じて音高が指定されない場合に、指定すべきタイミングに合わせて前記音声合成処理により音声合成された歌声を指定すべき音高で出力する付記1乃至3のいずれかに記載の電子楽器。
(付記5)
前記音声合成処理は、或る歌手が歌った歌声データ及び歌詞データによる機械学習により生成された学習済みモデルに基づいて、前記或る歌手に応じた歌声を音声合成する付記4に記載の電子楽器。
(付記6)
前記操作子を操作することにより音高を指定すべきタイミングに合わせて、指定すべき音高を示す識別子を表示する表示処理、を実行する付記1乃至5のいずれかに記載の電子楽器。
(付記7)
電子楽器のコンピュータに、
少なくとも第1音高を示す情報と、前記第1音高に対応する第1文字を含む歌詞情報と、を有する曲データの前記第1音高を指定すべきタイミングに応じて複数の操作子のうちのいずれかの操作子が操作されることにより音高が指定された場合に、前記第1文字に応じた歌声を、前記操作に応じて指定された音高で出力する歌声出力処理と、
前記第1音高を指定すべきタイミングに応じて前記複数の操作子のうちのいずれの操作子も操作されないことにより音高が指定されない場合に、前記第1文字に応じた歌声を、前記第1音高を指定すべきタイミングに合わせて前記第1音高で出力するように制御する歌声出力制御処理と、
を実行させる方法。
(付記8)
電子楽器のコンピュータに、
少なくとも第1音高を示す情報と、前記第1音高に対応する第1文字を含む歌詞情報と、を有する曲データの前記第1音高を指定すべきタイミングに応じて複数の操作子のうちのいずれかの操作子が操作されることにより音高が指定された場合に、前記第1文字に応じた歌声を、前記操作に応じて指定された音高で出力する歌声出力処理と、
前記第1音高を指定すべきタイミングに応じて前記複数の操作子のうちのいずれの操作子も操作されないことにより音高が指定されない場合に、前記第1文字に応じた歌声を、前記第1音高を指定すべきタイミングに合わせて前記第1音高で出力するように制御する歌声出力制御処理と、
を実行させるプログラム。