以下、この発明の実施の形態を添付図面に従って詳細に説明する。
図1は、この発明に係る音信号生成装置(電子音楽装置)の全体構成の一実施例を示したハード構成ブロック図である。本実施例に示す電子音楽装置は、マイクロプロセッサユニット(CPU)1、リードオンリメモリ(ROM)2、ランダムアクセスメモリ(RAM)3からなるマイクロコンピュータによって制御される。CPU1は、この装置全体の動作を制御する。このCPU1に対して、データ及びアドレスバス1Dを介してROM2、RAM3、入力操作部4、表示部5、音源6、通信インタフェース(I/F)7、記憶装置8がそれぞれ接続されている。
ROM2は、CPU1により実行あるいは参照される各種制御プログラムや例えば図2に示したハーモニーテーブル(音高決定テーブル)などの各種データ等を格納する。RAM3は、CPU1が所定の制御プログラムを実行する際に発生する各種データなどを一時的に記憶するワーキングメモリとして、あるいは現在実行中の制御プログラムやそれに関連するデータを一時的に記憶するメモリ等として使用される。RAM3の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。
入力操作部4は、例えばユーザが発した人間音声やユーザが演奏した楽器の演奏音などの音声信号を入力するマイクロフォンなどの入力機器、演奏(音声信号の入力)の開始/停止を指示する演奏開始/停止ボタン、各種パラメータを設定するスイッチなどの各種操作子の他、数値データ入力用のテンキーや文字データ入力用のキーボードあるいはマウスなどであってよい。前記入力機器はマイクロフォンに限らず、ハーモニー音信号を生成する際に必要とされるコード情報などをユーザ操作に応じて発生する例えば鍵盤等の演奏操作子や、予めROM2等に記憶したコード情報を演奏進行順に供給するシーケンサーなどのデータ入力装置であってもよい。さらに、前記入力操作部4は、後述する差分ピッチ付加割合テーブル(図5参照)に定義される「差分ピッチ付加割合」(ピッチ調整情報)をユーザが任意の値に編集/設定することの可能な設定操作子等を含む。
表示部5は例えば液晶表示パネル(LCD)やCRT等から構成されてなり、マイクロフォン等から入力された音声信号に基づき発生されるリード音に関する楽譜及び/又は生成されたハーモニー音信号に基づき発音されるハーモニー音に関する楽譜、各種操作子により設定されたパラメータ設定状態、あるいは予め記憶されている各種データの一覧やCPU1の制御状態などといった各種情報を表示する。
音源6は複数のチャンネルで楽音信号の同時発生が可能であり、データ及びアドレスバス1Dを経由して与えられる、例えばマイクロフォンを介して入力された入力音声信号を一時的にバッファ記憶した波形信号に基づき或るチャンネルでリード音の音信号を発生し、及び、前記入力音声信号を一時的にバッファ記憶した波形信号に基づき別のチャンネルでハーモニー音信号を発生する。なお、リード音の音源波形としては、一時的にバッファ記憶した入力音声信号の波形をそのまま使用してもよいし、あるいは、入力音声信号の波形を基にしてピッチあるいは音色等適宜制御した波形を使用してもよい。また、ハーモニー音信号用の音源波形としては、一時的にバッファ記憶した入力音声信号の波形を基にしたものを使用してもよいし、あるいは、その他適宜の音源波形を使用してもよい。
音源6から発生されたこれらの信号は、アンプやスピーカなどを含むサウンドシステム6Aから発音される。また、音源6は入力音声信号やハーモニー音信号などを発生する際に、例えばジェンダー(男性声、女性声といった声質のタイプおよび深さ)、トレモロ、音量、パン(定位)、デチューン、リバーブ(残響)などの各種効果を付与することができるようになっている。なお、音源6とサウンドシステム6Aの構成には、従来のいかなる構成を用いてもよい。例えば、音源6における音源波形の生成又は再生方式としては、FM、PCM、物理モデル、フォルマント合成、MP3等の各種楽音合成方式あるいは符号化方式又はデータ圧縮方式のいずれを採用してもよい。また、音源6の全部又は一部を、専用のハードウェアで構成してもよいし、CPU1あるいはDSP(Digital Signal Processor)によるソフトウェア処理で構成してもよい。
通信インタフェース(I/F)7は、当該装置と図示しない外部機器との間で制御プログラムや各種データなどの各種情報を送受信するためのインタフェースである。この通信インタフェース7は、例えばMIDIインタフェース,LAN,インターネット,電話回線等であってよく、また有線あるいは無線のものいずれかでなく双方を具えていてよい。
記憶装置8は、予め用意されたハーモニーテーブル(後述の図2参照)やCPU1が実行する各種制御プログラムなどの各種情報を記憶する。あるいは、入力された入力音声信号や生成されたハーモニー音信号などを記憶できるようにしてもよい。なお、上述したROM2に制御プログラムが記憶されていない場合、この記憶装置8(例えばハードディスク)に制御プログラムを記憶させておき、それをRAM3に読み込むことにより、ROM2に制御プログラムを記憶している場合と同様の動作をCPU1に実行させることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。また、記憶装置8はハードディスク(HD)に限られず、フレキシブルディスク(FD)、コンパクトディスク(CD‐ROM・CD‐RAM)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Disk)等の様々な形態の記憶媒体を利用する記憶装置であればどのようなものであってもよい。あるいは、フラッシュメモリなどの半導体メモリであってもよい。
なお、上述した音信号生成装置(電子音楽装置)において、入力操作部4や表示部5あるいは音源6などを1つの装置本体に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信インタフェースを用いて各装置を接続するように構成されたものであってよいことは言うまでもない。
なお、本発明に係る音信号生成装置(電子音楽装置)及びプログラムは、カラオケ装置、電子楽器、パーソナルコンピュータ、携帯電話等の携帯型通信端末、あるいはゲーム装置など、どのような形態の装置・機器に適用してもよい。携帯型通信端末に適用した場合、端末のみで所定の機能が完結している場合に限らず、機能の一部をサーバ側に持たせ、端末とサーバとからなるシステム全体として所定の機能を実現するようにしてもよい。
図1に示した音信号生成装置(電子音楽装置)は、マイクロフォン等を介して入力された入力音声信号を周波数解析してピッチを検出し(最終的には音楽の音名のいずれかに対応する特定の音高に特定する)、該特定した音高と鍵盤等から入力されたコード(chord)情報とを元にして別途新たに1乃至複数の目標音高(同様に音楽の音名のいずれかに対応する特定の音高である)を決定し、該決定した目標音高を持つハーモニー音信号を自動的に生成するハーモニー音生成(付加)機能を有する。
ここで、前記目標音高は、入力音声信号を周波数解析して得られた音楽の音名のいずれかに対応する特定の音高と鍵盤等から入力されたコード情報とに基づき、予め用意された図2に示すハーモニーテーブル(音高決定テーブル)に従って12音音階の階名(音名)のいずれかに決定されるようになっている(所謂コード入力方式)。図2は、ハーモニーテーブルのデータ構成を示す概念図である。ただし、ここではコード情報としてコード名「Cメジャー」が指定された場合に参照されるテーブルを図2(A)に、コード情報としてコード名「Cマイナー」が指定された場合に参照されるテーブルを図2(B)にそれぞれ示しており、各テーブルは前記入力音声信号から得られた特定の音高に応じて該当する和音(コード)構成音からなる複数系列のハーモニー音信号を生成するデータ構成のものを例に示している。
ハーモニーテーブルはコード名毎に例えば1テーブルずつ複数のテーブルが予め記憶されており、前記コード情報(ここではコード名)に従って対応する1テーブルが特定されるようになっている。図2(A)及び(B)から理解できるように、ハーモニーテーブルは入力音声信号を周波数解析して得られた音楽の音名のいずれかに対応する特定の音高(入力音高)毎に、前記コード情報に対応した和音の構成音からなる複数のハーモニー系列の目標音高を定義する。ただし、この図2(A),(B)では、入力音高について音名「C,C♯,D,D♯,E,F,F♯,G,G♯,A,A♯,B」で表記してあり、また目標音高についても同様に音名で表記している。
前記目標音高の音名表記に関し、例えば目標音高「G」は入力音高と同じオクターブ領域の「G」音であることを示し、目標音高「C+1」は入力音高から1つ上のオクターブ領域の「C」音であること、目標音高「C+2」は入力音高から2つ上のオクターブ領域の「C」音であることを示す。また、ここには記載していないが、例えば目標音高「E−1」は入力音高から1つ下のオクターブ領域の「E」音であること、目標音高「E−2」は入力音高から2つ下のオクターブ領域の「E」音であることを示す。したがって、図2(A)の例では、例えば入力音高が「E3」である場合にはハーモニー音信号の目標音高として「G3」、「C4」、「E4」に、入力音高が「A2♯」である場合にはハーモニー音信号の目標音高として「E3」、「G3」、「C4」にそれぞれ決定されることになる。なお、この実施例ではオクターブ領域を「C」と「B」との間で区切るものを例に示している。
なお、上述した実施例では、ハーモニー音信号の音高を決定する方式としてコード情報(より詳しくはハーモニーテーブル)を元にして決定するコード入力方式を示したがこれに限らず、コード情報を元にすることなくハーモニー音信号の音高を決定する公知の他の方法であってもよい。例えば、入力音声信号の音高に対して予め決めてある所定の音程分離れた複数の音高(例えば、4半音上(長3度)と7半音上(完全5度)の2つの音高など)に一律にハーモニー音信号の音高を決定する方法を採用するなどしてもよい(所謂固定方式)。
図1に示した電子音楽装置はピッチ揺れのない一定の音高(目標音高)のハーモニー音信号を生成できることは勿論のこと、さらに入力音声信号がピッチ揺れ(100セント未満のピッチ揺れ)を有する場合に該ピッチ揺れを任意の異なる大きさで反映させたハーモニー音信号を生成することのできるようになっている。そこで、このような入力音声信号のピッチ揺れを任意に反映した1乃至複数のハーモニー音信号を生成するハーモニー音生成機能について、図3〜図10を用いて説明する。図3及び図4は、上記のハーモニー音生成機能をCPU1によって実現する「ハーモニー音生成処理」の一実施例を示すフローチャートである。ただし、ここでは図示の都合上、ハーモニー音生成処理の前半を図3に、図3の前半処理に後続する後半の処理を図4にそれぞれ分けて示している。当該処理は、例えば演奏開始/停止ボタンのユーザ操作等に従って演奏開始が指示されることに応じて開始され、演奏停止が指示されるまで繰り返し実行される。なお、以下では図10を適宜に参照しながら上記処理について説明する。なお、図10はハーモニー音生成処理を説明するための具体例を示す概念図である。
図3に示すように、ステップS1は初期設定を行う。この初期設定では、例えばコード情報を記憶するコードバッファ、入力音高を記憶するリードバッファ、ハーモニー音高(目的音高)を記憶するノートバッファ、入力音高と目的音高との差分ピッチを記憶する残差バッファなどの各種バッファ領域のクリア、ユーザ操作に応じたハーモニー音高決定方式(例えば上記したコード入力方式又は固定方式)の選択などを行う。ステップS2では、差分ピッチ付加割合の編集・設定を行う。例えば、ユーザにより図5に示されるような差分ピッチ付加割合テーブルの編集・設定が行われる。差分ピッチ付加割合(ピッチ調整情報)は差分ピッチを元にハーモニー音高に付加するピッチ揺れの大きさを決めるパラメータであり(ここでは一例として、例えば0〜100%などの割合で示している)、図5に示す差分ピッチ付加割合テーブルとして複数の差分ピッチ付加割合(ピッチ調整情報)が定義されている。この差分ピッチ付加割合テーブルがハーモニー音信号を生成する際に参照されて、複数のハーモニー音高に対するピッチ調整(100セント未満のピッチ調整)を個別に行うことのできるようにしている(詳しくは後述する)。
ここで、上記差分ピッチ付加割合テーブルについて説明する。図5は、差分ピッチ付加割合テーブルのデータ構成の一実施例を示す概念図である。図5(A)に示す差分ピッチ付加割合テーブルは、1音目、2音目、3音目(図中の番号1〜3に対応する)・・・の所定の音高順(低い順又は高い順あるいは他の適宜の順であってもよい)に、各ハーモニー音毎に適用する差分ピッチ付加割合(ピッチ調整情報)を定義したものである。この差分ピッチ付加割合は、後述する具体的ピッチと正規化されたピッチとの差(ピッチ揺れの大きさに相当する)を調整するピッチ調整情報である。ここに示した例では、例えばハーモニー目標音高が「E3」、「G3」、「C4」に特定されている場合に、これらの音高「E3」、「G3」、「C4」の各ハーモニー音のピッチ揺れはそれぞれ入力音声信号のピッチ揺れの大きさ(つまりは差分ピッチの大きさ)を100%としたときの「20%」、「25%」、「15%」となるように前記具体的ピッチと正規化されたピッチとの差を調整する。
他方、図5(B)に示す差分ピッチ付加割合テーブルは、ハーモニー音に付加するピッチ揺れの大きさ(レベル)別に(この例では大、中、小、なしの4レベル)、適用する差分ピッチ付加割合(ピッチ調整情報)を定義したものである。
なお、上記2つのテーブルのうちどちらのテーブルを用いるかは、ハーモニー音の生成ルール(詳しくは後述する)に従って決められる。また、レベル別の差分ピッチ付加割合を用いる場合には、どのハーモニー音にどのレベルの差分ピッチ付加割合を適用するかがハーモニー音の生成ルールにより予め対応付けられている(詳しくは後述する各ルール処理参照)。
なお、差分ピッチ付加割合は上記した設定態様に限られず、例えば具体的な数値であってもよいことは言うまでもない。
図3に戻って、ステップS3は演奏終了を検出したか否かを判定する。演奏終了を検出したと判定した場合には(ステップS3のYES)、例えば発音中のリード音及び/又はハーモニー音を消音するなどの終了処理(ステップS28)を実行して当該処理を終了する。他方、演奏終了を検出していないと判定した場合には(ステップS3のNO)、入力音のオフを検出したか否かを判定する(ステップS4)。
ハーモニー音生成処理に並行して、図11に示すような公知のピッチ検出処理が逐次(例えば一定の割り込み周期で)実行されている。具体的には、マイクロフォン等を介して入力される入力音声信号がA/D変換回路によりディジタル化され、該ピッチ検出処理では、該ディジタル化された入力音声信号の具体的ピッチを「周波数検出」処理(S70)により検出して具体的周波数信号(具体的ピッチ情報)を得る。なお、具体的ピッチとは音名周波数(正規化されたピッチ)に丸められる前のピッチである。「母音区間検出」処理(S71)では、入力音声信号の母音区間を検出して該入力音声信号を異なる母音区間毎に区切る。なお、「周波数検出」処理は、例えば音声分析の分野で周知の技術であるゼロクロス法などの公知のどのような技術を用いてもよいことから、ここでの詳細説明を省略する。1つの(同じ)母音区間が持続しているとき1つの入力音のオンが持続しているとみなす。図3のステップS4では、同じ母音区間が続いているか否かを調べることにより、入力音のオフを検出したか否かを判定する。
図3に戻り、入力音のオフを検出していないと判定した場合つまりは同じ母音区間が続いている場合には、ステップS4はNOであり、ステップS7の処理へジャンプする。入力音のオフを検出したと判定した場合つまりは1つの母音区間が終了した場合には、ステップS4はYESであり、入力音声信号の再生に基づき発音されるリード音を消音する処理を実行する(ステップS5)と共に、ハーモニー音信号の再生に基づき発音されるハーモニー音を消音する処理を実行する(ステップS6)。
ステップS7は、新規入力音(新たな母音区間の入力音声信号)を検出したか否かを判定する。新規入力音を検出していないと判定した場合つまりはある1つの母音区間が終了していない場合には(ステップS7のNO)、図4に示すステップS19の処理へジャンプする。新規入力音を検出したと判定した場合つまりはある1つの母音区間が終了し異なる母音区間となった場合には(ステップS7のYES)、入力音声信号の周波数情報を音名単位にクオンタイズして入力音高を特定する(ステップS8)。すなわち、上記「周波数検出」処理により変換された周波数信号を「平坦化」処理することによって、周波数信号の変化を平坦化(又は平滑化とも呼ばれる)する。該平坦化された周波数信号は「階名検出」処理により、所定時間毎に12音音階の階名(音名)のいずれかに離散化される。このように、平坦化された周波数信号が半音(100セント)単位で定められた複数の音楽の音名のいずれかに対応する所定の音高に丸められることによって、入力された入力音声信号を音楽上の音名に対応する音高(これを入力音高又は正規化されたピッチと呼ぶ)のいずれかに特定する。特定された入力音高(正規化されたピッチ)は、リードバッファに記憶される。なお、この際には前記検出した正規化されたピッチに対応した窓関数により切り出される1周期分の波形要素データを記憶する処理が行われる。この1周期分の波形要素データの記憶更新は逐次行われるようになっていてよい。
図10(A)は、一連の入力音声信号の具体的ピッチ変化の一例を示している。この例では、入力音声信号の具体的ピッチが、音名「C」の音高を基準にして上下に小さなピッチ揺れ(半音以下であり、数〜数十セント程度)を示す第1の母音区間から、音名「D」の音高を基準にして上下に小さなピッチ揺れ(同じく数〜数十セント程度)を示す第2の母音区間へと遷移する。例えば、入力音声が歌っている歌詞の音韻が「あい」であるような場合には、第1の母音区間に該当するのは音節「あ」の母音音素「a」であり、第2の母音区間に該当するのは音節「い」の母音音素「i」である。このようなピッチ揺れを有する入力音声信号の周波数情報を音名単位にクオンタイズする(つまり正規化されたピッチを検出する)と、図10(B)に示すように、第1の母音区間については音名「C」の音高に、第2の母音区間については音名「D」の音高にそれぞれ入力音高(正規化されたピッチ)を特定することができる。
ステップS9は、入力音声信号の周波数情報(具体的ピッチ)と前記特定した入力音高(正規化されたピッチ)との差分ピッチ(差に関連する差分情報)を生成する。なお、差分ピッチ(差に関連する差分情報)は、セント値表現つまり音程差を示す情報であるとする。各母音区間において生成される差分ピッチの一例を図10(C)に示す(実線参照)。この図から理解できるように、上記処理により差分ピッチ「0」を基準として入力音声信号が有するピッチ揺れをそのまま再現した差分ピッチが生成される。なお、100セント以上のピッチ差は本来別の正規化されたピッチとして検出されるべきものであるから、生成される差分ピッチの最大値は100セント未満であるべきである。換言すれば、正規化されたピッチとして検出され得なかったような例えば極短い時間で瞬間的に生じた一時的な100セント以上のピッチ差は、差分ピッチにおいては無視する(例えば99セントに丸める、あるいはその直前の100セント未満のピッチ差を使用する)ようにしてよい。勿論、これに限らず、そうした一時的な100セント以上のピッチ差をそのまま差分ピッチとして生成するようにしてもよい。つまり、差分ピッチは100セント未満に制限されるものではない。なお、この図10(C)には上記ステップS2により編集・設定された差分ピッチ付加割合テーブル(図5参照)に定義してある差分ピッチ付加割合(100セント未満に制限)にて調整された後の差分ピッチも便宜的に点線で示してある(ただし、ここでは1つのみを例示してある)。
ステップS10は、入力音声信号を再生してリード音を発音する。なお、リード音は、一時的にバッファ記憶した入力音声信号を順次再生することで、元の入力音声信号におけるピッチ揺れをそっくり再現し得るように発生するようにしてもよい。あるいは、前記記憶されかつ逐次更新される1周期分の波形要素データを使用して、前記正規化されたピッチ及び前記差分ピッチの組み合わせで元の入力音声信号におけるピッチ揺れを再現し得るようにして、リード音を発生するようにしてもよい。あるいは、任意の音源波形を使用して、前記正規化されたピッチ及び前記差分ピッチの組み合わせで元の入力音声信号におけるピッチ揺れを再現し得るようにして、リード音を発生するようにしてもよい。
ステップS11は、ハーモニー音高はコード情報を元に決定するか否かつまりはハーモニー音信号の音高を決定する方式としてコード入力方式が選択されているか否かを判定する。コード入力方式が選択されていないと判定した場合には(ステップS11のNO)、固定方式に従い入力音高(正規化されたピッチ)から予め決められた所定の音程(例えば4半音上(長3度),7半音上(完全5度)など)だけ離れた1乃至複数の音高を目標音高に決定する(ステップS14)。該決定された目標音高は、ノートバッファに記憶される。一方、コード入力方式が選択されていると判定した場合には(ステップS11のYES)、コードバッファに記憶されているコード情報が有効であるか否かを判定する(ステップS12)。
コード情報が有効でないと判定した場合つまりは何らのコード情報も入力されておらずコード情報が記憶されていない場合には(ステップS12のNO)、図4に示すステップS19の処理へジャンプする。コード情報が有効であると判定した場合つまりは何らかのコード情報が入力されておりコード情報が記憶されている場合には(ステップS12のYES)、コードバッファに記憶されているコード情報とリードバッファに記憶されている入力音高とに基づいてROM2又は記憶装置8に記憶されている該当するハーモニーテーブルを参照し、ハーモニー音信号の音高(目標音高)として1乃至複数の音高を決定する(ステップS13)。例えば入力されたコード情報が「Cメジャー」であり図2に示したハーモニーテーブルに従えば、図10(A)に示す第1の母音区間における目標音高は「E」、「G」、「C+1」となり、第2の母音区間における目標音高は「G」、「C+1」、「E+1」となる。該決定された1乃至複数の目標音高はノートバッファに記憶される。ステップS15は、差分ピッチ付加割合決定処理を実行する。
ここで、上記差分ピッチ付加割合決定処理(ステップS15参照)について説明する。図6は、差分ピッチ付加割合決定処理を示すフローチャートである。図6に示すように、本差分ピッチ付加割合決定処理では、予め選択されているハーモニー音の生成ルール(例えば後述するルール1〜ルール6までの6個のルール)に従って、差分ピッチ付加割合を反映させる対象のハーモニー音(目標ピッチ)の特定と、該特定したハーモニー音に適用する差分ピッチ付加割合が決定されるようになっている。そこで、ステップS31においてルール1が選択されているか、ステップS32においてルール2が選択されているか、ステップS33においてルール3又は4が選択されているか、ステップS34においてルール5又は6が選択されているかを段階的に判定し、各判定に応じて選択ざれていると判定されたルールに従って差分ピッチ付加割合を決定するようにしている。
ここで、上記ルールとしては例えば6個のルール、具体的には入力音高(正規化されたピッチ)毎に設定されている1乃至複数の差分ピッチ付加割合(つまりは差分ピッチ付加割合テーブル(図5(A)参照))を用いるルール1、高音のハーモニー音ほど割合の高い差分ピッチ付加割合を用いるルール2、ハーモニー目標音高のうち3度にあたる音高のハーモニー音に割合の高い差分ピッチ付加割合を用いるルール3、ハーモニー目標音高のうち3度にあたる音高のハーモニー音を安定させる(ピッチ揺れを生じさせない)ルール4、入力音高(正規化されたピッチ)に対してテンションノートにあたる音高のハーモニー音に割合の高い差分ピッチ付加割合を用いるルール5、入力音高(正規化されたピッチ)に対してテンションノートにあたる音高のハーモニー音を安定させる(ピッチ揺れを生じさせない)ルール6がある。これらのルールは、聴きやすいハーモニー音や、曲調に応じた雰囲気(メジャー感やマイナー感など)を持つハーモニー音、あるいはテンション感に強弱をつけたハーモニー音を生成することを目的に、各目的にあわせて用意される。
図6に戻り、ステップS31においてルール1が選択されていると判定された場合には(ステップS31のYES)、ルール1処理としてハーモニー音毎の差分ピッチ付加割合テーブル(図5(A)参照))に基づき、例えば音高の低い順(又は高い順)に入力信号のピッチ揺れを反映して反映すべき反映対象のハーモニー音を特定し、該特定されたハーモニー音毎に差分ピッチ付加割合を決定する(ステップS35)。ステップS32においてルール2が選択されていると判定された場合には(ステップS31がNOでS32がYES)、後述のルール2処理を実行する(ステップS36)。ステップS33においてルール3又は4が選択されていると判定された場合には(ステップS31,S32がNOでS33がYES)、後述のルール3又は4処理を実行する(ステップS37)。ステップS34においてルール5又は6が選択されていると判定された場合には(ステップS31〜S33がNOでS34がYES)、後述のルール5又は6処理を実行する(ステップS38)。ステップS34においてルール5又は6が選択されていないと判定された場合には(ステップS31〜S35が全てNO)、ルール1処理を適用してハーモニー音毎の差分ピッチ付加割合テーブル(図5(A)参照))に基づき、例えば音高の低い順(又は高い順)に反映対象のハーモニー音を特定し、該特定されたハーモニー音毎に差分ピッチ付加割合を決定する(ステップS39)。
上記ルール2処理(ステップS36参照)について、図7を用いて説明する。図7は、ルール2処理を示すフローチャートである。ステップS41は、生成するハーモニー音の数が1個であるか否かを判定する。生成するハーモニー音の数が1個であると判定した場合には(ステップS41のYES)、反映対象のハーモニー音を1つに特定し、ハーモニー音毎の差分ピッチ付加割合テーブル(図5(A)参照))に基づき該特定されたハーモニー音に差分ピッチ付加割合を決定する(ステップS46)。生成するハーモニー音の数が1個でないと判定した場合には(ステップS41のNO)、生成するハーモニー音の数が2個であるか否かを判定する(ステップS42)。生成するハーモニー音の数が2個であると判定した場合には(ステップS42のYES)、反映対象のハーモニー音を2つに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS45)。ただし、この場合には、音高が高い方のハーモニー音に対してレベル大の、音高が低いもう一方のハーモニー音に対してレベルなしの差分ピッチ付加割合を決定する。
生成するハーモニー音の数が2個でないつまりは3個以上であると判定した場合には(ステップS42のNO)、ハーモニー音の中で最も高い音高と最も低い音高の中間の音高を特定する(ステップS43)。ステップS44は、反映対象のハーモニー音を全てに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS44)。ただし、この場合には、例えば音高が最も高いハーモニー音に対してレベル大の、音高が最も低いハーモニー音に対してレベルなしの、音高が最も高いハーモニー音を除く前記特定した中間の音高以上の音高のハーモニー音に対してレベル中の、その他のハーモニー音に対してレベル小の差分ピッチ付加割合を決定する。
上記ルール3又は4処理(ステップS37参照)について、図8を用いて説明する。図8は、ルール3又は4処理を示すフローチャートである。ステップS51は、ハーモニー目標音高のうち3度にあたる音高のハーモニー音が存在するか否かを判定する。3度にあたる音高のハーモニー音が存在しないと判定した場合には(ステップS51のNO)、ハーモニー音毎の差分ピッチ付加割合テーブル(図5(A)参照))に基づき反映対象のハーモニー音を特定すると共に差分ピッチ付加割合を決定する(ステップS55)。3度にあたる音高のハーモニー音が存在すると判定した場合には(ステップS51のYES)、ルール3が選択されているか否かを判定する(ステップS52)。ルール3が選択されていると判定した場合には(ステップS52のYES)、反映対象のハーモニー音を全てに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS53)。ただし、この場合には、例えば3度にあたる音高のハーモニー音に対してレベル大の、その他のハーモニー音に対してレベル小の差分ピッチ付加割合を決定する。ルール3が選択されていないつまりはルール4が選択されていると判定した場合には(ステップS52のNO)、反映対象のハーモニー音を全てに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS54)。ただし、この場合には、例えば3度にあたる音高のハーモニー音に対してレベルなしの、その他のハーモニー音に対してレベル中の差分ピッチ付加割合を決定する。
上記ルール5又は6処理(ステップS38参照)について、図9を用いて説明する。図9は、ルール5又は6処理を示すフローチャートである。ステップS61は、入力音高(正規化されたピッチ)に対してテンションノートにあたる音高のハーモニー音が存在するか否かを判定する。テンションノートにあたる音高のハーモニー音が存在しないと判定した場合には(ステップS61のNO)、ハーモニー音毎の差分ピッチ付加割合テーブル(図5(A)参照))に基づき反映対象のハーモニー音を特定すると共に差分ピッチ付加割合を決定する(ステップS65)。テンションノートにあたる音高のハーモニー音が存在すると判定した場合には(ステップS61のYES)、ルール5が選択されているか否かを判定する(ステップS62)。
ルール5が選択されていると判定した場合には(ステップS62のYES)、反映対象のハーモニー音を全てに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS63)。ただし、この場合には、例えばテンションノートにあたる音高のハーモニー音に対してレベル大の、その他のハーモニー音に対してレベル小の差分ピッチ付加割合を決定する。ルール5が選択されていないつまりはルール6が選択されていると判定した場合には(ステップS62のNO)、反映対象のハーモニー音を全てに特定し、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)に基づき各ハーモニー音毎の差分ピッチ付加割合を決定する(ステップS64)。ただし、この場合には、例えばテンションノートにあたる音高のハーモニー音に対してレベルなしの、その他のハーモニー音に対してレベル中の差分ピッチ付加割合を決定する。
図3に戻って、ステップS16は発音中のハーモニー音があればそれを消音する。ステップS17は、ノートバッファに記憶された目標音高とリードバッファに記憶された入力音高とを比較して差分(従来装置においてハーモニー音信号を生成するために用いられていたピッチシフト量に該当する)を求め、該求めた差分に1乃至複数の差分ピッチを加算することによって1乃至複数のピッチシフト量を算出する。ただし、この際に加算する差分ピッチは、上記ステップS15において決定された1乃至複数の差分ピッチ付加割合(ピッチ調整情報)に従って残差バッファに記憶された差分ピッチのピッチ変化を調整した後の変更後の1乃至複数の差分ピッチである。ステップS18は、前記算出した1乃至複数のピッチシフト量に基づいて入力音声信号(詳しくは前記記憶済みの1周期の波形要素データ)をピッチシフトして、前記目標音高を基準にして、入力音声信号が有するピッチ揺れを反映して、ピッチ変調された1乃至複数のハーモニー音信号を生成し、これを再生して1乃至複数のハーモニー音を発音する。
図10(D)に、差分ピッチ付加割合に従ってピッチ変化を調整された変更後の差分ピッチに応じて算出されるピッチシフト量を実線で示し、元の差分ピッチに従う変動を参考のために点線で示す(ただし、ここでは1つのみ例示してある)。この図10(D)に示すように、例えば目標音高「E」に決定された第1の母音区間についてはピッチシフト量「+400」を基準に、目標音高「G」に決定された第2の母音区間についてはピッチシフト量「+500」を基準に上下にピッチが揺れているピッチシフト量が得られる。このようにして各母音区間毎に求めた複数のピッチシフト量に従って、それぞれの区間において入力音声信号(前記記憶した波形要素データ)に対してピッチシフトを行うことにより、図10(E)に示すような入力音声信号のピッチ揺れを反映しながらもピッチ揺れの大きさが異なる複数のハーモニー音信号をそれぞれ生成することができる。
この図10(E)から理解できるように、従来では「E」,「G」,「C+1」、また「G」,「C+1」,「E+1」といった音高が一定の複数のハーモニー音信号が生成されていたが(点線で示す)、本実施例では入力音声信号が有するピッチ揺れを大なり小なり反映した異なるピッチ揺れを持つ複数のハーモニー音信号が生成されるようになっている。すなわち、個々のハーモニー音毎に決定される差分ピッチ付加割合の大小によって、複数のハーモニー音信号それぞれのピッチ揺れの大きさを入力音声信号のピッチ揺れの大きさよりも大きくしたり小さくしたり任意に調整することのできるようになっている。例えば、差分ピッチ付加割合が100%であるときにハーモニー音信号のピッチ揺れの大きさが入力音声信号のピッチ揺れの大きさと同じになるように予め設定しておき、差分ピッチ付加割合を100%より小さく設定した場合には、差分ピッチ付加割合を0%に近づけるにつれてハーモニー音信号のピッチ揺れの大きさが入力音声信号のピッチ揺れの大きさよりもより小さくなって現れるようにし、0%では従来と同様のピッチ揺れを有しない音高一定のハーモニー音信号が現われるようにしている。
図4に戻って、ステップS19は、例えばユーザが鍵盤等を操作するなどして入力した(あるいはカラオケ伴奏に伴って自動的に与えられるようにしてもよい)コード情報を取得したか否かを判定する。コード情報を取得していないと判定した場合には(ステップS19のNO)、ステップS2の処理へジャンプする。コード情報を取得したと判定した場合には(ステップS19のYES)、コード情報を抽出しコードバッファに記憶する(ステップS20)。ステップS21は、リードバッファに記憶された入力音高が有効であるか否かを判定する。入力音高が有効でないと判定した場合には(ステップS21のNO)、図3に示したステップS2の処理へ戻る。入力音高が有効であると判定した場合には(ステップS21のYES)、ハーモニー音信号の音高を決定する方式としてコード入力方式が選択されているか否かを判定する(ステップS22)。コード入力方式が選択されていないと判定した場合には(ステップS22のNO)、ステップS2の処理へジャンプする。
コード入力方式が選択されていると判定した場合には(ステップS22のYES)、コードバッファに記憶されているコード情報とリードバッファに記憶されている入力音高とに基づいてROM2又は記憶装置8に記憶されている該当するハーモニーテーブルを参照し、1乃至複数のハーモニー音信号の音高(目標音高)を決定する(ステップS23)。ステップS24は、差分ピッチ付加割合決定処理(図6参照)を実行する。ステップS25は、発音中のハーモニー音があればそれを消音する。ステップS26は、ノートバッファに記憶された目標音高とリードバッファに記憶された入力音高とを比較して差分(従来のピッチシフト量)を求め、該求めた差分に差分ピッチを加算することによってピッチシフト量を算出する。ただし、この際に加算する差分ピッチは、予め設定された差分ピッチ付加割合に従って残差バッファに記憶された差分ピッチのピッチ変化を調整した後の変更後の差分ピッチであることは既に説明したとおりである。ステップS27は、前記算出したピッチシフト量に基づいて入力音声信号(詳しくは前記記憶済みの1周期の波形要素データ)をピッチシフトして、前記目標音高を基準に入力音声信号が有するピッチ揺れを反映したハーモニー音信号を生成し、これを再生してハーモニー音を発音する。
以上のように、本発明においては、入力された音声信号を分析して検出される音声信号のピッチと、前記ピッチ検出に伴って当該入力音声信号の所定区間毎に特定される音名に対応した音高のいずれかとの差分である差分ピッチを求める。また、前記差分ピッチを任意の異なる差分ピッチ付加割合により変更して、複数の異なる差分ピッチを生成する。そして、入力音声信号を前記特定した音高に従って決定される1乃至複数のハーモニー音声の音高へとピッチシフトする際に必要とされるピッチシフト量(従来のピッチシフト量)に対して、前記変更後の差分ピッチによるピッチ変動分を加えるようにして前記ピッチシフト量を変更する。前記差分ピッチはもともと入力音声信号が有していたある音高を基準としたピッチ揺れ(ピッチの揺らぎ成分)を示すものであるから、前記変更後の差分ピッチによる変動分を加えられたピッチ変更後のピッチシフト量は入力音声信号が有していたピッチ揺れを加味したものとなる。したがって、該ピッチ変更後のピッチシフト量に基づいて前記入力音声信号をピッチシフトすれば、前記決定した1乃至複数の音高を基準にピッチ揺れを有する1乃至複数のハーモニー音信号を生成することができる。このようにすれば、ユーザは簡単な操作によって、入力音声信号が有するピッチ揺れを複数のハーモニー音信号に任意の大きさで反映させて、ユーザに違和感を抱かせることのない入力音声信号と同様のピッチ揺れを有するハーモニー音信号を生成することができるようになる。
以上、図面に基づいて実施形態の一例を説明したが、本発明はこれに限定されるものではなく、様々な実施形態が可能であることは言うまでもない。例えば、従来のように目標音高と入力音高とを比較して求めた差分(従来のピッチシフト量)により入力音声信号をピッチシフトすることによってピッチ揺れを有しない一定の音高(目標音高)からなるハーモニー音信号を先に生成しておき、これに対して単純に差分ピッチ付加割合によって調整された差分ピッチを付加するピッチ変調制御を行うことによって、入力音声信号が有するピッチ揺れをハーモニー音信号に反映させるようにしてもよい。
なお、本明細書において「ピッチ揺れ」若しくはピッチ変調とは、ビブラートのような周期的なピッチ変化に限らず、あるいはベンドアップやベンドダウンなどの非周期的なピッチ変化を含んでいてよい。また、奏法表現としてユーザが認識できないような微細なピッチ変化を含んでいてよい。
なお、ハーモニー音信号を生成するために入力されるコード情報は、上述したように本装置上あるいは本装置に接続された鍵盤などの演奏操作子からユーザ操作に応じて入力された入力情報から検出されたものでもよいし、あるいは和音名を順次入力する形式で得られるものであってもよいし、あるいはカラオケ伴奏に伴って自動的に与えられるようにしてもよい。
なお、コード入力がユーザによる演奏操作により行われる場合、押鍵状態からコード検出を行うことは言うまでもない。ただし、この際のコード検出方法は、実際のコード構成音の鍵を全て押鍵することによりコードを指定する所謂フィンガード方式、1つ乃至3つ程度の鍵を所定の規則に基づいて押鍵することによりコードを指定する所謂シングルフィンガー方式など、どのような方式であってもよい。あるいは、操作パネル上に配置された所定のスイッチ操作により、各コードのルートとタイプを指定する方式であってもよい。
なお、上記のようにして入力された音声信号のピッチ検出結果をそのまま用いてハーモニー音信号の音高を決定するものに限らず、入力音声信号のピッチ検出結果を例えば1オクターブや3半音等の所定ピッチだけ上下するなど音高変換したものを用いてハーモニー音信号の音高を決定するようにしてもよい。
なお、上述した実施例においてハーモニー音信号を生成するための元となる入力音声信号はマイクロフォンを介して入力されたユーザの音声を例に説明したが、これに限らない。例えば、マイクロフォンを介して入力される楽器演奏音などであってもよいし、あるいは記憶された音声信号あるいは適宜に外部から配信される音声信号などであってもよい。
なお、ピッチ調整情報は上述した実施例のような予め決められた差分ピッチ付加割合(%)に限らず、計算により差分ピッチ付加割合(%)を算出させるようにしてもよい。その場合、算出の元となるルールをいくつか予め用意しておき、その中から選択できるようになっていてよい。さらには、ピッチ調整情報が自動で算出された後に、当該算出されたピッチ調整情報をユーザが編集することのできるようになっていてよい。また、入力音声信号のピッチ揺れの大きさを自動的に検出して、該検出したピッチ揺れの大きさに応じて各ハーモニー音に対するピッチ調整情報を決定するようになっていてもよい。さらには、ピッチ調整情報に基づくピッチ調整対象のハーモニー音の特定をユーザ自身が指定できてもよい。
なお、生成するハーモニー音の数を予め指定することができるようになっていてもよい。例えば、上述した実施例ではコード情報に応じて特定されるハーモニーテーブル(図2(A)参照)に基づいて3音のハーモニー音を生成するための音高を決定するようになっているが、そうしたテーブルである場合に例えば音数として2音が指定されたときにはテーブルの低音側(又は高音側)の2音など3音のうちの任意の2音を組み合わせて音高を決定するようにするとよい。
なお、差分ピッチ付加割合テーブルは同じタイプ(ハーモニー音毎/レベル別など)でも複数用意しておき、その中から選択して切り替えできるようになっていてよい。こうしたテーブルの切り替えは曲の途中で随時に切り替えできるようになっていてよい。
なお、レベル別の差分ピッチ付加割合テーブル(図5(B)参照)を用いる場合、同じレベルでも複数ハーモニー音が存在するときには同じ差分ピッチ付加割合を適用せず、少しずつ異なる値になるように調整できるとよい(例えば2ずらすなど)。