以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図1は、電子鍵盤楽器の一実施形態100の外観例を示す図である。電子鍵盤楽器100は、操作子としての複数の鍵からなる鍵盤101と、音量の指定、歌詞自動再生のテンポ設定、歌詞自動再生開始等の各種設定を指示する第1のスイッチパネル102と、ソングの選曲や楽器音色の選択等を行う第2のスイッチパネル103を備える。また、鍵盤101の各鍵は、LED(Light Emitting Diode:発光ダイオード)104を備える。このLED104は、それが含まれる鍵が歌詞自動再生時に次に指定されるべき鍵であるときには最大輝度で光り、その鍵が歌詞自動再生時に次の次に指定されるべき鍵であるときには最大輝度の半分の輝度で光る。更に、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
図2は、図1の電子鍵盤楽器100の制御システム200の一実施形態のハードウェア構成例を示す図である。図2において、制御システム200は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、音源LSI(大規模集積回路)204、音声合成LSI205、図1の鍵盤101、第1のスイッチパネル102と第2のスイッチパネル103が接続されるキースキャナ206、及び図1の鍵盤101上の各鍵が備えるLED104が接続されるLEDコントローラ207、外部のネットワークとMIDIデータ等のやりとりを行うネットワークインタフェース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として与えられると、それに対応する歌声の音声データである歌声音声出力データ217を合成し、D/Aコンバータ212に出力する。
キースキャナ206は、図1の鍵盤101の押鍵/離鍵状態、第1のスイッチパネル102、及び第2のスイッチパネル103のスイッチ操作状態を定常的に走査し、CPU201に割込みをかけて状態変化を伝える。
LEDコントローラ207は、図1の鍵盤101上の各鍵が備える各LED104の表示状態を制御するIC(集積回路)である。
図3は、本実施形態における音声合成部300の構成例を示すブロック図である。ここで、音声合成部300は、図2の音声合成LSI205が実行する一機能として電子鍵盤楽器100に内蔵される。
音声合成部300は、図2のCPU201から指示される歌詞情報及び音高情報を含む歌声データ215を入力することにより、歌声音声出力データ217を合成し出力する。このとき音声合成部300のプロセッサは、音響モデル部301に設定されている音響モデルに対して、CPU201により入力される歌詞情報と音高情報を含む歌声データ215に応じて音響モデル部301が出力したスペクトル情報309と音源情報310とに基づいて、歌い手の歌声を推論した歌声音声出力データ217を出力する発声処理を実行する。音声合成部300は、例えば下記特許文献に記載の技術に基づいて実装される。
(特許文献):特許第6610714号公報
音声合成部300の動作の詳細は上記特許文献に開示されているが、その概略動作について以下に説明する。
音声合成部300は、テキスト解析部302と音響モデル部301と発声モデル部303とフォルマント補間処理部306とノイズ重畳部307とを含む。
音声合成部300は、歌詞のテキストである歌詞情報と音源情報310とを含む歌声データ215に対応する歌声音声出力データ321を、音響モデル部301に設定された音響モデルという統計モデルを用いて予測することにより合成する、統計的音声合成処理を実行する。
テキスト解析部302は、図2のCPU201より指定される歌詞の音素、音高等に関する歌詞情報を含む歌声データ215を入力し、そのデータを解析する。この結果、テキスト解析部302は、歌声データ215に対応する音素、品詞、単語等を表現する言語特徴量系列308を解析して出力する。
音響モデル部301は、言語特徴量系列308と歌声データ215中の音高情報とを入力することにより、それに対応するスペクトル情報309及び音源情報310を推定して出力する。即ち、音響モデル部301は、テキスト解析部302から入力する言語特徴量系列308及び歌声データ215中の音高情報とに基づいて、例えば機械学習により学習結果として設定された音響モデルを用いて、生成確率を最大にするようなスペクトル情報309及び音源情報310の推定値を出力する。
発声モデル部303は、スペクトル情報309及び音源情報310を入力することにより、CPU201より指定される歌詞情報と音高情報を含む歌声データ215に対応する歌声音声出力データ321を生成する。歌声音声出力データ321は、図2のD/Aコンバータ212からミキサ213及びアンプ214を介して出力され、特には図示しないスピーカから放音される。
音響モデル部301が出力する音響特徴量は、人間の声道をモデル化したスペクトル情報309と、人間の声帯をモデル化した音源情報310とを含む。スペクトル情報309のパラメータとしては例えば、人間の声道特性である複数のフォルマント周波数を効率的にモデル化することができる線スペクトル対(Line Spectral Pairs:LSP)又は線スペクトル周波数(Line Spectral Frequencies:LSF)等を採用できる。音源情報310としては、人間の音声のピッチ周波数を示す基本周波数(F0)及びパワー値を採用できる。発声モデル部303は、音源生成部304と合成フィルタ部305とを含む。音源生成部304は、人間の声帯をモデル化した部分であり、音響モデル部301から入力する音源情報310の系列を順次入力することにより、例えば、音源情報310に含まれる基本周波数(F0)及びパワー値で周期的に繰り返されるパルス列(有声音音素の場合)、又は音源情報310に含まれるパワー値を有するホワイトノイズ(無声音音素の場合)、或いはそれらが混合された信号からなる音源信号を生成する。合成フィルタ部305は、人間の声道をモデル化した部分であり、音響モデル部301から順次入力するスペクトル情報309の系列に基づいて声道をモデル化するデジタルフィルタを形成する。音源生成部304から入力する音源信号を励振源信号として上記デジタルフィルタが励振されることにより、歌声音声出力データ321のもととなるデジタル信号のフィルタ出力データ313が出力される。
歌声音声出力データ217に対するサンプリング周波数は、例えば16KHz(キロヘルツ)である。また、スペクトル情報309のパラメータとして、例えばLSP分析処理により得られるLSFパラメータが採用される場合、その更新フレーム周期は、例えば5ミリ秒である。更に、LSF分析処理の場合、分析窓長は例えば25ミリ秒、窓関数は例えばブラックマン窓、分析次数は例えば10次である。
図2及び図3の構成のもとでの、本実施形態の動作概略について説明する。まず、CPU201は、歌詞情報と音高情報とタイミング情報を少なくとも含む演奏ガイドデータに基づき、演奏者に楽曲の演奏をガイドする演奏ガイド手段として動作する。具体的には、図2において、CPU201は、メモリであるROM202に記憶されている自動再生のための歌詞情報と音高情報とタイミング情報とを少なくとも含む一連の演奏ガイドデータの組を順次読み出しながら、その演奏ガイドデータの組に含まれるタイミング情報に対応するタイミングでその演奏ガイドデータの組に含まれる歌詞情報と音高情報とを自動再生する、自動再生処理を実行する。この自動再生処理の詳細については、図8のフローチャートを用いて後述する。
このとき、CPU201は、自動再生される音高情報に対応する鍵盤101上の鍵を指示することで、自動再生に同期してユーザが押鍵操作して演奏レッスン(演奏練習)することをガイドする、演奏ガイド処理を実行する。より具体的には、CPU201は、この演奏ガイド処理において、自動再生のタイミングに同期させて、例えば図1の2つのLED104が光っている鍵として示されるように、次に自動再生される音高情報に対応する鍵(操作子)が備えるLED104を強い輝度例えば最大輝度で光らせると共に、次の次に自動再生される音高情報に対応する鍵が備えるLED104を弱い輝度例えば最大輝度の半分の輝度で光らせる。この演奏ガイド処理の詳細については、図9のフローチャートを用いて後述する。
次に、CPU201は、演奏者の演奏情報を取得する演奏情報取得手段として動作する。具体的には、CPU201は、上記演奏ガイドに従って、演奏者が図1の鍵盤101上の鍵を押鍵又は離鍵する演奏操作を取得する。
更に、CPU201は、演奏ガイドデータと演奏情報から、楽曲の進行中に演奏者の演奏を随時評価する演奏評価手段として動作する。具体的には、CPU201は、演奏レッスンにおける鍵の押鍵タイミング(操作タイミング)及び押鍵音高(操作音高)を自動再生されるタイミング情報及び音高情報と比較して、演奏レッスンを採点する採点処理を実行する。この採点処理の詳細については、図11のフローチャートを用いて後述する。
そして、CPU201は、演奏情報と歌詞情報に基づき、歌詞を歌声で発声する歌声発声手段として動作する。具体的には、CPU201は、演奏レッスンにおける鍵盤101上の鍵の押鍵タイミング(操作タイミング)及び鍵の押鍵音高(操作音高)が自動再生されるタイミング情報及び音高情報に正しく対応している場合に、その押鍵タイミングで、自動再生される歌詞情報と音高情報とを歌声データ215として図3のテキスト解析部302を介して音響モデル部301に入力し、音響モデル部301から出力される音源情報310が設定される音源生成部304が出力する音源信号によって音響モデル部301から出力されるスペクトル情報309に基づいて形成される合成フィルタ部305のデジタルフィルタを励振させることにより、フィルタ出力データ313を出力し、そのフィルタ出力データ313を図2の歌声音声出力データ217として出力させる。
このとき、CPU201は、演奏評価に対応して歌声の声質を変更する声質変更手段として動作する。具体的には、図2のCPU201及び図3の音声合成部300内のフォルマント補間処理部306とノイズ重畳部307は、発声処理において出力される歌声音声出力データ217の声質を、前述した採点処理での採点途中結果に応じて変化させる声質変更処理を実行する。
このとき、声質変更手段として動作するCPU201は、複数の特定の演奏評価に対応する複数の声質の間を、楽曲進行中の演奏評価に応じた割合で、補間する。また、CPU201は、例えば人声のフォルマント成分と人声に混合するノイズ成分の割合を変更することにより、声質を変更させる。
より具体的には、上述の声質変更処理において、まずCPU201が、前述した採点処理での採点途中結果に応じて、演奏レッスンの進行の度合いを示す練習進行度データ311を算出する。そして、図3のフォルマント補間処理部306が、採点途中結果が良い場合に対応する女性の声を含む心地よい声質を有し自動再生される図3の歌声データ215中の歌詞情報に対応して音響モデル部301から出力される1組以上のスペクトル情報309と、採点途中結果が悪い場合に対応する男性の声を含む耳障りな声質を有し自動再生される歌声データ215中の歌詞情報に対応して音響モデル部301から出力される1組以上のスペクトル情報309との間で、CPU201から与えられる練習進行度データ311に応じた割合で補間処理を実行することにより、目標スペクトル情報312を算出し、発声モデル部303内の合成フィルタ部305に入力させる。
上述の声質変更処理において、上述のフォルマント補間処理部306での動作に加えて、図3のノイズ混合比補間処理部316が、採点途中結果が良い場合に対応する女性の声を含む心地よい声質を有し自動再生される図3の歌声データ215中の歌詞情報に対応して音響モデル部301から出力される1組以上のノイズ混合比と、採点途中結果が悪い場合に対応する男性の声を含む耳障りな声質を有し自動再生される歌声データ215中の歌詞情報に対応して音響モデル部301から出力される1組以上のノイズ混合比との間で、CPU201から与えられる前述した練習進行度データ311に応じた割合で補間処理を実行することにより、目標ノイズ混合比317を算出してノイズ重畳部307に入力させる。そして、ノイズ重畳部307は、歌声音声出力データ217の最大振幅値にノイズ混合比補間処理部316が算出した目標ノイズ混合比317を乗じた振幅値を有するノイズデータ315を生成し、合成フィルタ部305から出力されるフィルタ出力データ313と混合して、歌声音声出力データ217として出力する。
上述の2つの声質変更処理により、例えば図4(a)に示されるように、ユーザが演奏レッスンにおいて電子鍵盤楽器100に歌唱を行わせる場合に、歌唱時の声質をあるキャラクタ(例えば男性大人)から別のキャラクタ(例えば女性大人)に徐々に変えていく機能(以降「モーフィング機能」と呼ぶ)が実現される。そして、本実施例では、図4(a)に示されるように、演奏レッスン開始時の歌唱機能の声質を例えば男性大人に設定し、演奏レッスン開始後課題をクリアし採点途中結果が上がっていくごとに、女性大人の声質に徐々に変化し、逆に点数が下がっていった場合は少し耳障りないわゆるダミ声と言われている声質に変化していく。
上述したように、本実施形態における音声合成部300は、人の声帯の振動に相当する励振源を人の声道の特性に相当するフィルタを通過させることで音声を発声する。図4(b)に示されるように、声道特性に相当するフィルタの特性はいわゆる人声のフォルマントに該当し、人の声のキャラクタはこの特性に大きく依存する。そこで、本実施形態では、図3のフォルマント補間処理部306において、採点途中結果に基づいてCPU201から出力される練習進行度データ311に基づいて音響モデル部301が出力する複数の特性のスペクトル情報309を補間して得られる目標スペクトル情報312によって、合成フィルタ部305における特性を徐々に変えていくことにより、或る人物の声のキャラクタを別の人の声のキャラクタに滑らかに変化させることができる。
また、合成フィルタ部305での特性の他に、白色ノイズ成分を音声に加えることでより本物に近い音声となる。そこで、本実施形態では更に、図3のノイズ混合比補間処理部316が採点途中結果に基づいてCPU201から出力される練習進行度データ311に基づく補間処理により得られる目標ノイズ混合比317を算出し、ノイズ重畳部307がその目標ノイズ混合比317に基づいて白色ノイズの加算量を増減させて得られるノイズデータ315を算出し、そのノイズデータ315を合成フィルタ部305が出力するフィルタ出力データ313に混合して歌声音声出力データを生成する。これにより、いわゆるハスキーボイスの特性などの表現豊かな特性を有する採点途中結果が反映された歌唱を行わせることが可能となる。
図1、図2、及び図3の構成を有する本実施形態の電子鍵盤楽器100の動作について、以下に詳細に説明する。
図5(a)は、本実施形態において、図2のROM202からRAM203に読み込まれる演奏ガイドデータのデータ構成例を示す図である。このデータ構成例は、MIDI用ファイルフォーマットの一つであるスタンダードMIDIファイルのフォーマットに準拠している。この曲データは、チャンクと呼ばれるデータブロックから構成される。具体的には、曲データは、ファイルの先頭にあるヘッダチャンクと、それに続く歌詞パート用の歌詞データが格納されるトラックチャンクとから構成される。なお、伴奏パート用の自動演奏データが格納されるトラックチャンクを別に備えてもよい。
ヘッダチャンクは、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は、本実施形態の場合、単一トラックを使用するフォーマット0を意味する2バイトのデータ「00 00」(数字は16進数)である。NumberOfTrackは、本実施形態の場合、歌詞パートに対応する1トラックを使用することを示す2バイトのデータ「00 01」(数字は16進数)である。TimeDivisionは、4分音符あたりの分解能を示すタイムベース値を示すデータであり、本実施形態の場合、10進法で480を示す2バイトのデータ「01 E0」(数字は16進数)である。
トラックチャンクは、ChunkID、ChunkSizeと、DeltaTime[i]及びEvent[i]からなる演奏データ組(0≦i≦L-1)とからなる。ChunkIDは、トラックチャンクであることを示す"MTrk"という半角4文字に対応する4バイトのアスキーコード「4D 54 72 6B」(数字は16進数)である。ChunkSizeは、トラックチャンクにおいて、ChunkIDとChunkSizeを除く部分のデータ長を示す4バイトデータである。
DeltaTime[i]は、その直前のEvent[i-1](i=0の場合は先頭)の実行時刻からの待ち時間(相対時間)を示すタイミング情報であり、1~4バイトの可変長データである。Event[i]は、歌詞のテキストデータである歌詞情報と音高を指示する音高情報を含むメタイベントである。各演奏ガイドデータ組DeltaTime1[i]及びEvent[i]において、その直前のEvent[i-1]の実行時刻からDeltaTime[i]だけ待った上でEvent[i]が実行されることにより、歌詞の自動再生(発声)の進行が実現される。
図5(b)及び図5(c)のデータ構成については後述する。
図6は、演奏レッスンの全体処理の例を示すフローチャートである。この処理は、図2において、CPU201がROM202に記憶された演奏レッスンの全体処理プログラムをRAM203にロードして実行する処理として実現され、電子鍵盤楽器100を制御する特には図示しないメイン処理プログラムから呼び出される。
まず、CPU201は、ユーザに、図1の第2のスイッチパネル103を操作させて、ユーザが演奏レッスンを実施したい歌声曲を選択させる(ステップS601)。
次に、CPU201は、レッスン処理を実行する(ステップS602)。この処理の詳細については、後述する。
レッスン処理によりユーザの演奏レッスンが終了すると、CPU201は、ユーザ演奏の評価得点をフィードバックする(ステップS603)。ここでは、CPU201は、図2の音声合成LSI205に歌声データ215を与えることにより、ユーザが最終的に到達した評価得点に対応した声質にて音声で評価得点を発声する。後述するように、点数は0点から10点までの11段階あり、満点の10点であれば女声で「じゅってん」、0点であればダミ声で「れいてん」と発声される。
図7は、図6のステップS602のレッスン処理の詳細例を示すフローチャートである。CPU201はまず、初期化処理を実行する(ステップS701)。この処理では、レッスン処理の実行に必要なパラメータの初期化や、最初に押鍵すべき図1の鍵盤101上の鍵のLED104を最大輝度の半分の輝度での点灯状態にする等の処理が実行される。
次に、CPU201は、図6のステップS601においてユーザが選択した歌声曲の演奏ガイドデータの再生を開始するための、歌声曲開始処理を実行する(ステップS702)。この歌声曲開始処理において、CPU201は、TickTimeの初期化処理を実行する。本実施形態において、歌詞の進行は、TickTimeという時間を単位として進行する。図5の曲データのヘッダチャンク内のTimeDivision値として指定されるタイムベース値は4分音符の分解能を示しており、この値が例えば480ならば、4分音符は480TickTimeの時間長を有する。また、図5の曲データのトラックチャンク内の待ち時間DeltaTime[i]値も、TickTimeの時間単位によりカウントされる。ここで、1TickTimeが実際に何秒になるかは、曲データに対して指定されるテンポによって異なる。今、テンポ値をTempo[ビート/分]、上記タイムベース値をTimeDivisionとすれば、CPU201は、下記(1)式に対応する演算処理により、TickTime[秒]を算出する。
次に、CPU201は、ステップS702の歌声曲開始処理において、図2のタイマ210に対して、上記算出したTickTime[秒]によるタイマ割込みを設定する。この結果、タイマ210において上記TickTime[秒]が経過する毎に、CPU201に対して歌声曲進行のための割込み(以下「自動再生割込み」と記載)が発生する。従って、この自動再生割込みに基づいてCPU201で実行される自動再生処理(後述する図8)では、1TickTime毎に演奏ガイドデータの組を進行させる制御処理が実行されることになる。
なお、テンポ値Tempoは、初期状態では図2のROM202に所定の値、例えば60[ビート/秒]が記憶されているとする。楽曲のテンポ値が演奏ガイドデータのイベントとして演奏ガイドデータに含まれている場合には、そのテンポ値を使用してもよい。或いは、不揮発性メモリに、前回終了時のテンポ値が記憶されていてもよい。また、ユーザは、図1の第1のスイッチパネル102等を操作して、テンポ値を変更することができ、特には図示しないが、その度に上記TickTime[秒]の算出とタイマ210へのタイマ割込み設定とが実行される。
続いて、CPU201は、ステップS702の歌声曲開始処理において、自動再生処理の進行において、TickTimeを単位として、直前のイベントの発生時刻からの相対時間をカウントするためのRAM203上の変数DeltaTの値を0に初期設定する。次に、CPU201は、図5に例示される曲データのトラックチャンク内の演奏データ組DeltaTime[i]及びEvent[i](1≦i≦L-1)の夫々iの値を指定するためのRAM203上の変数SongIndexの値を0に初期設定する。これにより、図5の例では、初期状態としてまず、トラックチャンク内の先頭の演奏データ組DeltaTime[0]とEvent[0]が参照される。更に、CPU201は、歌詞の進行をするか(=1)しないか(=0)を示すRAM203上の変数SongStartの値を1(進行する)に初期設定する。
更に、CPU201は、ステップS702の歌声曲開始処理において、RAM203上の変数Marginの値を、上記DeltaTime[0]の値の30%に最も近い整数値とする。Margin変数値については後述する。また、CPU201は、ステップS702の歌声曲開始処理において、RAM203上の変数である後述する正解フラグの値と、後述する変数NoteOn_in、NoteOn_out、及びNoteOnを、それぞれ0にリセットする。
ステップS702の処理の後、CPU201は、ステップS703からS709までの一連の処理を繰り返し実行することにより、歌詞の自動再生処理とユーザによる演奏レッスンの処理を進行させる。
図8は、上記図7のステップS703からS709の繰返し処理の期間中に、上記TickTime[秒]毎にタイマ210で発生する自動再生割込みに基づいて実行される自動再生処理の例を示すフローチャートである。この処理は、タイマ210から自動再生割込みが発生した場合に、CPU201が、図7のレッスン処理において実行中の処理(ステップS703からS709の何れかの処理)を中断し、ROM202からRAM203に予めロードされている自動再生処理プログラムを実行する機能として実現される。
まず、CPU201は、RAM203の変数SongStart値が1であるか否か、即ち歌詞の自動再生の進行が指示されているか否かを判定する(ステップS801)。
CPU201は、歌詞の自動再生の進行が指示されていないと判定した(ステップS801の判定がNOである)場合には、CPU201は、歌詞の進行は行わずに図8のフローチャートで例示される自動再生処理をそのまま終了する。
CPU201は、歌詞の自動再生の進行が指示されていると判定した(ステップS801の判定がYESである)場合には、RAM203にロードされている図5(a)のデータ構成を有する演奏ガイドデータのトラックチャンクに関する前回のイベントの発生時刻からの相対時刻を示すDeltaT値が、SongIndex値が示すこれから実行しようとする演奏ガイドデータ組の待ち時間DeltaTime[SongIndex]からMargin値を減算した値に到達したか否かを判定する(ステップS802)。ステップS802の判定がNOならば、更に、DeltaT値が、DeltaTime[SongIndex]にMargin値を加算した値に到達したか否かを判定する(ステップS803)。
本実施形態においては、各演奏ガイドデータの組の歌詞が発声されるべきタイミングでユーザが図1の鍵盤101上で上記組に設定されている音高情報が示す音高に一致する正しい音高の鍵を押鍵したか否かが判定される。この場合、ユーザの演奏レッスンに余裕を持たせるために、図4(c)に示されるように、ユーザの押鍵を正解とするタイミングは、各演奏ガイドデータの組に設定されているタイミング情報=DeltaTime[SongIndex]にぴったり一致するタイミングの前後に幅を持たせるようにすることができる。この時間幅を押鍵期間と呼ぶこととする。押鍵期間はジャストタイミングの前後100ミリ秒のように絶対時間とすることもできるが、本実施例では音長の30%をジャストタイミングの前後の押鍵期間とする。即ち、テンポ60のときの四分音符であれば音長は1秒であるからジャストタイミングの前後300ミリ秒の区間、即ち600ミリ秒が押鍵期間となる。ジャストタイミングの前後を同じ時間だけ押鍵期間とするのではなく、前を20%、後ろを40%のように設定することもできる。本実施形態では、ステップS809でジャストタイミングDeltaTime[SongIndex]の30%の値が計算されてRAM203上の変数Marginにセットされる。そして、ステップS802で、前回のイベントの発生時刻からの相対時刻を示す変数値DeltaTが押鍵期間の開始時刻に対応する“DeltaTime[SongIndex]-Margin”に到達したか否かが判定され、続くステップS803で、DeltaTが押鍵期間の終了時刻に対応する“DeltaTime[SongIndex]+Margin”に到達したか否かが判定される。
ステップS802及びS803の何れの判定もNOの場合、CPU201は、前回のイベントの発生時刻からの相対時刻を示すRAM203上の変数DeltaTの値を+1インクリメントさせて、今回の割込みに対応する1TickTime単位分だけ時刻を進行させる(ステップS804)。その後、CPU201は、図8のフローチャートで示される自動再生処理を終了し、図7のレッスン処理の中断していた処理の実行に戻る。
ステップS802において、前回のイベントの発生時刻からの相対時刻を示す変数値DeltaTが押鍵期間の開始時刻に対応する“DeltaTime[SongIndex]-Margin”に到達したと判定された場合、CPU201は、押鍵期間に突入したことを示すRAM203上の変数NoteOn_inの値を1にセットし、更に、押鍵期間であることを示すRAM203上の変数NoteOnの値を1にセットする(ステップS805)。続いて、CPU201は、ステップS804の処理に進んで、前回のイベントの発生時刻からの相対時刻を示すRAM203上の変数DeltaTの値を+1インクリメントさせて、今回の割込みに対応する1TickTime単位分だけ時刻を進行させ、その後、図8のフローチャートで示される自動再生処理を終了し、図7のレッスン処理において中断していた処理の実行に戻る。
ステップS802の判定がNOとなった後、ステップS803において、前回のイベントの発生時刻からの相対時刻を示す変数値DeltaTが押鍵期間の終了時刻に対応する“DeltaTime[SongIndex]+Margin”に到達したと判定された場合、CPU201は、押鍵期間からちょうど出るところであることを示すRAM203上の変数NoteOn_outの値を1にセットし、更に、押鍵期間であることを示すRAM203上の変数NoteOnの値を押鍵期間でなくなったことを示す値0にセットする(ステップS806)。
次に、CPU501は、変数DeltaTの値がDeltaTime[SongIndex]から既に進んでいる分に1をプラスした時点「DeltaT-DeltaTime[SongIndex]+1」を新たな変数DeltaTの値とする(ステップS807)。
更に、CPU201は、到達判定に用いる演奏ガイドデータの組を1つ進めるために、RAM203上の変数SongIndexの値を+1インクリメントする(ステップS808)。
最後に、CPU201は、次の演奏ガイドデータの組への到達判定に用いる図4(c)のMargin値を、新たに更新されたSongIndex値によって参照される新たなDeltaTime[SongIndex]値に0.3(30%)を乗じた値「INT(DeltaTime[SongIndex]×0.3)」(「INT()」は括弧内の値の整数値を算出する演算を示す)に設定する(ステップS809)。その後、CPU201は、図8のフローチャートで示される自動再生処理を終了し、図7のレッスン処理の中断していた処理の実行に戻る。
図7のフローチャートの説明に戻り、ステップS703からS709の繰り返し処理において、CPU201はまず、演奏ガイド処理を実行する(ステップS703)。CPU201は、この演奏ガイド処理において、自動再生のタイミングに同期させて、例えば図1の2つのLED104が光っている鍵として示されるように、次に自動再生される音高情報に対応する鍵(操作子)が備えるLED104を強い輝度例えば最大輝度で光らせると共に、次の次に自動再生される音高情報に対応する鍵が備えるLED104を弱い輝度例えば最大輝度の半分の輝度で光らせる。この演奏ガイド処理の詳細については、図9のフローチャートを用いて後述する。
次に、CPU201は、押鍵・離鍵処理を実行する(ステップS704)。この押鍵・離鍵処理において、CPU201は、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵された場合において、演奏レッスンにおける鍵盤101上の鍵(操作子)の押鍵タイミング(操作タイミング)が自動再生されるタイミング情報に正しく対応しており(図4(c)の押鍵期間に入っており)、かつ鍵の押鍵音高(操作音高)が演奏ガイドデータの組の音高情報に正しく対応している(一致している)と判定した場合には、その押鍵タイミングで図2の音声合成LSI205から歌声音声出力データ217を出力させるための発声イベントを生成する。
また、ステップS704の押鍵・離鍵処理において、CPU201は、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵された場合において、演奏レッスンにおける押鍵タイミングが自動再生されるタイミング情報に正しく対応している(図4(c)の押鍵期間に入っている)が、鍵の押鍵音高(操作音高)が演奏ガイドデータの組の音高情報に正しく対応していない(一致していない)と判定した場合には、その押鍵タイミングで図2の音源LSI204から所定の(例えばユーザが図1の第2のスイッチパネル103上で予め選択している楽器音と演奏ガイドデータの音高による)楽音出力データ214を出力させるための発音イベントを生成する。
更に、ステップS704の押鍵・離鍵処理において、CPU201は、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵された場合において、演奏レッスンにおける押鍵タイミングが自動再生されるタイミング情報に正しく対応していない(図4(c)の押鍵期間に入っていない)と判定した場合には、音声合成LSI205に歌声音声出力データ217を発声させるためのイベント、及び音源LSI204に楽音出力データ214を発音させるためのイベントの何れも生成しない。
一方、ステップS704の押鍵・離鍵処理において、CPU201は、ユーザにより図1の鍵盤101上の何れかの鍵が離鍵された場合には、音声合成LSI205における対応する歌声音声出力データ217の発声又は音源LSI204における対応する楽音出力データ214の発音を終了させるための離鍵イベントを生成する。
以上のステップS704の押鍵・離鍵処理の詳細は、図10のフローチャートを用いて後述する。
次に、CPU201は、採点処理を実行する(ステップS705)。この採点処理において、CPU201は、演奏レッスンにおける鍵の押鍵タイミング(操作タイミング)及び押鍵音高(操作音高)を自動再生されるタイミング情報及び音高情報と比較して、演奏レッスンを採点する。この採点処理の詳細については、図11のフローチャートを用いて後述する。
次に、CPU201は、声質更新処理を実行する(ステップS706)。この声質更新処理において、CPU201は、ステップS705の採点処理の採点途中結果に応じて、後述するステップS708の発声・発音処理において出力される歌声音声出力データ217の声質を示す値を設定する処理を実行する。
続いて、CPU201は、練習進行度算出処理を実行する(ステップS707)。この練習進行度算出処理において、図2のCPU201及び図3の音声合成部300内のフォルマント補間処理部306とノイズ重畳部307が、後述するステップS708の発声・発音処理において出力される歌声音声出力データ217の声質をステップS705の採点処理の採点途中結果に応じて変化させるための、練習進行度データ311を算出する。前述の声質更新処理及び上述の練習進行度算出処理の詳細については、図12のフローチャートを用いて後述する。
更に、CPU201は、発声・発音処理を実行する(ステップS708)。この発声・発音処理において、CPU201は、ステップS704の押鍵・離鍵処理で歌声音声出力データ217の発声イベントを生成した場合には、RAM203上の発行イベント領域に保持されているその発声イベントを図2の音声合成LSI205に対して発行することにより、音声合成LSI205から歌声音声出力データ217を出力させる。また、この発声・発音処理において、CPU201は、ステップS704の押鍵・離鍵処理で楽音出力データ214の発音イベントを生成した場合には、RAM203上の発行イベント領域に保持されているその発音イベントを図2の音源LSI204に対して発行することにより、音源LSI204から楽音出力データ214を出力させる。更に、この発声・発音処理において、CPU201は、ステップS704の押鍵・離鍵処理で離鍵イベントを生成した場合には、RAM203上の発行イベント領域に保持されているその離鍵イベントを図2の音声合成LSI205又は音源LSI204に対して発行することにより、対応する歌声音声出力データ217又は楽音出力データ214の出力を停止させる。
最後に、CPU201は、RAM203から読み出されるべき演奏ガイドデータの組がなくなって歌声曲が終了したか否かを判定する(ステップS709)。ステップS709の判定がNOならば、ステップS703の処理に戻って、ステップS703からS709の一連の処理を繰り返し実行する。ステップS709の判定がYESになったら、CPU201は、図7のフローチャートで示される図6のステップS602のレッスン処理を終了する。
図9は、図7のステップS703の演奏ガイド処理の詳細例を示すフローチャートである。
CPU201はまず、RAM203上の変数NoteOn_inの値が1であるか否か、即ち現在の自動再生のタイミングが押鍵期間(図4(c)参照)に突入したか否かを判定する(ステップS901)。前述したように、この変数NoteOn_inの値は、図8の自動再生処理のステップS802において、前回のイベントの発生時刻からの相対時刻を示す変数値DeltaTが押鍵期間の開始時刻に対応する“DeltaTime[SongIndex]-Margin”に到達したと判定された場合に、押鍵期間に突入したことを示す値「1」にセットされる。
ステップS901の判定がYESになると、CPU201は、RAM203上の現在の変数値SongIndex値によって参照されるRAM203上の演奏ガイドデータ組Event[SongIndex]に含まれる音高情報に対応する図1の鍵盤101上の鍵のLED104を、図2のLEDコントローラ207を介して最大輝度で点灯させる(ステップS902)。これにより、ユーザは、この最大輝度でLED104が点灯した鍵を、次に押鍵すべき鍵であると認識することができる。
次に、CPU201は、RAM203上の現在の変数値SongIndex値に+1した値によって参照される演奏ガイドデータ組Event[SongIndex+1]がRAM203上に存在するか否かを判定する(ステップS903)。
ステップS903の判定がYESならば、CPU201は、RAM203上のRAM203上の演奏ガイドデータ組Event[SongIndex+1]に含まれる音高情報に対応する図1の鍵盤101上の鍵のLED104を、図2のLEDコントローラ207を介して最大輝度の半分の輝度で点灯させる(ステップS904)。これにより、ユーザは、最大輝度の半分の輝度でLED104が点灯した鍵を、次の次に押鍵すべき鍵であると認識することができる。
ステップS903の判定がNOならば、CPU201は、ステップS904の処理は実行しない、この結果、ユーザは、最大輝度の半分の輝度でLED104が点灯する鍵がないことにより、最大輝度でLED104が点灯している鍵がレッスンの最後の鍵であると認識することができる。
ステップS904の処理の後又はステップS903の判定がNOとなった後、CPU201は、RAM203上の変数NoteOn_inの値を0にすることにより、現在の自動再生のタイミングが押鍵期間に突入した状態が終了する。その後、CPU201は、図9のフローチャートで示される図7のステップS703の演奏ガイド処理を終了する。
前述したステップS901の判定がNOの場合、CPU201は次に、RAM203上の変数NoteOn_outの値が1であるか否か、即ち現在の自動再生のタイミングが押鍵期間(図4(c)参照)から出るタイミングであるか否かを判定する(ステップS906)。前述したように、この変数NoteOn_outの値は、図8の自動再生処理のステップS803において、前回のイベントの発生時刻からの相対時刻を示す変数値DeltaTが押鍵期間の終了時刻に対応する“DeltaTime[SongIndex]+Margin”に到達したと判定された場合に、押鍵期間を出ることを示す値「1」にセットされる。
ステップS906の判定がYESになると、CPU201は、RAM203上の現在の変数値SongIndex値から-1した値によって参照されるRAM203上の演奏ガイドデータ組Event[SongIndex-1]に含まれる音高情報に対応する図1の鍵盤101上の鍵のLED104を、図2のLEDコントローラ207を介して消灯させる(ステップS907)。これにより、ユーザは、この鍵について、押鍵期間が終了したことを認識することができる。なお、SongIndexでなくSongIndex-1を参照するのは、図8のステップS806でNoteOn_out=1になった場合には、続くステップS808でSongIndexの値が+1インクリメントされるため、Event[SongIndex-1]を参照することにより直前の押鍵期間の鍵のLED104を消灯できるようにするためである。
ステップS907の処理の後又はステップS906の判定がNOとなった後、CPU201は、図9のフローチャートで示される図7のステップS703の演奏ガイド処理を終了する。
図10は、図7のステップS704の押鍵・離鍵処理の詳細例を示すフローチャートである。
CPU201はまず、図2のキースキャナ206を介してユーザによって図1の鍵盤101上で新規押鍵がなされたか否かを判定する(ステップS1001)。
ステップS1001の判定がNOならば、CPU201は、ステップS1007の離鍵の判定処理に進む。
ステップS1001の判定がYESならば、CPU201は、RAM203上の変数NoteOnの値が1であるか否か、即ち現在の自動再生のタイミングが押鍵期間(図4(c)参照)に入っているか否かを判定する(ステップS1002)。
ステップS1002の判定がNOならば、CPU201は、ステップS1007の離鍵の判定処理に進む。このように、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵された場合において、演奏レッスンにおける押鍵タイミングが自動再生されるタイミング情報に正しく対応していない(図4(c)の押鍵期間に入っていない)と判定された場合には、音声合成LSI205に歌声音声出力データ217を発声させるためのイベント、及び音源LSI204に楽音出力データ214を発音させるためのイベントの何れも生成されないで、発声及び発音の何れも行われない。
このようにしてユーザは、押鍵を行ったにもかかわらず歌声音声出力データ217の発声も楽音出力データ214の発音もないことにより、自分の押鍵が間違ったタイミングであったことを認識することができる。
ステップS1002の判定がYESならば、CPU201は、キースキャナ206を介して通知された新規押鍵の音高が、RAM203上の現在のSongIndex値によって参照されるRAM203上のEvent[SongIndex]に含まれる音高情報に一致するか否かを判定する(ステップS1003)。
ステップS1003の判定がYESならば、CPU201は、RAM203上の現在のSongIndex値によって参照されるRAM203上のEvent[SongIndex]に含まれる歌詞情報と音高情報を歌声データ215として有する発声イベントを生成し、RAM203の発行イベント領域にセットする(ステップS1004)。続いて、CPU201は、RAM203上の正解フラグ変数の値を1にセットする(ステップS1005)。
一方、ステップS1003の判定がNOならば、CPU201は、RAM203上の現在のSongIndex値によって参照されるRAM203上のEvent[SongIndex]に含まれる音高情報と共に所定の音色(例えばピアノ音)の音色情報を発音制御データ216(図2参照)として有する発音イベントを生成し、RAM203の発行イベント領域にセットする(ステップS1006)。
以上のステップS1004又はS1005のように、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵されその押鍵タイミングが自動再生されるタイミング情報に正しく対応している場合に、押鍵音高が演奏ガイドデータの組の音高情報に正しく対応していれば正解として音声合成LSI205から自動再生中の歌詞と音高に対応する歌声音声出力データ217を出力させることができ、押鍵音高が間違っていれば不正解として音源LSI204から自動再生中の音高に対応する所定の音色の楽音出力データ214を出力させることができる。このように、ユーザは、演奏レッスンの正解/不正解を、いちいちディスプレイ等を見なくても、歌声音声出力データ217が発声されるか、楽音出力データ214が発音されるかによって簡単に認識することが可能となる。
ステップS1001の判定がNOの場合或いはステップS1005又はS1006の処理の後、CPU201は、図2のキースキャナ206を介して図1の鍵盤101上で新たな離鍵がユーザによってなされたか否かを判定する(ステップS1007)。
ステップS1007の判定がYESならば、図2の音声合成LSI205又は音源LSI204に対して、現在発音中の歌声音声出力データ217又は楽音出力データ214の出力を停止させるための離鍵イベントを生成し、RAM203の発行イベント領域にセットする(ステップS1008)。
ステップS1008の処理の後又はステップS1007の判定がNOの場合に、CPU201は、図10のフローチャートで示される図8のステップS704の押鍵・離鍵処理を終了する。
図11は、図7のステップS705の採点処理の詳細例を示すフローチャートである。まずCPU201は、RAM203上の変数NoteOn_outの値が1になっているか否か、即ち現在の自動再生のタイミングが押鍵期間(図4(c)参照)から出るタイミングであるか否かを判定する(ステップS1101)。
ステップS1101の判定がYESの場合に、以下の採点処理が実行される。即ち、CPU201はまず、RAM203の正解フラグの変数値が1であるか否かを判定する(ステップS1102)。この正解フラグの変数値は、前述したように、ユーザにより図1の鍵盤101上の何れかの鍵が新たに押鍵されその押鍵タイミングが自動再生されるタイミング情報に正しく対応しており、かつ押鍵音高が演奏ガイドデータの組の音高情報に正しく対応している場合に、図10のステップS1005において値「1」にセットされる。
ステップS1102の判定がYESならば、CPU201は、RAM203上の採点途中結果を示す変数値に加点処理を行う(例えば+1する)(ステップS1103)。続いて、CPU201は、RAM203上の正解フラグの変数値を0にリセットする(ステップS1104)。
一方、ステップS1102の判定がNOならば、CPU201は、RAM203上の採点途中結果を示す変数値に減点処理を行う(例えば-1する)(ステップS1105)。
ステップS1104又はS1105の処理の後、CPU201は、RAM203上のNoteOn_out変数の値を0にリセットする(ステップS1106)。
ステップS1106の処理の後又はステップS1101の判定がNOの場合に、CPU201は、図11のフローチャートで示される図7のステップS705の採点処理を終了する。
以上のように、本実施形態では、押鍵期間が経過した際に押鍵期間中の正解フラグの状態を見るので、押鍵期間以外にユーザにより押鍵されても採点には影響を与えない。押鍵期間中に押鍵しない場合は減点となる。
図12は、図7のステップS706の声質更新処理の詳細例を示すフローチャートである。前述したように、本実施例における声質変化は、初期状態を男声とし、採点途中結果の点数が上がるにつれて女声方向、点数が下がるにつれて男性のダミ声方向へと声質が変化させられる。声質は前述したフォルマントと呼ばれる声道の周波数特性の他に、声帯が発する音の周波数(声の高さ)によって決まる。フォルマントについては、図4(b)に示されように、一般的に女声や子供では、周波数の高い領域に第1フォルマント以降のフォルマントが位置し、逆に男声では、周波数の低い領域にフォルマントが位置する。また、女性や子供は一般的に声の高さ(声帯の振動数)が高い。
上記の傾向を踏まえ、本実施例では、図5(b)に示されるように、初期状態の男声の声質5を中心として上方向に5段階、下方向に5段階の計11段階で声質が変化するものとする。フォルマントについては女声、男声及びダミ声間を補間するように変化させる。また、声質変更の3段階目(声質8と声質2)では声の高さを1オクターブ上下させる処理を実行する。
図12のフローチャートで示される処理において、CPU201は、RAM203に記憶されている前回の採点途中結果の点数と今回の採点途中結果の点数を比較し(ステップS1201)、点数がアップしたか否かを判定する(ステップS1202)。
そして、ステップS1202の判定がYESの場合(点数がアップした場合)には、CPU201は、声質が最大値の10に到達していなければ(ステップS1204の判定がNOならば)、声質を1段階加算する(ステップS1205)。声質が最大値の10に到達していれば(ステップS1204の判定がYESならば)、CPU201は、ステップS1205の加算処理は実行しない。
また、声質がオクターブ切替え段階である8又は2であった場合(ステップS1206の判定がYESならば)、CPU201は、声の高さを1オクターブ上げる(ステップS1207)。ステップS1206の判定がNOならば、CPU201は、オクターブは維持する。その後、CPU201は、図12のフローチャートで示される図7のステップS706の声質更新処理を終了する。
一方、ステップS1202の判定がNOの場合には、CPU201は更に、ステップS1201での比較処理の結果、点数がダウンしたか否かを判定する(ステップS1203)。ステップS1203の判定もNOで、点数が維持されている場合には、CPU201は、何もせずに、図12のフローチャートで示される図7のステップS706の声質更新処理を終了する。
CPU201は、ステップS1203の判定がYESで点数がダウンしたと判定した場合には、声質が最小値の0に到達していなければ(ステップS1208の判定がNOならば)、声質を1段階減算する(ステップS1209)。声質が最小値の0に到達していれば(ステップS1208の判定がYESならば)、CPU201は、ステップS1209の減算処理は実行しない。
また、声質がオクターブ切替え段階である8又は2であった場合(ステップS1210の判定がYESならば)、CPU201は、声の高さを1オクターブ下げる(ステップS1211)。ステップS1210の判定がNOならば、CPU201は、オクターブは維持する。
CPU201は、上述のように声質を算出すると、その声質をRAM203上の変数curNumに記憶させた後に、図12のフローチャートで示される図7のステップS706の声質更新処理を終了する。続いて、CPU201は、図7のステップS707の練習進行度算出処理において、ステップS706で変数curNumに得た声質の値を用いて、(2)式で示される演算処理によって練習進行度データ311の値xを算出する。
ここで、curNumは図7のステップS706の声質更新処理によってRAM203上の変数curNumに得られている現在の声質の値である。また、maleNumは、男性の声質の値であり、前述したように例えば5である。更に、femaleNumは、女性の声質の値であり、例えば最高値10である。従って、上記(2)式の演算処理により算出される練習進行度データ311の値xは、男性の声質の値maleNumに対する採点途中結果に対応する現在の声質の値curNumの差分値が、男性の声質の値maleNumに対する女性の声質の値femaleNumの差分値に対して、どの程度の割合であるかを示している。例えば、現在の声質の値curNum=10(女性の声質の値と同じ最高の声質の値)であれば、上記(2)式の演算結果は「x=(10―5)÷(10-5)=1」となる。また例えば、現在の声質の値curNum=5(男性の声質の値と同じ値)であれば、上記(2)式の演算結果は「x=(5―5)÷(10-5)=0」となる。更に例えば、現在の声質の値curNum=0(最低の声質の値)であれば、上記(2)式の演算結果は「x=(0―5)÷(10-5)=-1」となる。即ち、上記(2)式の演算処理によって算出される練習進行度データ311の値xは、図7のステップS705の採点処理に基づく採点途中結果が最高値となって、図7のステップS706の声質更新処理によって算出される現在の声質の値curNumが女性の声質と同じ最高値10になれば、練習進行度データ311の値x=1となる。また、図7のステップS705の採点処理に基づく採点途中結果が平均値となって、図7のステップS706の声質更新処理によって算出される現在の声質の値curNumが男性の声質と同じ平均値5になれば、練習進行度データ311の値x=0となる。更に、図7のステップS705の採点処理に基づく採点途中結果が最低値となって、図7のステップS706の声質更新処理によって算出される現在の声質の値curNumが最低値0になれば、練習進行度データ311の値x=-1となる。
図5(c)は、本実施例において音声合成LSI205内の音響モデル部301に保持されている声質パラメータのデータ構成例(以下、「声質パラメータ構造体」と呼ぶ)を示す図である。「母音フラグ」は当該音素が母音であるか、子音であるかを示すフラグである。母音のときtrue、子音のときfalseとなる。「ノイズ混合比」は、音声に混合されるホワイトノイズの振幅比である。この値は、歌声音声出力データ217の最大振幅(16ビットなら32,768)を1としたときの比率になる。フォルマントパラメータである「LSF1配列ポインタ」及び「LSF2配列ポインタ」は、LSP分析の結果得られるLSPパラメータ値を周波数パラメータ値に変換して得られるLSF値への配列ポインタである。LSFは2つで1対のデータとなるため、「LSF1配列ポインタ」と「LSF2配列ポインタ」のペアがそれぞれLSP分析の次数分だけ、上記データ構造体に保持されることになる。全音素×全ノート番号分の数の上記声質パラメータ構造体のデータ群が、人間の声の1キャラクタ分の全声質パラメータ群となる。この声質パラメータ群が、男声、女声、ダミ声のキャラクタ毎に、音響モデル部301内の特には図示しない書込み可能ROMに保持されている。
図13は、音声合成LSI205での発声処理時に、図3の音声合成LSI205のプロセッサによって、音声合成部300のフォルマント補間処理部306及びノイズ混合比補間処理部316の各機能として実行される声質変更処理の例を示すフローチャートである。ここでは、男声、女声間の声質変更について説明する。男声、ダミ声間の声質変更も同様に実施できる。
音声合成LSI205のプロセッサは、図7のステップS708の発声・発音処理によりCPU201から発行された歌声データ215に基づいて図3のテキスト解析部302を介して設定された発声すべき音素番号を取得し(ステップS1301)、同じく歌声データ215に含まれる形で指定された音高情報であるノート番号を取得する(ステップS1302)。また、音声合成部300のプロセッサは、図7のステップS707でCPU201が前述した(2)式で示される演算処理によって算出した練習進行度データ311の値xを取得する(ステップS1303)。
次に、音声合成LSI205のプロセッサは、ステップS1301で取得した音素番号及びステップS1302で取得したノート番号に基づいて、音響モデル部301から、図5(c)に示されるデータ形式の男声および女声の各声質パラメータ構造体を取得する(ステップS1304、S1305)。
次に、音声合成LSI205のプロセッサは、ステップS1304又はS1305で取得した声質パラメータ構造体において、母音フラグが設定されているか否かを判定する(ステップS1306)。
ステップS1301で取得された現在の音素番号の音素が母音でなくステップS1306の判定がNOの場合、即ち、子音である場合には、当該音素はピッチを持たないノイズ音声である。この場合には、音声合成LSI205のプロセッサは、ステップS1304で取得した男性の声質パラメータ構造体から、「ノイズ混合比」(図5(c)参照)を取り出して目標ノイズ混合比317として図3のノイズ重畳部307にセットし、「LSF1配列ポインタ」及び「LSF2配列ポインタ」(図5(c)参照)を取り出して図3の目標スペクトル情報312として図3の合成フィルタ部305にセットする(ステップS1310)。なお、男声の代わりに女声の声質パラメータ構造体からのデータを、目標ノイズ混合比317及び目標スペクトル情報312としてセットしてよいことはもちろんである。
ステップS1301で取得された現在の音素番号の音素が母音であってステップS1306の判定がYESの場合、音声合成LSI205のプロセッサはまず、図3のノイズ混合比補間処理部316の機能としてノイズ混合比補間処理を実行し(ステップS1307)、続いて、図3のフォルマント補間処理部306の機能としてフォルマント補間処理を実行する(ステップS1308)。そして、音声合成LSI205のプロセッサは、上記ステップS1307のノイズ混合比補間処理によって得られた目標ノイズ混合比317を図3のノイズ重畳部307に目標パラメータとしてセットし、ステップS1308のフォルマント補間処理によって得られた目標スペクトル情報312を図3の合成フィルタ部305に目標パラメータとしてセットする。
ステップS1309又はS1310の処理の後、音声合成LSI205のプロセッサは、図13のフローチャートで示される声質変更処理を終了する。
図14(a)は、図13のステップS1307のノイズ混合比補間処理の詳細例を示すフローチャートであり、音声合成LSI205のプロセッサによって図3の音声合成部300のノイズ重畳部307の機能として実行される。
音声合成LSI205のプロセッサは、図3のステップS1304で音響モデル部301から取得した男性の声質パラメータ構造体から男性のノイズ混合比の値をmaleRateとして取り出し、また、図3のステップS1305で音響モデル部301から取得した女性の声質パラメータ構造体から女性のノイズ混合比の値をfemaleRateとして取り出し、更に図13のステップS1303で取得した練習進行度データ311の値xを用いて、下記(3)式で示される演算処理を実行することにより、目標ノイズ混合比317の値targetRateを算出する(ステップS1401)。
前述したように、練習進行度データ311の値xは、男性の声質の値maleNumに対する採点途中結果に対応する現在の声質の値curNumの差分値が、男性の声質の値maleNumに対する女性の声質の値femaleNumの差分値に対して、どの程度の割合であるかを示している。従って、上記(3)式に示されるように、男性のノイズ混合比に対する女性のノイズ混合比の差分値(femaleRate-maleRate)に採点結果に対応する練習進行度データ311の値xを乗算し、その乗算結果を男性のノイズ混合比maleRateに加算することにより、採点結果に対応して補間された声質に対応する目標ノイズ混合比317の値targetRateを算出することができる。
図3の音声合成LSI205のプロセッサは、ノイズ混合比補間処理部316の機能として、上述の図14(a)のフローチャートで示される図13のステップS1307で算出した目標ノイズ混合比値targetRateを、前述した図13のステップS1309で図13の音声合成LSI205内のノイズ重畳部307に、目標パラメータである目標ノイズ混合比317としてセットする。そして、音声合成LSI205のプロセッサは、このノイズ重畳部307の機能として、信号の最大振幅値に対して上記目標ノイズ混合比317の値targetRateを乗じて得られる振幅値を有するノイズデータ315を生成し、フィルタ出力データ313に混合させる。
図14(b)は、図13のステップS1308のフォルマント補間処理の詳細例を示すフローチャートであり、音声合成LSI205のプロセッサによって図3の音声合成部300のフォルマント補間処理部306の機能として実行される。
音声合成LSI205のプロセッサは、例えば特には図示しないレジスタとして有する変数iの値を0(ステップS1411)から、+1ずつインクリメントさせながら(ステップS1414)、その値がパラメータ次数Nに達したと判定するまで(ステップS1415)、LSF1とLSF2のパラメータセット毎に、ステップS1412とS1413の処理を繰り返し実行する。
まず、音声合成LSI205のプロセッサは、図3のステップS1304で音響モデル部301から取得した男性の声質パラメータ構造体から男性の第i次のLSF1配列ポインタを取り出し、そのポインタが参照する音響モデル部301内の特には図示しないメモリからLSF1パラメータの値をmaleLSF1[i]として取得し、また、図3のステップS1305で音響モデル部301から取得した女性の声質パラメータ構造体から女性の第i次のLSF1配列ポインタを取り出し、そのポインタが参照する音響モデル部301内のメモリからLSF1パラメータの値をfemaleLSF1[i]として取得し、更に図13のステップS1303で取得した練習進行度データ311の値xを用いて、下記(4)式で示される演算処理を実行することにより、目標スペクトル情報312の一部である第i次の目標LSF1の値targetLSF1[i]を算出する(ステップS1412)。
前述したように、練習進行度データ311の値xは、男性の声質の値maleNumに対する採点途中結果に対応する現在の声質の値curNumの周波数差分値が、男性の声質の値maleNumに対する女性の声質の値femaleNumの周波数差分値に対して、どの程度の割合であるかを示している。従って、上記(4)式に示されるように、男性の第i次のLSF1パラメータ値に対する女性の第i次のLSF1パラメータ値の周波数差分値(femaleLSF1[i]-maleLSF1[i])に採点結果に対応する練習進行度データ311の値xを乗算し、その乗算結果を男性の第i次のLSF1パラメータ値maleLSF1[i]に加算することにより、採点結果に対応して補間された声質に対応する第i次の目標LSF1パラメータ値targetLSF1[i]を算出することができる。
次に、音声合成LSI205のプロセッサは、図3のステップS1304で音響モデル部301から取得した男性の声質パラメータ構造体から男性の第i次のLSF2配列ポインタを取り出し、そのポインタが参照する音響モデル部301内のメモリからLSF2パラメータの値をmaleLSF2[i]として取得し、また、図3のステップS1305で音響モデル部301から取得した女性の声質パラメータ構造体から女性の第i次のLSF2配列ポインタを取り出し、そのポインタが参照する音響モデル部301内のメモリからLSF2パラメータの値をfemaleLSF2[i]として取得し、更に図13のステップS1303で取得した練習進行度データ311の値xを用いて、下記(5)式で示される演算処理を実行することにより、目標スペクトル情報312の一部である第i次の目標LSF2の値targetLSF2[i]を算出する(ステップS1413)。
前述した(4)式のLSF1パラメータ値の場合と同様に、上記(5)式に示されるように、男性の第i次のLSF2パラメータ値に対する女性の第i次のLSF2パラメータ値の周波数差分値(femaleLSF2[i]-maleLSF2[i])に採点結果に対応する練習進行度データ311の値xを乗算し、その乗算結果を男性の第i次のLSF2パラメータ値maleLSF2[i]に加算することにより、採点結果に対応して補間された声質に対応する第i次の目標LSF2パラメータ値targetLSF1[i]を算出することができる。
図3の音声合成LSI205のプロセッサは、フォルマント補間処理部306の機能として、上述の図14(b)のフローチャートで示される図13のステップS1308フォルマント補間処理で算出したLSP分析次数分の目標LSF1パラメータ値targetLSF1[i]と目標LSF2パラメータ値targetLSF2[i]のペア(0≦i≦N-1)を、前述した図13のステップS1309で図13の音声合成LSI205内の合成フィルタ部305に、目標パラメータである目標スペクトル情報312としてセットする。この結果、合成フィルタ部305は、上記目標スペクトル情報312を用いてデジタルフィルタを形成し、このデジタルフィルタに図3の発声モデル部303内の音源生成部304の機能により音源信号を入力させることにより、フィルタ出力データ313を出力する。最終的に、このフィルタ出力データ313はノイズデータ315と混合され、歌声音声出力データ217として出力される。
上記図13及び図14のフローチャートによって説明した声質変更処理により、演奏レッスン開始時の歌唱機能の声質が例えば男性大人に設定され、演奏レッスン開始後採点途中結果が上がっていくごとに、ユーザの押鍵操作に基づいて電子鍵盤楽器100のスピーカから発声される歌声音声の声質が女性大人の声質に徐々に変化し、逆に点数が下がっていった場合は上記歌声音声の声質が男性大人の声質から少し耳障りないわゆるダミ声と言われている声質に変化していく。更には、採点途中結果に応じてハスキーボイスのような声質の有り/無しの変化を加えることもできる。これにより、ユーザは、いちいちディスプレイを確認する必要なく、演奏レッスンの経過と共に自分の演奏操作の技量がどの程度になっているかを、発声される歌声音声の声質により簡単に確認することが可能となる。
以上説明した実施形態では、押鍵すべき音符ごとに弾けた又は弾けないを判断し採点途中結果の点数を上下させていたが、いくつかの音符ごとのまとまり(フレーズ)や数小節の採点の平均を取って点数を上下させたり、連続して何回か押鍵できた場合又は押鍵できなかった場合に点数を上下させるようにしてもよい。
更に、上記のように音符のまとまりで採点する場合には難易度の高い部分で通常より加点するようなボーナスステージや、逆に簡単な場所で間違えた場合には減点を増やすようなペナルティステージを設けてもよい。
本実施例では、フォルマントの移動、ホワイトノイズの混合度及び音高を変化させているが、リバーブのような残響効果や声のピッチが揺らぐトレモロのような効果を入れたり、点数が下がるにつれて音高が不安定になっていくような演出を加えてもよい。
本実施例では、次に押鍵すべき鍵に対応するLEDを最大輝度で点灯し、次の次に押鍵すべき鍵に対応するLEDを最大輝度の半分の輝度で点灯させるようにしたが、LEDの輝度を一定とし、同じ輝度において、次に押鍵すべき鍵に対応するLEDを点灯させ、次の次に押鍵すべき鍵に対応するLEDを点滅させることで、識別できるようにしてもよい。
本実施例では、電子鍵盤楽器100として実施したが、その他の楽器形態、例えばギター型や管楽器型の電子楽器で本発明が実施されてもよい。
本実施例では最高点を女声、最低点をダミ声としているがこれら声質の選択は他にも様々な組み合わせが考えられることは言うまでもない。
本実施例では、目標とする声を一般的な女性の声としているが、特定の人物の声をモデル化した音響モデルを使用してもよい。例えば著名な歌手の歌唱を学習した音響モデルを使用すれば、演奏が上達するにつれ、あこがれの歌手の声質に近づいていくような演出が可能となり、更に効果的な演奏レッスンを行えるようになる。
本実施例では、声質パラメータとしてLSFを採用したが、図3の合成フィルタ部305をフィルタバンクにより実現した場合には、フィルタバンクを構成する各フィルタの増幅率をフォルマント形状と見做し、各フィルタバンクの利得について声質の補間処理を実施することも可能である。
更に、下記特許文献に記載の方法による音声の周波数振幅成分に対し移動平均フィルタをかけることにより生成される周波数振幅概形を声質パラメータと見做して、周波数領域において補間処理を実施することも可能である。その他声質の変更に関して実施例の記載に関わらず種々の方法を採用することができる。
(特許文献):特開2005-084661号公報
本実施例では、図3の合成フィルタ部305への励振源信号としての音源信号は、図3の音声合成LSI205内部において、音源生成部304が、音響モデル部301から出力される音高情報310に基づいて生成しているが、他の実施形態として、合成フィルタ部305に入力する音源信号を、図2の音源LSI204から供給するようにしてもよい。
図15は、上記構成を実現するための、音声合成LSI内の音声合成部300内の発声モデル部303の他の構成例を示すブロック図である。前述した図7のステップS704の押鍵・離鍵処理における図14のステップS1004において、CPU201は、RAM203上の現在のSongIndex値によって参照されるRAM203上のEvent[SongIndex]に含まれる歌詞情報と音高情報を歌声データ215として有する発声イベントを生成し、RAM203の発行イベント領域にセットする。これと共に、CPU201は、同じくEvent[SongIndex]に含まれる音高情報と共に所定の発音チャネル指定を発音制御データ216(図2参照)として有する発声音源指定用発音イベントを生成し、RAM203の発行イベント領域にセットする。
上記処理を受けて、CPU201は、ステップS708の発声・発音処理において、RAM203上の発行イベント領域に保持されている上記発声イベントを図2の音声合成LSI205に対して発行すると共に、上記発声音源指定用発音イベントを図2の音源LSI204に対して発行する。
この結果、音源LSI204は、上記発声音源指定用発音イベントによって指定されている特定の音源チャネル(複数チャネルでもよい)を使って、上記発声音源指定用発音イベントに含まれる音高情報に対応する音高を有する発声音源用楽音出力データ1501を生成し、図2では特には図示しない信号経路を介して図2の音声合成LSI205に入力させる。
演奏者による演奏レッスンに基づいて音源LSI204が生成、出力する上記発声音源用楽音出力データ1501が、図3の音声合成LSI205において、音響モデル部301からフォルマント補間処理部306を介して入力する目標スペクトル情報312に基づいて合成フィルタ部305にて形成されるデジタルフィルタに入力することにより、合成フィルタ部305から歌声音声出力データ217が出力される。
このようにして生成、出力される歌声音声出力データ217は、音源LSI204で生成された楽器音を音源信号としている。このため、歌い手の歌声と比べると、忠実性は若干失われるが、音源LSI204で設定された楽器音の雰囲気が良く残ると共に、歌い手の歌声の声質も良く残った歌声となり、効果的な歌声音声出力データ217を出力させることが可能となる。
更に、発声音源用楽音出力データ1501としては、複数チャネルを用いたポリフォニック動作も可能であるため、その場合には複数の歌声がハモるような効果を奏することも可能となる。
なお、発声音源用楽音出力データ1501としては、どのような波形信号でもよいが、音源信号としての性質上、倍音成分を多く含み、かつ長く持続する、例えばブラス音、ストリング音、オルガン音のような楽器音が好ましい。勿論、大きな効果を狙って、このような基準に全く従わないような楽器音、例えば動物の鳴き声のような楽器音が使用されても、非常におもしろい効果が得られる。具体的な実施例として、例えば愛犬の鳴き声をサンプリングして得られた波形データを用いた発声音源用楽音出力データ1501が合成フィルタ部310に入力されてもよい。そうすると、まるで愛犬が歌詞を歌っているように聞こえるという非常におもしろい効果が得られる。
以上、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができる。
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
演奏者の演奏情報を取得する演奏情報取得手段と、
歌詞情報と音高情報とタイミング情報を少なくとも含む演奏ガイドデータと前記演奏情報から、楽曲の進行中に演奏者の演奏を異なるタイミングで複数回評価する演奏評価手段と、
前記演奏情報と前記歌詞情報に基づき、歌詞を歌声で発声する歌声発声手段と、
前記演奏評価手段の評価が前回の評価から変化した場合に、変化した評価に対応して前記歌声の声質を変更する声質変更手段と、
を備える電子楽器。
(付記2)
前記演奏ガイドデータに基づき、演奏者に楽曲の演奏をガイドする演奏ガイド手段を更に備える付記1に記載の電子楽器。
(付記3)
更に複数の発光素子を備え、
前記演奏ガイド手段は、前記演奏ガイドデータに含まれるタイミング情報に対応したタイミングで、前記演奏ガイドデータに含まれる音高情報に対応する発光素子を発光する、
付記2に記載の電子楽器。
(付記4)
前記声質変更手段は、前記演奏評価手段による複数の特定評価に対応する複数の声質の間を、前記演奏評価手段による楽曲進行中の評価に応じた割合で、補間する、付記1乃至3の何れかに記載の電子楽器。
(付記5)
前記声質変更手段は、人声のフォルマント成分と人声に混合するノイズ成分の割合を変更する、付記1乃至4のいずれかに記載の電子楽器。
(付記6)
電子楽器のプロセッサに、
演奏者の演奏情報を取得する演奏情報取得処理と、
歌詞情報と音高情報とタイミング情報を少なくとも含む演奏ガイドデータと前記演奏情報から、楽曲の進行中に演奏者の演奏を異なるタイミングで複数回評価する演奏評価処理と、
前記演奏情報と前記歌詞情報に基づき、歌詞を歌声で発声する歌声発声処理と、
前記演奏評価手段の評価が前回の評価から変化した場合に、変化した評価に対応して前記歌声の声質を変更する声質変更処理と、
を実行させるための電子楽器の制御方法。
(付記7)
電子楽器のプロセッサに、
演奏者の演奏情報を取得する演奏情報取得処理と、
歌詞情報と音高情報とタイミング情報を少なくとも含む演奏ガイドデータと前記演奏情報から、楽曲の進行中に演奏者の演奏を異なるタイミングで複数回評価する演奏評価処理と、
前記演奏情報と前記歌詞情報に基づき、歌詞を歌声で発声する歌声発声処理と、
前記演奏評価手段の評価が前回の評価から変化した場合に、変化した評価に対応して前記歌声の声質を変更する声質変更処理と、
を実行させるためのプログラム。