歌唱採点装置および歌唱採点処理のプログラム
【課題】 膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価する。
【解決手段】CPU1は、評価すべき歌唱力が100点となる基準値の許容範囲を規定するパラメータt、および、100点から0点の範囲で許容範囲外の歌唱力の度合いを規定するパラメータaを設定して、入力される音声信号の評価値をパラメータtおよびパラメータaに基づいて算出する。
【解決手段】CPU1は、評価すべき歌唱力が100点となる基準値の許容範囲を規定するパラメータt、および、100点から0点の範囲で許容範囲外の歌唱力の度合いを規定するパラメータaを設定して、入力される音声信号の評価値をパラメータtおよびパラメータaに基づいて算出する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、入力される音声信号の歌唱力を採点する歌唱採点装置および歌唱採点処理のプログラムに関するものである。
【背景技術】
【0002】
入力される音声信号の歌唱力を採点する装置として、カラオケ採点装置が知られている。
例えば、ある特許文献のカラオケ採点装置は、MIDIメッセージで与えられたメロディ情報に対する歌唱者の歌い方を評価するために、第1の検出手段が歌唱者の音声に基づいてそのピッチデータおよびレベルデータを検出し、第2の検出手段がMIDIメッセージの中の歌唱者の発音すべき歌唱メロディに対応するノートオン/オフデータ、ピッチデータおよびレベルデータを検出する。そして、それぞれ検出されたピッチデータおよびレベルデータを個々にピッチ比較手段およびレベル比較手段で比較し、その比較結果とノートオン/オフデータとに基づいて、歌唱法の評価のためのデータを作成する。(特許文献1参照)
また、別の特許文献のカラオケ採点装置は、模範となる音声とマイクから入力される歌唱者の音声との近似度を、より精度よく自動的に判定するために、この特許文献における図1の構成に示されているように、レーザディスク101において再生された模範歌唱の音声信号は、レベル検出部A103およびピッチ検出部A104に供給され、レベル検出部A103において検出された信号レベルデータおよびピッチ検出部A104において検出されたピッチデータがバッファA102に格納される。また、利用者の音声はマイク201から入力されて、音声信号がレベル検出部B203およびピッチ検出部B204に供給され、レベル検出部B203において検出された信号レベルデータおよびピッチ検出部B204において検出されたピッチデータはバッファB202に格納される。そして、比較判定部300は、それぞれの系統において格納されたデータを読み出し、レベル信号から歌うタイミングを、ピッチデータからピッチずれの判定を行い、比較結果を採点データとして出力する。(特許文献2参照)
【0003】
一方、マイクなどから入力された音声信号を分析する際に、デジタル信号に変換した時間領域の音声信号を高速フーリエ変換(FFT)などによって周波数領域のスペクトル信号に変換して、変換したスペクトル信号を分析することが従来行われている。
例えば、ある特許文献の音声変換装置は、簡単な位相制御処理により高品質にピッチ周波数を変換して音声信号を分析するために、デジタル変換された第1の音声信号を受け、フーリエ変換によりスペクトル信号に変換するフーリエ変換手段と、フーリエ変換手段からスペクトル信号を受け、スペクトル信号の中から音源情報信号を選択的に出力する選択手段と、選択手段から音源情報信号を受け、音源情報信号のピッチ周波数を変換し、周波数変換された信号を出力する周波数変換手段と、フーリエ変換手段からのスペクトル信号に含まれるスペクトル包絡信号と周波数変換手段から出力された信号とに応答して、ピッチ周波数が変換されたスペクトル信号を分析フレーム毎に受け、これを逆フーリエ変換により第2の音声信号に変換する逆フーリエ変換手段と、逆フーリエ変換手段から第2の音声信号を受け、ピッチ周波数の変換倍率に応答して、第2の音声信号の位相を分析フレームのシフト幅によって制御する位相制御手段を含む構成になっている。(特許文献3参照)
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平10−49183号公報
【特許文献2】特開平11−224094号公報
【特許文献3】特許第2753716号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記特許文献1および特許文献2においては、基準値(メロディ情報、模範となる音声)と入力される歌唱者の音声とを単純に比較して歌唱力を評価しているので、曲の開始から終了までの間で評価値が細かく変動することになり、膨大な数の評価値を一時的に記憶するメモリが必要となるためコストアップを招くとともに、曲の途中や曲が終了した後に膨大な数の評価値の平均を算出する演算処理、特に除算処理のためにCPU等の制御手段に大きな負荷がかかるという課題があった。
また、上記特許文献1および特許文献2においては、上級の歌唱者がビブラート唱法によってピッチに揺らぎが発生した場合には、それをピッチずれと誤って判断して歌唱力を低く評価するという課題があった。
また、上記特許文献1および特許文献2においては、入力される音声信号のピッチおよびレベルを2系統の比較手段によって比較し、ピッチずれおよび発音タイミングずれを検出して歌唱力を評価しているので、装置が複雑な構成になるという課題があった。
一方、上記特許文献3においては、フーリエ変換したスペクトル信号の中から音源情報信号、すなわち、基本周波数の音である基音のピッチを直接的に検出して選択するようになっているが、基音のレベルよりも倍音のレベルのほうが高い場合があるので、マイクから入力される音声信号の基音のピッチを確実に検出することができないという課題があった。
【0006】
本発明は、このような従来の課題を解決するためのものであり、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価することを目的とする。
【課題を解決するための手段】
【0007】
請求項1に記載の歌唱採点装置は、評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するパラメータ設定手段と、入力される伴奏曲の歌唱区間を検索する区間検索手段と、当該区間検索手段によって検索された歌唱区間内に入力される音声信号の評価値を前記パラメータ設定手段によって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とする算出する評価演算手段を備えた構成になっている。
【0008】
請求項2に記載の歌唱採点処理のプログラムは、評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、入力される伴奏曲の歌唱区間を検索するステップBと、当該ステップBによって検索された歌唱区間内に入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とするステップCとをコンピュータに実行させる構成になっている。
【発明の効果】
【0009】
本発明の歌唱採点装置および歌唱採点処理のプログラムによれば、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価するという効果が得られる。
【図面の簡単な説明】
【0010】
【図1】本発明の歌唱採点装置を適用した実施形態におけるカラオケ装置の構成を示すブロック図。
【図2】図1のCPUの信号処理機能をハードウェアとして表した機能構成図。
【図3】歌唱採点処理のために図1のCPU内部のカウンタの構成を示す図。
【図4】CPUのメインルーチンのフローチャート。
【図5】図4のメインルーチンにおけるスイッチ処理のフローチャート。
【図6】CPUのタイマインタラプトのフローチャート。
【図7】図4のメインルーチンにおけるカラオケ処理のフローチャート。
【図8】図7におけるピッチ差分算出処理のフローチャート。
【図9】図8におけるピッチ比算出処理のフローチャート。
【図10】図9における位相補償処理のフローチャート。
【図11】図7における差分平均算出処理のフローチャート。
【図12】図7における区間得点算出処理のフローチャート。
【図13】初級、中級、上級の各レベルにおけるパラメータの具体例を示す図。
【図14】区間得点の演算式の特性を示す図。
【図15】区間得点およびピッチずれを表示する画面を示す図。
【図16】入力される音声信号の発声区間と評価対象の歌唱区間との関係を示す図。
【発明を実施するための形態】
【0011】
以下、本発明の歌唱採点装置の実施の形態について、カラオケ装置を例に採って、図面を参照しながら詳細に説明する。
図1は、実施の形態におけるカラオケ装置の構成図である。図1において、CPU1は、装置全体の制御を行うとともに、少容量のROM・RAMおよびDSP(デジタル信号プロセッサ)機能を有する。CPU1のシステムバスには、曲メモリ2、スイッチ部3、ROM4、RAM5、表示部6、A/D変換器8、及び楽音生成部9が相互に接続され、CPU1と各部との間でデータやコマンドの授受を行う。
【0012】
曲メモリ2は、カラオケ用の複数の伴奏曲および歌詞を記憶している。スイッチ部3は、曲セレクトスイッチ、スタート/ストップスイッチ、およびその他の各種スイッチを備えている。ROM4は、CPU1が実行する歌唱採点処理のプログラムや各種制御用データ等を格納している。RAM5は、CPU1のワークエリアであり、各種のレジスタを有する。表示部6は、例えば液晶表示装置(LCD)や複数のLEDなどを備えている。A/D変換器8には無線又は有線によってマイク7が接続され、マイク7から入力されるアナログの音声信号のA/D変換を行いその音声データを出力する。例えば、サンプリング周波数8021Hz、16bitでAD変換を行う。以降、それがAD変換して得られる音声データについては便宜的に「元音声データ」、或いは「元波形データ」と呼び、マイク7に入力された音声については「元音声」と呼ぶことにする。楽音生成部9は、CPU1の指示に従い楽音発音用の波形データを生成する。D/A変換器10は、楽音生成部9が生成した波形データのD/A変換を行い、アナログのオーディオ信号を出力する。サウンドシステム11は、そのオーディオ信号を放音する。
【0013】
図2は、図1のマイク7からA/D変換器8に入力された音声信号に対して、CPU1の信号処理が行われて、D/A変換器10から出力されるまでの機能をハードウェアとして表した機能構成図である。図2において、入力バッファ21は、A/D変換器8が出力する元音声データを一時的に格納するバッファである。フレーム抽出部22は、入力バッファ21に格納された元音声データから予め定められたサイズ分の音声データであるフレームを切り出すことで抽出する。そのサイズ、つまり音声データ(サンプル)数は例えば256である。正確な位相展開の実施にはフレームをオーバーラップさせて抽出する必要があることから、フレームの切り出しはオーバーラップファクタOVLでオーバーラップさせて行う。そのファクタOVLの値としては4を設定している。この場合、ホップサイズは64(256/64=4)である。また、元音声データのピッチ(以降「元ピッチ」と呼ぶ)から目標ピッチへのピッチスケーリング値の範囲は0.5〜2.0の範囲を前提としている。
【0014】
フレーム抽出部22が抽出したフレームは、ローパスフィルタ(LPF)23に出力される。そのLPF23は、ピッチのシフトにより周波数成分がナイキスト周波数を超えることを防止するために高周波成分の除去を行う。FFT部24は、LPF23が出力するフレームを対象に高速フーリエ変換(FFT)を実行する。そのFFTは、FFTサイズ(点数)をフレームサイズの2倍(256×2=512)にして実行する。
【0015】
位相補償部25は、FFTの実行により得られた各周波数チャンネルの周波数成分を対象にして、ピッチシフトによるフレームの伸縮を補償するようにそのサイズを伸縮させる。例えばピッチスケーリング値が前提とする範囲の最大値である2とすれば、ピッチシフトによりフレームサイズは1/2に縮小するから、そのサイズを補償(維持)するためにフレームを2倍に引き伸ばす。このことから、FFTサイズはフレームサイズの2倍としている。ピッチスケーリング値の算出方法についての詳細は後述する。
【0016】
FFT部24は、LPF23から256サンプルのフレームを入力し、FFTサイズのフレームの前半部分にセットする。後半部分には全て0をセットする。後半部分に0をセットするのは、FFTを実行した後、周波数領域における補間効果をもたらすためである。その補間効果をもたらすために周波数の分解能が向上する。FFT部24は、そのようなセットを行ったフレームを対象にFFTを実行する。
【0017】
IFFT部26は、位相補償部25がサイズを伸縮させた後の各周波数チャンネルの周波数成分を、IFFT(逆FFT)を行うことにより時間領域上のデータに戻し、1フレーム分の音声データを生成して出力する。ピッチシフタ27は、位相補償部25から入力するピッチスケーリング値に応じて、IFFT部26が生成したフレームに対する補間、或いは間引きを行い、そのピッチをシフトする。補間、間引きには一般的なラグランジュ関数やsinc関数などが使用できるが、本実施の形態ではNeville補間によりピッチシフト(ピッチスケーリング)を行っている。上記補間、或いは間引きにより、フレームサイズは元のサイズ(256サンプル)となる。そのフレームの音声データについては以降「合成音声データ」と呼び、それによって発音される音声を「合成音声」と呼ぶことにする。
【0018】
出力バッファ29は、音声としてサウンドシステム11から放音させる合成音声データを格納するバッファである。フレーム加算部28は、ピッチシフタ27から入力した1フレーム分の合成音声データを、出力バッファ29に格納された合成音声データにオーバーラップファクタOVLでオーバーラップさせて加算する。出力バッファ29に格納された合成音声データは、D/A変換器10に出力されてD/A変換される。
【0019】
上記入力バッファ21、及び出力バッファ29は、例えばRAM5に確保された領域である。A/D変換器8、D/A変換器10、入力バッファ21、及び出力バッファ29を除く各部22〜28は、例えばRAM5をワーク用にして、CPU1がROM4に格納されたプログラムを実行することで実現される。特に詳細な説明は省略するが、目標ピッチは例えば鍵盤2への操作により指示するようになっている。その目標ピッチは、スタンダードMIDIファイル等の演奏データ、或いは通信ネットワークを介して受信されるデータなどにより指定してもよい。
【0020】
次に、上記位相補償部25によるピッチスケーリング値の算出方法について詳細に説明する。以降、そのスケーリング値はρと表記する。
FFTの実行により、周波数が異なる周波数チャンネル毎に、実数成分と虚数成分を持つ周波数成分が抽出される。実数成分をreal、虚数成分をimgと表記すると、各周波数チャンネルの周波数振幅mag、及び位相phaseは以下のように算出することができる。
【0021】
mag=(real2+img2)1/2 ・・・ (1)
phase=arctan(img/real) ・・・ (2)
arctanを用いて算出される位相phaseは、−π〜πの間に制限される。しかし、位相phaseは角速度の積分値であるから展開する必要がある。展開の有無の区別を容易にするために、折り畳まれている位相を小文字のθ、展開されている位相を大文字のΘで表記すると、本来は
Θk,t=θk,t+2nπ n=0,1,2,・・・ ・・・ (3)
となる。このことから、位相phase(=θ)はnを求めて展開する必要がある。ここで式(3)中のΘに下添字として付したk、tはそれぞれ、周波数チャンネルのインデクス、時刻を表している。
【0022】
その展開は、以下のような手順で行うことができる。
先ず、フレーム間の位相差Δθを次のようにして算出する。
Δθi,k=θi,k−θi-1,k ・・・ (4)
ここで、Δθi,kは元音声波形の周波数チャンネルkにおける直前のフレームと今回のフレームとの間の位相差、下添字のiはフレームをそれぞれ表している。今回のフレーム(現フレーム)はi、直前のフレームはi−1で表されている。
【0023】
式(4)中のΔθi,kは折り畳まれた状態にある。一方、周波数チャンネルkの中心角周波数Ωi,kは、サンプリング周波数をfs、FFT点数(サイズ)をNと表記すると
Ωi,k=(2π・fs)・k/N ・・・ (5)
で示される。その周波数Ωi,kの時、直前のフレームとの時間差をΔtとすると、位相差ΔZi,kは
ΔZi,k=Ωi,k・Δt ・・・ (6)
で算出できる。時間差Δtは
Δt=N/(fs・OVL) ・・・ (7)
である。式(6)は位相展開されている状態なので、以下のように記述できる。
【0024】
ΔZi,k=Δζi,k+2nπ ・・・ (8)
式(4)で算出される位相差Δθi,kと式(8)中の位相差Δζi,kの差をδ(=Δθi,k−Δζi,k)とすると
Δθi,k−Ωi,k・Δt=(Δζi,k+δ)−(Δζi,k+2nπ)
=δ−2nπ ・・・ (9)
が導出できる。従って式(9)の右辺の2nπを削除してその範囲を−πからπの間に制限すればδを算出できる。そのδは、元音声波形において実際に検出される位相差(以降「実位相差」と呼ぶ)である。
【0025】
そのように算出される実位相差δに位相差ΔZi,k(=Ωi,k・Δt)を加算すれば、以下のように位相展開された位相差ΔΘi,kを求めることができる。
ΔΘi,k=δ+Ωi,k・Δt=δ+(Δζi,k+2nπ)=Δθi,k+2nπ
・・・ (10)
式(10)中のΩi,k・Δtは、式(5)、(7)より下記のように変形できる。
【0026】
Ωi,k・Δt={(2π・fs)/N}・k・{N/(fs・OVL)}
=(2π/OVL)・k ・・・ (11)
FFTを含む離散フーリエ変換(DFT)では、音声データ(信号)に含まれる周波数成分の周波数がDFT点数の整数倍となる特別な場合を除き、すべての周波数チャンネルに周波数成分が漏れ出して(遷移して)しまう。そのため、信号の調波構造等を分析する場合は、DFTの結果から実際に周波数成分が存在する周波数チャンネルを検出する作業が必要になる。
【0027】
その検出には、周波数振幅のピークを検出し、そのピークを周波数成分の存在するチャンネルと見なす方法を採用するのが一般的である。そのための最も手順が単純な方法としては、前後2つのチャンネルの周波数振幅より大きい周波数振幅を持つチャンネルをピークとして見なすというものが挙げられる。しかし、そのような方法では、窓関数のサイドローブによるピークを間違ってピークと認識する場合がある。このため、探し出したピーク間のチャンネルで周波数振幅が最小となるチャンネルを抽出し、その周波数振幅がピークの周波数振幅の所定値(例えばピークの周波数振幅の−14db)以下であれば正しいピークと見なすことも行われている。
【0028】
そのようなピーク検出ではピークをより高精度に検出できるが、2段階の探索が必要で処理的に煩雑である。このことから、本実施の形態では、処理の負荷を軽減するために、ピーク検出は行わず、以下のように位相を考慮して、元音声の倍音の周波数成分が存在する周波数チャンネルを検出する。
【0029】
展開した位相差と周波数の関係は直線のグラフで表される。この場合において、グラフの縦軸は位相差、横軸は周波数であり、各チャンネルの中心周波数から計算される位相差、すなわち式(6)により計算されるΔZi,kが直線で表される。その直線に沿う形でプロットした線は、調波構造を持った音声、すなわち有声音の式(10)により計算される位相差ΔΘi,kを表すことになる。その位相差ΔΘi,kはFFT点数512点の前半128点分である。
【0030】
調波構造を持った音声では、その音声の倍音の周波数成分を持つ周波数チャンネル付近で線が階段状(平坦)となる。これは、その周波数チャンネルの周波数成分が近傍のチャンネルに漏れ出すためである。このようなことから、線の階段状となっている部分と直線が交差する個所を含む周波数チャンネルに倍音の周波数成分が存在していると考えられる。その交差する個所の周波数チャンネル(以下「倍音チャンネル」と呼ぶ)は、式(10)と式(6)から算出することができるが、処理的には多少煩雑となる。そこで本実施の形態では、式(9)の実位相差δを使って倍音チャンネルの検出を行う。
【0031】
上述したように、実位相差δは式(4)のΔθi,kと式(8)のΔζi,kとの差である。このδは実際に周波数成分が存在するチャンネルから離れるほど大きくなり、そのチャンネルに近づくほど小さくなる。チャンネルを超える際に0と交差し、周波数が大きくなる方向に越えた場合には、そのチャンネルを離れるにしたがって負側に絶対値が大きくなっていく。
【0032】
実位相差δがゼロクロスする点を検出することにより、倍音チャンネルを探し出すことができる。隣接する倍音同士が交錯する部分でも正から負へのゼロクロスが発生する。このことから、本実施の形態では、下記の条件(以降「ゼロクロス判定条件」と呼ぶ)に合致するインデクスkの周波数チャンネルを倍音の周波数成分が存在する倍音チャンネルとして採用する。インデクスkの周波数チャンネルはゼロクロス点に最も近い周波数チャンネルである。
δ[k−2]>δ[k−1]>δ[k]>δ[k+1]>δ[k+2]
このようなゼロクロス判定条件を満たす周波数チャンネルkを探すことにより、正から負に大きくゼロクロスする点に最も近い周波数チャンネルを倍音チャンネルとして高精度に抽出することができる。その抽出は、FFT点数が十分でなく、周波数振幅による倍音チャンネルの抽出が困難であっても確実に行うことができる。より高精度な抽出を行う必要がある場合には、ピーク検出を併せて行うようにしてもよい。
【0033】
本実施の形態では、この判定条件を満たす周波数(倍音)チャンネルkを周波数の小さい方から2つ検出する。これは、周波数が高くなるほど、誤差による影響が大きくなり、精度が低下する傾向があるためである。そのようにして検出した倍音チャンネルのインデクスを周波数の小さい方からhm1、hm2と表記する。以降、hm1は基準インデクスとも呼び、その基準インデクスhm1を持つ倍音チャンネルは基準チャンネルとも呼ぶことにする。各倍音チャンネルの位相差ΔΘi,k(k=hm1、hm2)は式(10)、つまりそのチャンネルの実位相差δに式(11)により算出されるΩi,k・Δtを加算することで計算される。
【0034】
ピッチスケーリング値ρは、倍音チャンネルの検出結果から以下のように算出する。
先ず、検出した2つの倍音チャンネルのインデクスhm1、hm2に対応する周波数の最大公約数を求める。その最大公約数は、ユークリッドの互除法を使って算出することができる。負でない2つの整数x、yの最大公約数gcd(x、y)は
を再帰的に繰り返すことで算出することができる。式(12)中の「x mod y」はxをyで割った余りを表している。最大公約数gcd(x、y)は別の方法で算出してもよい。
【0035】
本実施の形態では、元音声として人の音声を想定している。このことから、元音声の取りえる周波数の下限を80Hzとし、インデクス値の下限はその周波数に相当する6としている。それに合わせ、式(12)中のy=0の条件はy<6としている。算出した最大公約数はxと表記する。
最大公約数xは、ピッチ(基音)に相当する周波数チャンネルを倍音チャンネルとして抽出できたか否かに係わらずに求めることができる。このため、ミッシング・ファンダメンタルと呼ばれる基本周波数が欠落、或いは他の周波数と比較して非常に小さいような楽音でも確実に求めることができる。
最大公約数xを算出した後は、基準インデクスhm1に対応する周波数とがその公約数xの比である倍数hmxを計算する。その倍数hmxは
hmx=hm1/x ・・・ (13)
により求められる。このようにして求める倍数hmxは、基準チャンネルに相当する周波数を基本周波数(基音(ピッチ)の周波数)で割った値に相当する。
【0036】
目標ピッチの展開した位相差ΔΘdは、式(13)により求めた倍数hmxを乗算して算出する。目標ピッチの基本周波数をfd[Hz]とすると、それらの乗算は
ΔΘd・hmx=2πfd・Δt・hmx
=(2πfd・hmx・N)/(fs・OVL) ・・・(14)
により行うことができる。元音声のピッチを目標ピッチに変換するためのピッチスケーリング値ρは
ρ=ΔΘd・hmx/ΔΘi,hm1 ・・・ (15)
で算出できる。図2の位相補償部25は、このようにしてスケーリング値ρを算出してピッチシフタ27に出力する。それにより、ピッチシフタ27はそのスケーリング値ρでピッチスケーリングを行い、ピッチをシフトさせる。
【0037】
また、位相補償部25は、下式により位相のスケーリングを行う。
θ'i,k=ΔΘi,k((θ'i-1,hm1−θi-1,hm1)/ΔΘi,hm1+(ρ−1))
+θi,k ・・・(16)
式(16)では、スケーリングを行って得られる位相差には「’」を付して示している。その式(16)によるスケーリングを行うことにより、時間軸上の位相の一貫性(HPC:Horizontal Phase Coherence)およびチャンネル間、すなわち周波数成分間の位相関係(VPC:Vertical Phase Coherence)は共に保存される(特願2004−374090参照)。
【0038】
位相補償部25は、式(16)によりスケーリングを行った後の位相phase’、及び式(1)から算出した周波数振幅magから、以下のオイラーの公式により実数成分real’、虚数成分img’を算出し、複素数の周波数成分に変換する。
real’=mag・cos(phase’) ・・・ (17)
img’ =mag・sin(phase’) ・・・ (18)
【0039】
IFFT部26は、このようにして変換された周波数成分を周波数チャンネル毎に位相補償部25から入力し、IFFTを実行して時間領域上のデータに戻す。ピッチシフタ27は、位相補償部25から入力するピッチスケーリング値ρに応じて、IFFT部26が生成したフレームに対する補間、或いは間引きによるピッチスケーリングを行う。それにより、データ量は1/ρに伸縮するが、位相補償部25はρ倍の位相スケーリング(式(16))を行っているため、その伸縮は打ち消され、データ量は元の大きさを維持することになる。そのようにして得られたフレームをフレーム加算部28がオーバーラップ加算するため、目標ピッチを持つ合成音声がサウンドシステム11により放音されることになる。
【0040】
次に、図1のカラオケ装置の動作について、図3に示す各種カウンタ、図4ないし図12に示すCPU1による歌唱採点処理のプログラムのフローチャート、および、図13ないし図16を参照して詳細に説明する。
歌唱採点処理のプログラムの実行においては、2のべき乗である256(=28)個のサンプルを1フレームとして、伴奏曲のノートオンのピッチとマイク7からの歌唱者の音声信号のピッチとのピッチ差を検出しながら歌唱力の採点を行う。具体的には、カラオケが開始すると8msecごとに歌唱者の音声信号のピッチと歌唱されるべきピッチ(基準値)との差分を検出し、検出したピッチ差分のデータを図2の入力バッファ21に積算する。積算されたピッチ差分のデータは、256msecごと、すなわち32回のピッチ差分のデータの積算値の平均値である平均ピッチ差分が計算される。次に、積算された平均ピッチ差分のデータが約4sec(4096msec)の区間ごとに採点される。
【0041】
このため、図3に示すように、歌唱採点処理のためにCPU1内部のRAMに用意された7個のカウンタCNTA〜CNTGを用いる。CNTAは、ピッチ差分を積算した回数を表すカウンタである。CNTBは、ピッチ差分のエラーを積算した回数を表すカウンタである。CNTCは、ピッチ差分の算出の回数を表すカウンタである。CNTDは、平均ピッチ差分を積算した回数を表すカウンタである。CNTEは、平均ピッチ差分エラーを積算した回数を表すカウンタである。CNTFは、平均ピッチ差分の算出の回数を表すカウンタである。CNTGは、区間採点を積算した回数を表すカウンタである。
【0042】
図4は、CPU1のメインルーチンのフローチャートである。
先ず、電源がオンされたことに伴い、初期化処理を実行する(ステップSA1)。ステップSA1の後は、ステップSA2からステップSA4のループ処理を繰り返す。すなわち、スイッチ部3を構成するスイッチへのユーザの操作に対応するためのスイッチ処理を実行し(ステップSA2)、カラオケ処理を実行し(ステップSA3)、発音処理、エフェクト処理、音量調整処理などのその他の処理を実行する(ステップSA4)。
【0043】
図5は、メインルーチンにおけるステップSA2のスイッチ処理のフローチャートである。曲セレクトスイッチがオンされたか否かを判別し(ステップSB1)、このスイッチがオンされたときは、セレクトされたカラオケ曲の曲番号をレジスタSONGにストアする(ステップSB2)。そして、その曲番号の伴奏曲を曲メモリ2から検索して(ステップSB3)、歌詞が始まる歌唱区間を検出して時間を設定する(ステップSB4)。具体的には、伴奏曲がスタートしてから歌唱区間が開始するまでの時間、すなわちイントロの時間をレジスタにストアして設定する。そして、図4のメインルーチンに戻る。伴奏曲がスタートすると、後述するタイマインタラプトごとに設定された時間がデクリメントされる。
【0044】
ステップSB1において曲セレクトスイッチがオンでない場合には、スタート/ストップスイッチがオンされたか否かを判別し(ステップSB5)、このスイッチがオンされたときは、フラグSTFを反転する(ステップSB6)。そして、STFが1(曲開始)に反転したか又は0(曲停止)に反転したかを判別する(ステップSB7)。STFが1に反転したときは、タイマインタラプトの禁止を解除する(ステップSB8)。一方、STFが0に反転したときは、タイマインタラプトを禁止する(ステップSB9)。タイマインタラプトを解除又は禁止した後は、図4のメインルーチンに戻る。
【0045】
ステップSB5において、スタート/ストップスイッチがオンでない場合には、他のスイッチがオンされたか否かを判別する(ステップSB10)。例えば、エコーやリバーブの効果音を付加するエフェクトスイッチ、音量を調整するボリュームスイッチなどの、他のスイッチがオンされたか否かを判別する。他のスイッチがオンされたときは、そのスイッチに対応する処理を行って(ステップSB11)、図4のメインルーチンに戻る。
【0046】
図6は、タイマインタラプトのフローチャートである。発声すべき歌唱区間であるか否かを判別し(ステップSD1)、歌唱区間であるときは、フラグKFが0であるか否かを判別する(ステップSD2)。KFが0である場合には、KFを1にセットする(ステップSD3)。図5のステップSB8において、タイマインタラプトの禁止が解除された後は、一定時間ごとのタイマ割り込みを受け付ける。この結果、曲が開始した後は、上記したように、タイマインタラプトごとにレジスタにストアしたイントロの時間がデクリメントされる。したがって、最初の歌唱区間になったときは、KFを1にセットする。ステップSD1において歌唱区間でない場合には、KFが1であるか否かを判別する(ステップSD4)。KFが1であるときは、歌唱区間が終了したので、KFを0にリセットする(ステップSD5)。そして、図4のメインルーチンに戻る。この後は、歌唱区間になるたびにKFを1にセットする。ステップSD4においてKFが0である場合には、まだイントロの時間が経過していない場合であるので、メインルーチンに戻る。
【0047】
ステップSD3においてKFを1にセットした後、又は、ステップSD2においてKFが1であるときは、タイマレジスタTの値(初期値は0)をインクリメントする(ステップSD6)。そして、Tの値が8msecに達したか否かを判別し(ステップSD7)、Tの値が8msecに達したときは、フラグTFを1にセットする(ステップSD8)。TFを1にセットした後、又は、ステップSD7においてTの値が8msecに達していない場合には、図4のメインルーチンに戻る。
【0048】
図7は、メインルーチンにおけるステップSA3のカラオケ処理のフローチャートである。まず、KFが1(歌唱区間)であるか否かを判別し(ステップSC1)、KFが0の場合はメインルーチンに戻るが、KFが1の場合には、ピッチ差分を算出する処理を実行する(ステップSC2)。
図8は、ピッチ差分を算出する処理のフローチャートである。8msecの経過時間を示すフラグTFが1であるか否かを判別し(ステップSE1)、TFが0の場合はこのフローチャートを終了するが、TFが1の場合には、8msecごとのピッチ比算出処理を実行する(ステップSE2)。
【0049】
図9は、ピッチ比算出処理のフローチャートである。まず、A/D変換器8から元音声データが出力されるサンプリングタイミングか否か判定する(ステップSF1)。そのタイミングであった場合、判定はYESとなり、その元音声データをRAM5上の入力バッファ21に書き込み(ステップSF2)、フレーム抽出タイミングか否か判定する(ステップSF3)。前回そのタイミングとなってからホップサイズ分の元音声データをサンプリングする時間が経過した場合には、判定はYESとなって、入力バッファ21に格納された元音声データを1フレーム分、抽出し、抽出したフレームに対して、高周波成分を除去するLPF(ローパスフィルタ)処理、及びFFT(高速フーリエ変換)を順次、行う(ステップSF4)。
【0050】
次に、FFTによって得られる各チャンネルの周波数成分を対象に位相補償処理を実行する(ステップSF5)。位相補償処理の後は、位相補償処理を実施した各チャンネルの周波数成分を対象にしたIFFT(高速逆フーリエ変換)、そのIFFTにより得られる1フレーム分の音声データへのタイムスケーリング処理の実行によるピッチシフトを行い、そのピッチシフトによって得られた合成音声データをRAM5上の出力バッファ29に格納された合成音声データにオーバーラップ加算する(ステップSF6)。
なお、図2に示すフレーム抽出部22、LPF23、及びFFT部24の機能は、ハードウェアとしても実現できるが、この実施形態においては上記ステップSF4の処理を実行することで実現される。同様に、位相補償部25の機能は、ステップSF5の位相補償処理を実行することで実現される。また、IFFT部26、ピッチシフタ27及びフレーム加算部28の機能は、ステップSF6の処理を実行することで実現される。
【0051】
次に、1サンプリング分の合成音声データを出力すべきタイミングか否か判定する(ステップSF7)。そのタイミングであった場合、判定はYESとなり、出力すべき合成音声データを出力バッファ29から読み出して、楽音生成部9を介して、D/A変換器10に送出する(ステップSF8)。そして、このフローチャートを終了する。なお、楽音生成部9は、内部で生成した楽音の波形データと入力したデータとをミックスする機能を有する。
【0052】
図10は、図9のピッチ比算出処理におけるステップSF5の位相補償処理のフローチャートである。先ず、各周波数チャンネルの周波数成分から式(1)、(2)より周波数振幅mag、位相phase(=θ)を算出する(ステップSG1)。次に、式(4)〜(10)による、展開した位相差ΔΘi,kの算出を開始し(ステップSG2)、実位相差δが算出された時点である式(10)の手前で、実位相差δから倍音チャンネルを2つ検出する(ステップSG3)。次に、倍音チャンネルは2以上であるか否かを判別し(ステップSG4)、2以上である場合には、式(10)により各周波数チャンネルの位相差ΔΘi,kを算出して、位相展開を完了する(ステップSG5)。次に、検出した2つの倍音チャンネルに対して、式(12)〜(15)により、スケーリング値ρを算出するスケーリング値算出処理を実行する(ステップSG6)。
【0053】
点線の枠で示すステップSG6のスケーリング値算出処理においては、検出した2つの倍音チャンネルのインデクス値hm1、hm2に対応する周波数をそれぞれ変数h1、h2に代入する(ステップSG10)。ここで変数h1、h2はそれぞれ、式(12)のx、yに対応する。そして、変数h2の値に対応するインデクス値が6未満であるか否か判定する(ステップSG11)。そのインデクス値が6以上であった場合には、変数h1の値を変数h2の値で割って得られる剰余を変数tに代入し、変数h1に変数h2の値を代入し、更に変数h2に変数tの値を代入する(ステップSG12)。そして、ステップSG11において再度インデクス値が6未満であるか否かの判定を行う。すなわち、変数h2の値に対応するインデクス値が6未満になるまで、式(12)によりインデクス値hm1、hm2に対応する周波数間の最大公約数が変数h1に代入される。変数h2の値に対応するインデクス値が6未満になったときは、式(13)により変数hmxに、インデクス値hm1に対応する周波数を変数h1の値(最大公約数)で割った値を代入する(ステップSG13)。次に、式(14)により、位相差ΔΘdに変数hmxの値を乗算し、その乗算結果を用いて式(15)によりスケーリング値ρを算出する(ステップSG14)。
【0054】
なお、この場合において、倍音チャンネルを2つ抽出しているが、3つ以上の倍音チャンネルを抽出するようにしてもよい。ピーク検出を併せて行うようにした場合には、実位相差に注目して抽出した倍音チャンネルの中から、周波数振幅の大きさを考慮して2つ以上の倍音チャンネルを抽出するようにしてもよい。
ピッチシフトによりフォルマントも移動する。そのため、シフト量(スケーリング値ρ)が大きくなるほど、合成音声は不自然なものとなる。それを回避するために、フォルマントの補償を併せて行うようにしてもよい。
【0055】
また、元音声の基音周波数を抽出しなくとも目標ピッチへのピッチシフトを実現できることから、その基本周波数は抽出していない。しかし、その基本周波数は、倍数hmxを用いて抽出することができる。その抽出(算出)は、基本周波数をfiと表記すると、式(7)を用いて、
fi=ΔΘi,hm1/(2π・Δt・hmx)
=(ΔΘi,hm1・fs・OVL)/(2π・N・hmx) ・・・ (19)
により行うことができる。目標ピッチが周波数で指定されているような場合には、基本周波数fiを算出してから、その目標ピッチの周波数との比をとることにより、スケーリング値ρを求めてもよい。また、算出した基本周波数fiは表示部6等によりユーザに知らせるようにしてもよい。合成音声波形の生成については、別の方法を採用してもよい。
【0056】
ステップSG6のスケーリング値算出の後は、位相差ΔΘi、kを用いて、式(16)による位相スケーリング処理を行う(ステップSG7)。次に、位相phase’、及び式(1)から算出した周波数振幅magから、実数成分real’(式(17))、虚数成分img’(式(18))を算出し、複素数の周波数成分に変換する(ステップSG8)。ステップSG4において、倍音チャンネルが2以上でない場合には、エラーと判断してエラーフラグをアクティブにする(ステップSG9)。ステップSG8において複素数変換を行った後、又は、ステップSG9においてエラーと判断した後は、位相補償処理を終了する。
【0057】
図9のピッチ比算出処理の後は、図8のピッチ差分算出処理のステップSE3に移行して、図10のステップSG4において倍音チャンネルが2以上か否かの判別結果を参照し、倍音チャンネルが2以上でエラーと判断しなかったか、又は、倍音チャンネルが2以上でなくエラーと判断したかによって、処理を分岐する。基音が存在するチャンネルが2以上でエラーと判断しなかったときは、算出したピッチ比から「1.0」を減算した値をピッチ差分としてストアする(ステップSE4)。
【0058】
算出したピッチ比は、マイク7から入力された音声信号のピッチ(入力音声ピッチ)に対する基準値のピッチ(基準ピッチ)の比であるので、両者のピッチが一致したときは、ピッチ比である(入力音声ピッチ)/(基準ピッチ)は「1.0」の値になる。したがって、ピッチ比から「1.0」を減算した値は、入力音声ピッチが基準ピッチより高いときはプラス、入力音声ピッチが基準ピッチより低いときはマイナスとなり、ピッチ差分は正負の符号を含むことになる。
【0059】
ステップSE4においてピッチ差分を算出した後は、ピッチ差分の積算回数であるCNTAのカウント値が16未満であるか、又は、16以上であるかを判別する(ステップSE5)。CNTAのカウント値が16未満である場合には、ピッチ差分をバッファにストアして積算する(ステップSE6)。そして、CNTAのカウント値をインクリメントする(ステップSE7)。本来ならば、ピッチ差分のデータは、256msecごとに平均値を計算する。すなわち、32回のピッチ差分のデータを積算するごとに平均値を計算する。しかし、この実施形態においては、CPU1の負荷を軽減するために、フレーム数を2のべき乗として、フレーム数の半数までの16回のピッチ差分のデータを積算するごとに平均値を計算する。
【0060】
ステップSE3において、基音が存在するチャンネルが1以下でエラーであると判断したときは、ピッチ差分エラーの積算回数のカウンタCNTBの値をインクリメントする(ステップSE8)。CNTBの値をインクリメントした後、又は、ステップSE7においてCNTAの値をインクリメントした後は、ピッチ差分の算出回数のカウンタCNTCの値をインクリメントする(ステップSE9)。ステップSE5においてCNTAの値が16になった後は、CNTAの値はインクリメントせず、ピッチ差分の算出回数のカウンタCNTCの値をインクリメントする(ステップSE9)。この結果、エラー以外のピッチ差分のデータのうち、最大で半数のピッチ差分のデータが捨てられることになるが、8msecという極めて短い時間においては、半数のピッチ差分のデータが失われても大勢に影響はない。次に、フラグTFを0にリセットして(ステップSE10)、図7のステップSC3の差分平均算出処理に移行する。
【0061】
図11は、256msecごとに実行される差分平均算出処理のフローチャートである。
まず、8msecごとのピッチ差分の算出回数のカウンタCNTCの値がフレーム数である32に達したか否かを判別し(ステップSH1)、CNTCの値が32に達した後は、CNTBが16より大きいか否かを判別する(ステップSH2)。すなわち、ピッチ差分エラーがフレーム数の半分より多いか否かを判別する。CNTBが16以下である場合には、積算値を右シフトしてビット差分の平均値を算出する(ステップSH3)。フレーム数は2のべき乗の32であるので、フレーム数の半分も2のべき乗の16である。したがって、積算された16個のビット差分の平均値は、積算値を除算する代わりに4ビットの右シフトによって算出する。これによって、CPU1の平均値算出の演算処理を軽減し、「演奏のコケ」と称される音切れのような発音処理のネックを回避できる。
【0062】
ステップSH3のシフト処理の後は、平均ピッチ差分の積算回数のカウンタCNTDの値が8未満であるか否かを判別する(ステップSH4)。上記したように、積算された256msecごとの平均ピッチ差分のデータは、4096msecの区間ごとに採点されるので、1区間の平均ピッチ差分は16(=4096/256)個のデータである。しかし、この場合にも、CPU1の負荷を軽減するために、8個の平均ピッチ差分のデータによって採点を行う。CNTDの値が8未満であるときは、平均ピッチ差分を積算し(ステップSH5)、CNTDの値をインクリメントする(ステップSH6)。
ステップSH2において、CNTBの値が16より多い場合、すなわち、ピッチ差分エラーの数がフレーム数である32の半分を超えた場合には、平均ピッチ差分エラーの積算回数のカウンタCNTEの値をインクリメントする(ステップSH7)。そして、エラー値を区間の平均値とする(ステップSH8)。
【0063】
ステップSH6においてCNTDの値をインクリメントした後、ステップSH8においてCNTEの値をインクリメントした後、又は、ステップSH4においてCNTDの値が8になった後は、平均ピッチ差分の算出回数のカウンタCNTFの値をインクリメントする(ステップSH9)。そして、図7のカラオケ処理のステップSC4に移行して、ピッチずれを表示し、次のステップSC5に移行して区間得点計算処理を実行する。
【0064】
図12は、約4secごとに実行される区間得点計算処理のフローチャートである。
まず、256msecごとの平均ピッチ差分の算出回数であるCNTFの値が16になったか否かを判別する(ステップSJ1)。すなわち、平均ピッチ差分の算出回数が1区間である約4sec(4096msec)の最大回数になったか否かを判別する。CNTFの値が16未満の場合にはこのフローチャートを終了するが、CNTFの値が16になったときは、平均ピッチ差分エラーの積算回数のカウンタCNTEの値が平均ピッチ差分の算出回数の半分(許容エラー数)である8より多いか否かを判別する(ステップSJ2)。CNTEの値が8以下である場合には、平均ピッチ差分の積算値を右シフトして平均値を算出する(ステップSJ3)。図11のステップSH4に示したように、CNTDの値である積算回数は8であるので、3ビットの右シフトにより8個の平均ピッチ差分の平均値を算出する。
【0065】
次に、歌唱者の初級、中級、上級のレベルごとにパラメータをセットする(ステップSJ4)。セットするパラメータは、歌唱力を最大評価値の100点とする基準値の許容範囲を規定するパラメータt、および、100点から0点までの範囲で許容範囲外の歌唱力の度合いを規定するパラメータaである。パラメータをセットした後、区間得点を計算する(ステップSJ5)。ステップSJ2において、CNTEの値が8より多くなり許容エラー数を超えたときは、区間得点を0とする(ステップSJ6)。ステップSJ5において区間得点を計算した後、又は、ステップSJ6において区間得点を0点にした後は、区間得点を積算する(ステップSJ7)。そして、区間採点の積算回数のカウンタCNTGの値をインクリメントして(ステップSJ8)、ピッチずれを表示し(ステップSJ9)、図7のカラオケ処理に戻る。
【0066】
ステップSJ5における区間得点の計算において、基準値からの平均ピッチ差分をxとし、区間得点をgradeとすると、区間得点の演算式は、下記の式(20)で表される。
最初にxの絶対値をとるのは、図8のステップSE5で求めた平均ピッチ差分が正負の符号を含んでいるので、正の値の領域だけで計算を行うためである。
また、ピッチの最小単位である半音のピッチが100セントであり、1オクターブが1200セントであるので、得点が100点となるピッチ範囲をdiff_t[セント]とすると、パラメータtは、下記の式(21)で表される。
得点が0点となるピッチ差分値をdiff_a[セント]とすると、パラメータaは、下記の式(22)で表される。
【0067】
図13は、初級、中級、上級の各レベルにおけるパラメータtおよびパラメータaの具体例を示す図である。図13に示すように、初級の歌唱者の場合には、基準値からのピッチ差分が40セントでも100点になる。一方、上級の歌唱者の場合には、基準値からのピッチ差分が20セント以内でなければ100点にはならない。また、初級の歌唱者の場合には、基準値からのピッチ差分が240セントで0点になるが、上級の歌唱者の場合には、基準値からのピッチ差分が120セントで0点になる。中級の歌唱者の場合には、100点になるパラメータtおよび0点になるパラメータaは、初級と上級のほぼ中間になる。
【0068】
図14は、区間得点の演算式である式(20)〜(22)の特性を示す図である。図14において、横軸はピッチ差分を表し、縦軸は区間得点を表している。図14に示すように、ピッチ差分に対する区間得点の特性は台形の形状になっている。そして、台形の上辺は歌唱力を100点とするピッチ差分の許容範囲を規定し、台形の傾斜は100点から0点までの範囲で許容範囲外の歌唱力の度合いを規定する。初級の歌唱者の場合には、台形の上辺が長くなり、傾斜が緩やかになる。一方、上級の歌唱者の場合には、台形の上辺が短くなり、傾斜が急峻になる。中級の歌唱者の場合には、台形は初級と上級との中間の形状になる。
【0069】
図7のカラオケ処理において、ステップSC5の区間得点の計算を行った後は、その区間得点を表示する(ステップSC6)。図15は、区間得点およびピッチずれを表示する画面を示す図である。ピッチずれの表示は、図15に示すように、発光色の異なる3つのLEDによって、ピッチが高い状態、ピッチが合っている状態、ピッチが低い状態を対応するLEDの点灯によって表示する。ステップSC6において、区間得点を表示した後は、カラオケが停止したか否かを判別し(ステップSC7)、カラオケが停止していない場合には、ステップSC2に移行して、ステップSC6までの処理を繰り返す。
【0070】
カラオケ曲が終了するか、又は、スタート/ストップスイッチがオンされて、ステップSC7においてカラオケの停止であると判別したときは、総合得点を計算する(ステップSC8)。総合得点の計算は、図12のステップSJ7において計算した区間得点の積算値をステップSJ8でインクリメントした最終のCNTGの値、すなわち、区間得点の積算回数で除算することによって算出される。総合得点の計算のときには、カラオケ演奏は停止しており、CPU1は発音処理から解放されているので、シフト処理でなく除算処理によって総合得点を算出する。総合得点を算出した後は、その総合得点を表示し(ステップSC9)、フラグKFを0にリセットし(ステップSC10)、フラグSTFを0にリセットして(ステップSC11)、図4のメインルーチンに戻る。
【0071】
図16は、マイク7から入力される音声信号の発声区間と、評価対象の歌唱区間との関係を示す図である。図16に示すように、伴奏曲において歌唱区間に達するまえに発声が行われた場合には、その発声については無判定として得点には加味しない。一方、歌唱区間であるにもかかわらず、発声が行われない場合には、得点を0点とする。
【0072】
以上のように、上記実施形態によれば、CPU1は、評価すべき歌唱力が100点となる基準値の許容範囲を規定するパラメータt、および、100点から0点の範囲で許容範囲外の歌唱力の度合いを規定するパラメータaを設定して、入力される音声信号の評価値をパラメータtおよびパラメータaに基づいて算出する。この場合において、CPU1は、音声信号のピッチおよび発声タイミングの評価値を算出する構成にしたが、いずれか一方の評価値を算出する構成にしてもよい。
したがって、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価するができる。
【0073】
また、上記実施形態によれば、CPU1は、入力される音声信号のピッチと基準値との差分を算出し、符号を含む差分を積算して音声信号のピッチの評価値をパラメータtおよびパラメータaに基づいて算出する。
したがって、上級の歌唱者がビブラート唱法によってピッチに揺らぎが発生した場合でも、ピッチの揺らぎをピッチずれと見なさず、正当に歌唱力を評価することができる。
【0074】
また、上記実施形態によれば、CPU1は、入力される伴奏曲の歌唱区間を検索して、歌唱対象区間内に入力される音声信号の評価値を算出し、歌唱区間外に入力される音声信号については評価の対象外とする。
したがって、歌唱力を正確に採点することができる。
【0075】
また、上記実施形態によれば、CPU1は、入力される音声信号における2のべき乗のサンプル数を1フレームとして各フレームのエラー数を分析し、分析したエラー数が1フレームの2分の1を超えたときは、そのフレームを0点とし、分析したエラー数が1フレームの2分の1を超えないときは、1フレームの2分の1に相当するエラー以外のサンプル数によってそのフレームの評価値を算出する。
したがって、除算処理の代わりにシフト処理によってピッチ差分の平均値を算出することで、CPU1に大きな負荷がかからないようにすることができる。その結果、音切れのような発音処理のネックを回避できる。
【0076】
また、上記実施形態によれば、CPU1は、入力される音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出して基音のピッチを分析し、検出した基音のピッチの評価値を算出する。この場合において、CPU1は、入力される音声信号の周波数成分から位相を算出し、その算出した位相を用いて音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出する。
したがって、入力される歌唱者の音声信号の基音のピッチを確実に検出することができる。
【0077】
さらに、倍音は基音(ピッチ)の周波数の整数倍の周波数を持っている。それにより、倍音の周波数成分が存在する2つ以上の周波数チャンネル(倍音チャンネル)に対応する周波数間の最大公約数は、基音の周波数を表す情報として扱うことができる。このため、図10のスケーリング値の算出処理に示したように、2つ以上の周波数チャンネルの最大公約数を用いて、第1の音声波形であるhm1の基音を目標とする基音に高精度に変換(シフト)した第2の音声波形であるhm2を生成することができる。第1の音声波形の基音を抽出(検出)する必要性は回避されることから、ミッシング・ファンダメンタルと呼ばれる基本周波数が欠落、或いは他の周波数と比較して非常に小さいような第1の音声波形でも、目標とする基音を持つ第2の音声波形を確実に生成することができる。また、その最大公約数を用いることにより、第1の音声波形の基音の周波数も確実に抽出(検出)することができる。
【0078】
次に、上記実施形態の変形例について説明する。
上記実施形態においては、1200セントの1オクターブについた採点を行い、オクターブ違いの同音名については考慮していないが、オクターブ違いを検出して、差分をオクターブ以内の範囲になるように、折り返して採点するような構成にしてもよい。
また、総合得点の計算時に、初級や中級の歌唱者の場合には、ボーナス点を加算して採点するような構成にしてもよい。例えば、区間得点の最高点を保持しておき、総合得点の算出の際に、保持した最高点に、初級や中級のレベルに応じた係数を乗算して、総合点に加算する。
また、上記実施形態においては、平均ピッチ差分および区間採点のときに積算されるデータ数をフレーム数の半分にしたが、平均値を算出する演算を除算の代わりにシフト処理で行うことが可能なように、2のべき乗分の1であればフレーム数の半分でなくてもよい。4分の1、8分の1でもよい。分母が大きくなるほど廃棄するデータ数が多くなるが、採点の信頼性が得られる比率であればよい。一般に、4secのような短い区間においては、歌唱者のレベルにかかわらず歌唱力の変動は極めて少ないので、8分の1やそれより少ないデータ数によっても採点の信頼性は得られる。
また、上記実施形態においては、ピッチ差分を算出して歌唱力を採点する構成にしたが、発音のタイミングの差分を算出して歌唱力を採点する構成にしてもよい。
【0079】
なお、上記実施形態においては、ROM4にあらかじめ記憶されている歌唱採点処理のプログラムをCPU1が実行する装置の発明について説明したが、フレキシブルディスク(FD)、CD、メモリカードなどの外部記憶媒体に記憶された歌唱採点処理のプログラム、又は、インターネットなどのネットワークからダウンロードした歌唱採点処理のプログラムをRAM5あるいは別途設けたフラッシュROMなどの不揮発性メモリにインストールして、CPU1がそのプログラムを実行する構成も可能である。この場合には、プログラムの発明および記憶媒体の発明を実現できる。
【0080】
すなわち、本発明の歌唱採点処理のプログラムは、
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出するステップBと、をコンピュータに実行させる。
【0081】
前記ステップBは、入力される音声信号のピッチおよび発声タイミングのうち少なくとも1つの評価値を算出することを特徴とする。
この場合において、前記ステップBは、入力される音声信号のピッチと前記基準値との差分を算出し、符号を含む差分を積算して当該音声信号のピッチの評価値を前記設定された第1のパラメータおよび第2のパラメータに基づいて算出することを特徴とする。
【0082】
入力される伴奏曲の歌唱区間を検索するステップCをさらに有し、前記ステップBは、当該ステップCによって検索された歌唱対象区間内に入力される音声信号の評価値を算出し、当該歌唱区間外に入力される音声信号については評価の対象外とすることを特徴とする。
【0083】
入力される音声信号における2のべき乗のサンプル数を1フレームとして各フレームのエラー数を分析するステップDをさらに有し、前記ステップBは、前記ステップDによって分析されたエラー数が1フレームの2分の1を超えたときは当該フレームを最低評価値とし、分析されたエラー数が1フレームの2分の1を超えないときは1フレームの2分の1に相当するエラー以外のサンプル数によって当該フレームの評価値を算出することを特徴とする。
【0084】
前記ステップDは、入力される音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出して基音のピッチを分析し、前記ステップBは、前記ステップDによって検出された基音のピッチの評価値を算出することを特徴とする。
【0085】
前記ステップDは、入力される音声信号の周波数成分から位相を算出し、当該算出した位相を用いて当該音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出することを特徴とする。
【符号の説明】
【0086】
1 CPU
2 曲メモリ
3 スイッチ部
4 ROM
5 RAM
6 表示部
7 マイク
8 A/D変換器
9 楽音生成部
10 D/A変換器
11 サウンドシステム
【技術分野】
【0001】
本発明は、入力される音声信号の歌唱力を採点する歌唱採点装置および歌唱採点処理のプログラムに関するものである。
【背景技術】
【0002】
入力される音声信号の歌唱力を採点する装置として、カラオケ採点装置が知られている。
例えば、ある特許文献のカラオケ採点装置は、MIDIメッセージで与えられたメロディ情報に対する歌唱者の歌い方を評価するために、第1の検出手段が歌唱者の音声に基づいてそのピッチデータおよびレベルデータを検出し、第2の検出手段がMIDIメッセージの中の歌唱者の発音すべき歌唱メロディに対応するノートオン/オフデータ、ピッチデータおよびレベルデータを検出する。そして、それぞれ検出されたピッチデータおよびレベルデータを個々にピッチ比較手段およびレベル比較手段で比較し、その比較結果とノートオン/オフデータとに基づいて、歌唱法の評価のためのデータを作成する。(特許文献1参照)
また、別の特許文献のカラオケ採点装置は、模範となる音声とマイクから入力される歌唱者の音声との近似度を、より精度よく自動的に判定するために、この特許文献における図1の構成に示されているように、レーザディスク101において再生された模範歌唱の音声信号は、レベル検出部A103およびピッチ検出部A104に供給され、レベル検出部A103において検出された信号レベルデータおよびピッチ検出部A104において検出されたピッチデータがバッファA102に格納される。また、利用者の音声はマイク201から入力されて、音声信号がレベル検出部B203およびピッチ検出部B204に供給され、レベル検出部B203において検出された信号レベルデータおよびピッチ検出部B204において検出されたピッチデータはバッファB202に格納される。そして、比較判定部300は、それぞれの系統において格納されたデータを読み出し、レベル信号から歌うタイミングを、ピッチデータからピッチずれの判定を行い、比較結果を採点データとして出力する。(特許文献2参照)
【0003】
一方、マイクなどから入力された音声信号を分析する際に、デジタル信号に変換した時間領域の音声信号を高速フーリエ変換(FFT)などによって周波数領域のスペクトル信号に変換して、変換したスペクトル信号を分析することが従来行われている。
例えば、ある特許文献の音声変換装置は、簡単な位相制御処理により高品質にピッチ周波数を変換して音声信号を分析するために、デジタル変換された第1の音声信号を受け、フーリエ変換によりスペクトル信号に変換するフーリエ変換手段と、フーリエ変換手段からスペクトル信号を受け、スペクトル信号の中から音源情報信号を選択的に出力する選択手段と、選択手段から音源情報信号を受け、音源情報信号のピッチ周波数を変換し、周波数変換された信号を出力する周波数変換手段と、フーリエ変換手段からのスペクトル信号に含まれるスペクトル包絡信号と周波数変換手段から出力された信号とに応答して、ピッチ周波数が変換されたスペクトル信号を分析フレーム毎に受け、これを逆フーリエ変換により第2の音声信号に変換する逆フーリエ変換手段と、逆フーリエ変換手段から第2の音声信号を受け、ピッチ周波数の変換倍率に応答して、第2の音声信号の位相を分析フレームのシフト幅によって制御する位相制御手段を含む構成になっている。(特許文献3参照)
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平10−49183号公報
【特許文献2】特開平11−224094号公報
【特許文献3】特許第2753716号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記特許文献1および特許文献2においては、基準値(メロディ情報、模範となる音声)と入力される歌唱者の音声とを単純に比較して歌唱力を評価しているので、曲の開始から終了までの間で評価値が細かく変動することになり、膨大な数の評価値を一時的に記憶するメモリが必要となるためコストアップを招くとともに、曲の途中や曲が終了した後に膨大な数の評価値の平均を算出する演算処理、特に除算処理のためにCPU等の制御手段に大きな負荷がかかるという課題があった。
また、上記特許文献1および特許文献2においては、上級の歌唱者がビブラート唱法によってピッチに揺らぎが発生した場合には、それをピッチずれと誤って判断して歌唱力を低く評価するという課題があった。
また、上記特許文献1および特許文献2においては、入力される音声信号のピッチおよびレベルを2系統の比較手段によって比較し、ピッチずれおよび発音タイミングずれを検出して歌唱力を評価しているので、装置が複雑な構成になるという課題があった。
一方、上記特許文献3においては、フーリエ変換したスペクトル信号の中から音源情報信号、すなわち、基本周波数の音である基音のピッチを直接的に検出して選択するようになっているが、基音のレベルよりも倍音のレベルのほうが高い場合があるので、マイクから入力される音声信号の基音のピッチを確実に検出することができないという課題があった。
【0006】
本発明は、このような従来の課題を解決するためのものであり、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価することを目的とする。
【課題を解決するための手段】
【0007】
請求項1に記載の歌唱採点装置は、評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するパラメータ設定手段と、入力される伴奏曲の歌唱区間を検索する区間検索手段と、当該区間検索手段によって検索された歌唱区間内に入力される音声信号の評価値を前記パラメータ設定手段によって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とする算出する評価演算手段を備えた構成になっている。
【0008】
請求項2に記載の歌唱採点処理のプログラムは、評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、入力される伴奏曲の歌唱区間を検索するステップBと、当該ステップBによって検索された歌唱区間内に入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とするステップCとをコンピュータに実行させる構成になっている。
【発明の効果】
【0009】
本発明の歌唱採点装置および歌唱採点処理のプログラムによれば、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価するという効果が得られる。
【図面の簡単な説明】
【0010】
【図1】本発明の歌唱採点装置を適用した実施形態におけるカラオケ装置の構成を示すブロック図。
【図2】図1のCPUの信号処理機能をハードウェアとして表した機能構成図。
【図3】歌唱採点処理のために図1のCPU内部のカウンタの構成を示す図。
【図4】CPUのメインルーチンのフローチャート。
【図5】図4のメインルーチンにおけるスイッチ処理のフローチャート。
【図6】CPUのタイマインタラプトのフローチャート。
【図7】図4のメインルーチンにおけるカラオケ処理のフローチャート。
【図8】図7におけるピッチ差分算出処理のフローチャート。
【図9】図8におけるピッチ比算出処理のフローチャート。
【図10】図9における位相補償処理のフローチャート。
【図11】図7における差分平均算出処理のフローチャート。
【図12】図7における区間得点算出処理のフローチャート。
【図13】初級、中級、上級の各レベルにおけるパラメータの具体例を示す図。
【図14】区間得点の演算式の特性を示す図。
【図15】区間得点およびピッチずれを表示する画面を示す図。
【図16】入力される音声信号の発声区間と評価対象の歌唱区間との関係を示す図。
【発明を実施するための形態】
【0011】
以下、本発明の歌唱採点装置の実施の形態について、カラオケ装置を例に採って、図面を参照しながら詳細に説明する。
図1は、実施の形態におけるカラオケ装置の構成図である。図1において、CPU1は、装置全体の制御を行うとともに、少容量のROM・RAMおよびDSP(デジタル信号プロセッサ)機能を有する。CPU1のシステムバスには、曲メモリ2、スイッチ部3、ROM4、RAM5、表示部6、A/D変換器8、及び楽音生成部9が相互に接続され、CPU1と各部との間でデータやコマンドの授受を行う。
【0012】
曲メモリ2は、カラオケ用の複数の伴奏曲および歌詞を記憶している。スイッチ部3は、曲セレクトスイッチ、スタート/ストップスイッチ、およびその他の各種スイッチを備えている。ROM4は、CPU1が実行する歌唱採点処理のプログラムや各種制御用データ等を格納している。RAM5は、CPU1のワークエリアであり、各種のレジスタを有する。表示部6は、例えば液晶表示装置(LCD)や複数のLEDなどを備えている。A/D変換器8には無線又は有線によってマイク7が接続され、マイク7から入力されるアナログの音声信号のA/D変換を行いその音声データを出力する。例えば、サンプリング周波数8021Hz、16bitでAD変換を行う。以降、それがAD変換して得られる音声データについては便宜的に「元音声データ」、或いは「元波形データ」と呼び、マイク7に入力された音声については「元音声」と呼ぶことにする。楽音生成部9は、CPU1の指示に従い楽音発音用の波形データを生成する。D/A変換器10は、楽音生成部9が生成した波形データのD/A変換を行い、アナログのオーディオ信号を出力する。サウンドシステム11は、そのオーディオ信号を放音する。
【0013】
図2は、図1のマイク7からA/D変換器8に入力された音声信号に対して、CPU1の信号処理が行われて、D/A変換器10から出力されるまでの機能をハードウェアとして表した機能構成図である。図2において、入力バッファ21は、A/D変換器8が出力する元音声データを一時的に格納するバッファである。フレーム抽出部22は、入力バッファ21に格納された元音声データから予め定められたサイズ分の音声データであるフレームを切り出すことで抽出する。そのサイズ、つまり音声データ(サンプル)数は例えば256である。正確な位相展開の実施にはフレームをオーバーラップさせて抽出する必要があることから、フレームの切り出しはオーバーラップファクタOVLでオーバーラップさせて行う。そのファクタOVLの値としては4を設定している。この場合、ホップサイズは64(256/64=4)である。また、元音声データのピッチ(以降「元ピッチ」と呼ぶ)から目標ピッチへのピッチスケーリング値の範囲は0.5〜2.0の範囲を前提としている。
【0014】
フレーム抽出部22が抽出したフレームは、ローパスフィルタ(LPF)23に出力される。そのLPF23は、ピッチのシフトにより周波数成分がナイキスト周波数を超えることを防止するために高周波成分の除去を行う。FFT部24は、LPF23が出力するフレームを対象に高速フーリエ変換(FFT)を実行する。そのFFTは、FFTサイズ(点数)をフレームサイズの2倍(256×2=512)にして実行する。
【0015】
位相補償部25は、FFTの実行により得られた各周波数チャンネルの周波数成分を対象にして、ピッチシフトによるフレームの伸縮を補償するようにそのサイズを伸縮させる。例えばピッチスケーリング値が前提とする範囲の最大値である2とすれば、ピッチシフトによりフレームサイズは1/2に縮小するから、そのサイズを補償(維持)するためにフレームを2倍に引き伸ばす。このことから、FFTサイズはフレームサイズの2倍としている。ピッチスケーリング値の算出方法についての詳細は後述する。
【0016】
FFT部24は、LPF23から256サンプルのフレームを入力し、FFTサイズのフレームの前半部分にセットする。後半部分には全て0をセットする。後半部分に0をセットするのは、FFTを実行した後、周波数領域における補間効果をもたらすためである。その補間効果をもたらすために周波数の分解能が向上する。FFT部24は、そのようなセットを行ったフレームを対象にFFTを実行する。
【0017】
IFFT部26は、位相補償部25がサイズを伸縮させた後の各周波数チャンネルの周波数成分を、IFFT(逆FFT)を行うことにより時間領域上のデータに戻し、1フレーム分の音声データを生成して出力する。ピッチシフタ27は、位相補償部25から入力するピッチスケーリング値に応じて、IFFT部26が生成したフレームに対する補間、或いは間引きを行い、そのピッチをシフトする。補間、間引きには一般的なラグランジュ関数やsinc関数などが使用できるが、本実施の形態ではNeville補間によりピッチシフト(ピッチスケーリング)を行っている。上記補間、或いは間引きにより、フレームサイズは元のサイズ(256サンプル)となる。そのフレームの音声データについては以降「合成音声データ」と呼び、それによって発音される音声を「合成音声」と呼ぶことにする。
【0018】
出力バッファ29は、音声としてサウンドシステム11から放音させる合成音声データを格納するバッファである。フレーム加算部28は、ピッチシフタ27から入力した1フレーム分の合成音声データを、出力バッファ29に格納された合成音声データにオーバーラップファクタOVLでオーバーラップさせて加算する。出力バッファ29に格納された合成音声データは、D/A変換器10に出力されてD/A変換される。
【0019】
上記入力バッファ21、及び出力バッファ29は、例えばRAM5に確保された領域である。A/D変換器8、D/A変換器10、入力バッファ21、及び出力バッファ29を除く各部22〜28は、例えばRAM5をワーク用にして、CPU1がROM4に格納されたプログラムを実行することで実現される。特に詳細な説明は省略するが、目標ピッチは例えば鍵盤2への操作により指示するようになっている。その目標ピッチは、スタンダードMIDIファイル等の演奏データ、或いは通信ネットワークを介して受信されるデータなどにより指定してもよい。
【0020】
次に、上記位相補償部25によるピッチスケーリング値の算出方法について詳細に説明する。以降、そのスケーリング値はρと表記する。
FFTの実行により、周波数が異なる周波数チャンネル毎に、実数成分と虚数成分を持つ周波数成分が抽出される。実数成分をreal、虚数成分をimgと表記すると、各周波数チャンネルの周波数振幅mag、及び位相phaseは以下のように算出することができる。
【0021】
mag=(real2+img2)1/2 ・・・ (1)
phase=arctan(img/real) ・・・ (2)
arctanを用いて算出される位相phaseは、−π〜πの間に制限される。しかし、位相phaseは角速度の積分値であるから展開する必要がある。展開の有無の区別を容易にするために、折り畳まれている位相を小文字のθ、展開されている位相を大文字のΘで表記すると、本来は
Θk,t=θk,t+2nπ n=0,1,2,・・・ ・・・ (3)
となる。このことから、位相phase(=θ)はnを求めて展開する必要がある。ここで式(3)中のΘに下添字として付したk、tはそれぞれ、周波数チャンネルのインデクス、時刻を表している。
【0022】
その展開は、以下のような手順で行うことができる。
先ず、フレーム間の位相差Δθを次のようにして算出する。
Δθi,k=θi,k−θi-1,k ・・・ (4)
ここで、Δθi,kは元音声波形の周波数チャンネルkにおける直前のフレームと今回のフレームとの間の位相差、下添字のiはフレームをそれぞれ表している。今回のフレーム(現フレーム)はi、直前のフレームはi−1で表されている。
【0023】
式(4)中のΔθi,kは折り畳まれた状態にある。一方、周波数チャンネルkの中心角周波数Ωi,kは、サンプリング周波数をfs、FFT点数(サイズ)をNと表記すると
Ωi,k=(2π・fs)・k/N ・・・ (5)
で示される。その周波数Ωi,kの時、直前のフレームとの時間差をΔtとすると、位相差ΔZi,kは
ΔZi,k=Ωi,k・Δt ・・・ (6)
で算出できる。時間差Δtは
Δt=N/(fs・OVL) ・・・ (7)
である。式(6)は位相展開されている状態なので、以下のように記述できる。
【0024】
ΔZi,k=Δζi,k+2nπ ・・・ (8)
式(4)で算出される位相差Δθi,kと式(8)中の位相差Δζi,kの差をδ(=Δθi,k−Δζi,k)とすると
Δθi,k−Ωi,k・Δt=(Δζi,k+δ)−(Δζi,k+2nπ)
=δ−2nπ ・・・ (9)
が導出できる。従って式(9)の右辺の2nπを削除してその範囲を−πからπの間に制限すればδを算出できる。そのδは、元音声波形において実際に検出される位相差(以降「実位相差」と呼ぶ)である。
【0025】
そのように算出される実位相差δに位相差ΔZi,k(=Ωi,k・Δt)を加算すれば、以下のように位相展開された位相差ΔΘi,kを求めることができる。
ΔΘi,k=δ+Ωi,k・Δt=δ+(Δζi,k+2nπ)=Δθi,k+2nπ
・・・ (10)
式(10)中のΩi,k・Δtは、式(5)、(7)より下記のように変形できる。
【0026】
Ωi,k・Δt={(2π・fs)/N}・k・{N/(fs・OVL)}
=(2π/OVL)・k ・・・ (11)
FFTを含む離散フーリエ変換(DFT)では、音声データ(信号)に含まれる周波数成分の周波数がDFT点数の整数倍となる特別な場合を除き、すべての周波数チャンネルに周波数成分が漏れ出して(遷移して)しまう。そのため、信号の調波構造等を分析する場合は、DFTの結果から実際に周波数成分が存在する周波数チャンネルを検出する作業が必要になる。
【0027】
その検出には、周波数振幅のピークを検出し、そのピークを周波数成分の存在するチャンネルと見なす方法を採用するのが一般的である。そのための最も手順が単純な方法としては、前後2つのチャンネルの周波数振幅より大きい周波数振幅を持つチャンネルをピークとして見なすというものが挙げられる。しかし、そのような方法では、窓関数のサイドローブによるピークを間違ってピークと認識する場合がある。このため、探し出したピーク間のチャンネルで周波数振幅が最小となるチャンネルを抽出し、その周波数振幅がピークの周波数振幅の所定値(例えばピークの周波数振幅の−14db)以下であれば正しいピークと見なすことも行われている。
【0028】
そのようなピーク検出ではピークをより高精度に検出できるが、2段階の探索が必要で処理的に煩雑である。このことから、本実施の形態では、処理の負荷を軽減するために、ピーク検出は行わず、以下のように位相を考慮して、元音声の倍音の周波数成分が存在する周波数チャンネルを検出する。
【0029】
展開した位相差と周波数の関係は直線のグラフで表される。この場合において、グラフの縦軸は位相差、横軸は周波数であり、各チャンネルの中心周波数から計算される位相差、すなわち式(6)により計算されるΔZi,kが直線で表される。その直線に沿う形でプロットした線は、調波構造を持った音声、すなわち有声音の式(10)により計算される位相差ΔΘi,kを表すことになる。その位相差ΔΘi,kはFFT点数512点の前半128点分である。
【0030】
調波構造を持った音声では、その音声の倍音の周波数成分を持つ周波数チャンネル付近で線が階段状(平坦)となる。これは、その周波数チャンネルの周波数成分が近傍のチャンネルに漏れ出すためである。このようなことから、線の階段状となっている部分と直線が交差する個所を含む周波数チャンネルに倍音の周波数成分が存在していると考えられる。その交差する個所の周波数チャンネル(以下「倍音チャンネル」と呼ぶ)は、式(10)と式(6)から算出することができるが、処理的には多少煩雑となる。そこで本実施の形態では、式(9)の実位相差δを使って倍音チャンネルの検出を行う。
【0031】
上述したように、実位相差δは式(4)のΔθi,kと式(8)のΔζi,kとの差である。このδは実際に周波数成分が存在するチャンネルから離れるほど大きくなり、そのチャンネルに近づくほど小さくなる。チャンネルを超える際に0と交差し、周波数が大きくなる方向に越えた場合には、そのチャンネルを離れるにしたがって負側に絶対値が大きくなっていく。
【0032】
実位相差δがゼロクロスする点を検出することにより、倍音チャンネルを探し出すことができる。隣接する倍音同士が交錯する部分でも正から負へのゼロクロスが発生する。このことから、本実施の形態では、下記の条件(以降「ゼロクロス判定条件」と呼ぶ)に合致するインデクスkの周波数チャンネルを倍音の周波数成分が存在する倍音チャンネルとして採用する。インデクスkの周波数チャンネルはゼロクロス点に最も近い周波数チャンネルである。
δ[k−2]>δ[k−1]>δ[k]>δ[k+1]>δ[k+2]
このようなゼロクロス判定条件を満たす周波数チャンネルkを探すことにより、正から負に大きくゼロクロスする点に最も近い周波数チャンネルを倍音チャンネルとして高精度に抽出することができる。その抽出は、FFT点数が十分でなく、周波数振幅による倍音チャンネルの抽出が困難であっても確実に行うことができる。より高精度な抽出を行う必要がある場合には、ピーク検出を併せて行うようにしてもよい。
【0033】
本実施の形態では、この判定条件を満たす周波数(倍音)チャンネルkを周波数の小さい方から2つ検出する。これは、周波数が高くなるほど、誤差による影響が大きくなり、精度が低下する傾向があるためである。そのようにして検出した倍音チャンネルのインデクスを周波数の小さい方からhm1、hm2と表記する。以降、hm1は基準インデクスとも呼び、その基準インデクスhm1を持つ倍音チャンネルは基準チャンネルとも呼ぶことにする。各倍音チャンネルの位相差ΔΘi,k(k=hm1、hm2)は式(10)、つまりそのチャンネルの実位相差δに式(11)により算出されるΩi,k・Δtを加算することで計算される。
【0034】
ピッチスケーリング値ρは、倍音チャンネルの検出結果から以下のように算出する。
先ず、検出した2つの倍音チャンネルのインデクスhm1、hm2に対応する周波数の最大公約数を求める。その最大公約数は、ユークリッドの互除法を使って算出することができる。負でない2つの整数x、yの最大公約数gcd(x、y)は
を再帰的に繰り返すことで算出することができる。式(12)中の「x mod y」はxをyで割った余りを表している。最大公約数gcd(x、y)は別の方法で算出してもよい。
【0035】
本実施の形態では、元音声として人の音声を想定している。このことから、元音声の取りえる周波数の下限を80Hzとし、インデクス値の下限はその周波数に相当する6としている。それに合わせ、式(12)中のy=0の条件はy<6としている。算出した最大公約数はxと表記する。
最大公約数xは、ピッチ(基音)に相当する周波数チャンネルを倍音チャンネルとして抽出できたか否かに係わらずに求めることができる。このため、ミッシング・ファンダメンタルと呼ばれる基本周波数が欠落、或いは他の周波数と比較して非常に小さいような楽音でも確実に求めることができる。
最大公約数xを算出した後は、基準インデクスhm1に対応する周波数とがその公約数xの比である倍数hmxを計算する。その倍数hmxは
hmx=hm1/x ・・・ (13)
により求められる。このようにして求める倍数hmxは、基準チャンネルに相当する周波数を基本周波数(基音(ピッチ)の周波数)で割った値に相当する。
【0036】
目標ピッチの展開した位相差ΔΘdは、式(13)により求めた倍数hmxを乗算して算出する。目標ピッチの基本周波数をfd[Hz]とすると、それらの乗算は
ΔΘd・hmx=2πfd・Δt・hmx
=(2πfd・hmx・N)/(fs・OVL) ・・・(14)
により行うことができる。元音声のピッチを目標ピッチに変換するためのピッチスケーリング値ρは
ρ=ΔΘd・hmx/ΔΘi,hm1 ・・・ (15)
で算出できる。図2の位相補償部25は、このようにしてスケーリング値ρを算出してピッチシフタ27に出力する。それにより、ピッチシフタ27はそのスケーリング値ρでピッチスケーリングを行い、ピッチをシフトさせる。
【0037】
また、位相補償部25は、下式により位相のスケーリングを行う。
θ'i,k=ΔΘi,k((θ'i-1,hm1−θi-1,hm1)/ΔΘi,hm1+(ρ−1))
+θi,k ・・・(16)
式(16)では、スケーリングを行って得られる位相差には「’」を付して示している。その式(16)によるスケーリングを行うことにより、時間軸上の位相の一貫性(HPC:Horizontal Phase Coherence)およびチャンネル間、すなわち周波数成分間の位相関係(VPC:Vertical Phase Coherence)は共に保存される(特願2004−374090参照)。
【0038】
位相補償部25は、式(16)によりスケーリングを行った後の位相phase’、及び式(1)から算出した周波数振幅magから、以下のオイラーの公式により実数成分real’、虚数成分img’を算出し、複素数の周波数成分に変換する。
real’=mag・cos(phase’) ・・・ (17)
img’ =mag・sin(phase’) ・・・ (18)
【0039】
IFFT部26は、このようにして変換された周波数成分を周波数チャンネル毎に位相補償部25から入力し、IFFTを実行して時間領域上のデータに戻す。ピッチシフタ27は、位相補償部25から入力するピッチスケーリング値ρに応じて、IFFT部26が生成したフレームに対する補間、或いは間引きによるピッチスケーリングを行う。それにより、データ量は1/ρに伸縮するが、位相補償部25はρ倍の位相スケーリング(式(16))を行っているため、その伸縮は打ち消され、データ量は元の大きさを維持することになる。そのようにして得られたフレームをフレーム加算部28がオーバーラップ加算するため、目標ピッチを持つ合成音声がサウンドシステム11により放音されることになる。
【0040】
次に、図1のカラオケ装置の動作について、図3に示す各種カウンタ、図4ないし図12に示すCPU1による歌唱採点処理のプログラムのフローチャート、および、図13ないし図16を参照して詳細に説明する。
歌唱採点処理のプログラムの実行においては、2のべき乗である256(=28)個のサンプルを1フレームとして、伴奏曲のノートオンのピッチとマイク7からの歌唱者の音声信号のピッチとのピッチ差を検出しながら歌唱力の採点を行う。具体的には、カラオケが開始すると8msecごとに歌唱者の音声信号のピッチと歌唱されるべきピッチ(基準値)との差分を検出し、検出したピッチ差分のデータを図2の入力バッファ21に積算する。積算されたピッチ差分のデータは、256msecごと、すなわち32回のピッチ差分のデータの積算値の平均値である平均ピッチ差分が計算される。次に、積算された平均ピッチ差分のデータが約4sec(4096msec)の区間ごとに採点される。
【0041】
このため、図3に示すように、歌唱採点処理のためにCPU1内部のRAMに用意された7個のカウンタCNTA〜CNTGを用いる。CNTAは、ピッチ差分を積算した回数を表すカウンタである。CNTBは、ピッチ差分のエラーを積算した回数を表すカウンタである。CNTCは、ピッチ差分の算出の回数を表すカウンタである。CNTDは、平均ピッチ差分を積算した回数を表すカウンタである。CNTEは、平均ピッチ差分エラーを積算した回数を表すカウンタである。CNTFは、平均ピッチ差分の算出の回数を表すカウンタである。CNTGは、区間採点を積算した回数を表すカウンタである。
【0042】
図4は、CPU1のメインルーチンのフローチャートである。
先ず、電源がオンされたことに伴い、初期化処理を実行する(ステップSA1)。ステップSA1の後は、ステップSA2からステップSA4のループ処理を繰り返す。すなわち、スイッチ部3を構成するスイッチへのユーザの操作に対応するためのスイッチ処理を実行し(ステップSA2)、カラオケ処理を実行し(ステップSA3)、発音処理、エフェクト処理、音量調整処理などのその他の処理を実行する(ステップSA4)。
【0043】
図5は、メインルーチンにおけるステップSA2のスイッチ処理のフローチャートである。曲セレクトスイッチがオンされたか否かを判別し(ステップSB1)、このスイッチがオンされたときは、セレクトされたカラオケ曲の曲番号をレジスタSONGにストアする(ステップSB2)。そして、その曲番号の伴奏曲を曲メモリ2から検索して(ステップSB3)、歌詞が始まる歌唱区間を検出して時間を設定する(ステップSB4)。具体的には、伴奏曲がスタートしてから歌唱区間が開始するまでの時間、すなわちイントロの時間をレジスタにストアして設定する。そして、図4のメインルーチンに戻る。伴奏曲がスタートすると、後述するタイマインタラプトごとに設定された時間がデクリメントされる。
【0044】
ステップSB1において曲セレクトスイッチがオンでない場合には、スタート/ストップスイッチがオンされたか否かを判別し(ステップSB5)、このスイッチがオンされたときは、フラグSTFを反転する(ステップSB6)。そして、STFが1(曲開始)に反転したか又は0(曲停止)に反転したかを判別する(ステップSB7)。STFが1に反転したときは、タイマインタラプトの禁止を解除する(ステップSB8)。一方、STFが0に反転したときは、タイマインタラプトを禁止する(ステップSB9)。タイマインタラプトを解除又は禁止した後は、図4のメインルーチンに戻る。
【0045】
ステップSB5において、スタート/ストップスイッチがオンでない場合には、他のスイッチがオンされたか否かを判別する(ステップSB10)。例えば、エコーやリバーブの効果音を付加するエフェクトスイッチ、音量を調整するボリュームスイッチなどの、他のスイッチがオンされたか否かを判別する。他のスイッチがオンされたときは、そのスイッチに対応する処理を行って(ステップSB11)、図4のメインルーチンに戻る。
【0046】
図6は、タイマインタラプトのフローチャートである。発声すべき歌唱区間であるか否かを判別し(ステップSD1)、歌唱区間であるときは、フラグKFが0であるか否かを判別する(ステップSD2)。KFが0である場合には、KFを1にセットする(ステップSD3)。図5のステップSB8において、タイマインタラプトの禁止が解除された後は、一定時間ごとのタイマ割り込みを受け付ける。この結果、曲が開始した後は、上記したように、タイマインタラプトごとにレジスタにストアしたイントロの時間がデクリメントされる。したがって、最初の歌唱区間になったときは、KFを1にセットする。ステップSD1において歌唱区間でない場合には、KFが1であるか否かを判別する(ステップSD4)。KFが1であるときは、歌唱区間が終了したので、KFを0にリセットする(ステップSD5)。そして、図4のメインルーチンに戻る。この後は、歌唱区間になるたびにKFを1にセットする。ステップSD4においてKFが0である場合には、まだイントロの時間が経過していない場合であるので、メインルーチンに戻る。
【0047】
ステップSD3においてKFを1にセットした後、又は、ステップSD2においてKFが1であるときは、タイマレジスタTの値(初期値は0)をインクリメントする(ステップSD6)。そして、Tの値が8msecに達したか否かを判別し(ステップSD7)、Tの値が8msecに達したときは、フラグTFを1にセットする(ステップSD8)。TFを1にセットした後、又は、ステップSD7においてTの値が8msecに達していない場合には、図4のメインルーチンに戻る。
【0048】
図7は、メインルーチンにおけるステップSA3のカラオケ処理のフローチャートである。まず、KFが1(歌唱区間)であるか否かを判別し(ステップSC1)、KFが0の場合はメインルーチンに戻るが、KFが1の場合には、ピッチ差分を算出する処理を実行する(ステップSC2)。
図8は、ピッチ差分を算出する処理のフローチャートである。8msecの経過時間を示すフラグTFが1であるか否かを判別し(ステップSE1)、TFが0の場合はこのフローチャートを終了するが、TFが1の場合には、8msecごとのピッチ比算出処理を実行する(ステップSE2)。
【0049】
図9は、ピッチ比算出処理のフローチャートである。まず、A/D変換器8から元音声データが出力されるサンプリングタイミングか否か判定する(ステップSF1)。そのタイミングであった場合、判定はYESとなり、その元音声データをRAM5上の入力バッファ21に書き込み(ステップSF2)、フレーム抽出タイミングか否か判定する(ステップSF3)。前回そのタイミングとなってからホップサイズ分の元音声データをサンプリングする時間が経過した場合には、判定はYESとなって、入力バッファ21に格納された元音声データを1フレーム分、抽出し、抽出したフレームに対して、高周波成分を除去するLPF(ローパスフィルタ)処理、及びFFT(高速フーリエ変換)を順次、行う(ステップSF4)。
【0050】
次に、FFTによって得られる各チャンネルの周波数成分を対象に位相補償処理を実行する(ステップSF5)。位相補償処理の後は、位相補償処理を実施した各チャンネルの周波数成分を対象にしたIFFT(高速逆フーリエ変換)、そのIFFTにより得られる1フレーム分の音声データへのタイムスケーリング処理の実行によるピッチシフトを行い、そのピッチシフトによって得られた合成音声データをRAM5上の出力バッファ29に格納された合成音声データにオーバーラップ加算する(ステップSF6)。
なお、図2に示すフレーム抽出部22、LPF23、及びFFT部24の機能は、ハードウェアとしても実現できるが、この実施形態においては上記ステップSF4の処理を実行することで実現される。同様に、位相補償部25の機能は、ステップSF5の位相補償処理を実行することで実現される。また、IFFT部26、ピッチシフタ27及びフレーム加算部28の機能は、ステップSF6の処理を実行することで実現される。
【0051】
次に、1サンプリング分の合成音声データを出力すべきタイミングか否か判定する(ステップSF7)。そのタイミングであった場合、判定はYESとなり、出力すべき合成音声データを出力バッファ29から読み出して、楽音生成部9を介して、D/A変換器10に送出する(ステップSF8)。そして、このフローチャートを終了する。なお、楽音生成部9は、内部で生成した楽音の波形データと入力したデータとをミックスする機能を有する。
【0052】
図10は、図9のピッチ比算出処理におけるステップSF5の位相補償処理のフローチャートである。先ず、各周波数チャンネルの周波数成分から式(1)、(2)より周波数振幅mag、位相phase(=θ)を算出する(ステップSG1)。次に、式(4)〜(10)による、展開した位相差ΔΘi,kの算出を開始し(ステップSG2)、実位相差δが算出された時点である式(10)の手前で、実位相差δから倍音チャンネルを2つ検出する(ステップSG3)。次に、倍音チャンネルは2以上であるか否かを判別し(ステップSG4)、2以上である場合には、式(10)により各周波数チャンネルの位相差ΔΘi,kを算出して、位相展開を完了する(ステップSG5)。次に、検出した2つの倍音チャンネルに対して、式(12)〜(15)により、スケーリング値ρを算出するスケーリング値算出処理を実行する(ステップSG6)。
【0053】
点線の枠で示すステップSG6のスケーリング値算出処理においては、検出した2つの倍音チャンネルのインデクス値hm1、hm2に対応する周波数をそれぞれ変数h1、h2に代入する(ステップSG10)。ここで変数h1、h2はそれぞれ、式(12)のx、yに対応する。そして、変数h2の値に対応するインデクス値が6未満であるか否か判定する(ステップSG11)。そのインデクス値が6以上であった場合には、変数h1の値を変数h2の値で割って得られる剰余を変数tに代入し、変数h1に変数h2の値を代入し、更に変数h2に変数tの値を代入する(ステップSG12)。そして、ステップSG11において再度インデクス値が6未満であるか否かの判定を行う。すなわち、変数h2の値に対応するインデクス値が6未満になるまで、式(12)によりインデクス値hm1、hm2に対応する周波数間の最大公約数が変数h1に代入される。変数h2の値に対応するインデクス値が6未満になったときは、式(13)により変数hmxに、インデクス値hm1に対応する周波数を変数h1の値(最大公約数)で割った値を代入する(ステップSG13)。次に、式(14)により、位相差ΔΘdに変数hmxの値を乗算し、その乗算結果を用いて式(15)によりスケーリング値ρを算出する(ステップSG14)。
【0054】
なお、この場合において、倍音チャンネルを2つ抽出しているが、3つ以上の倍音チャンネルを抽出するようにしてもよい。ピーク検出を併せて行うようにした場合には、実位相差に注目して抽出した倍音チャンネルの中から、周波数振幅の大きさを考慮して2つ以上の倍音チャンネルを抽出するようにしてもよい。
ピッチシフトによりフォルマントも移動する。そのため、シフト量(スケーリング値ρ)が大きくなるほど、合成音声は不自然なものとなる。それを回避するために、フォルマントの補償を併せて行うようにしてもよい。
【0055】
また、元音声の基音周波数を抽出しなくとも目標ピッチへのピッチシフトを実現できることから、その基本周波数は抽出していない。しかし、その基本周波数は、倍数hmxを用いて抽出することができる。その抽出(算出)は、基本周波数をfiと表記すると、式(7)を用いて、
fi=ΔΘi,hm1/(2π・Δt・hmx)
=(ΔΘi,hm1・fs・OVL)/(2π・N・hmx) ・・・ (19)
により行うことができる。目標ピッチが周波数で指定されているような場合には、基本周波数fiを算出してから、その目標ピッチの周波数との比をとることにより、スケーリング値ρを求めてもよい。また、算出した基本周波数fiは表示部6等によりユーザに知らせるようにしてもよい。合成音声波形の生成については、別の方法を採用してもよい。
【0056】
ステップSG6のスケーリング値算出の後は、位相差ΔΘi、kを用いて、式(16)による位相スケーリング処理を行う(ステップSG7)。次に、位相phase’、及び式(1)から算出した周波数振幅magから、実数成分real’(式(17))、虚数成分img’(式(18))を算出し、複素数の周波数成分に変換する(ステップSG8)。ステップSG4において、倍音チャンネルが2以上でない場合には、エラーと判断してエラーフラグをアクティブにする(ステップSG9)。ステップSG8において複素数変換を行った後、又は、ステップSG9においてエラーと判断した後は、位相補償処理を終了する。
【0057】
図9のピッチ比算出処理の後は、図8のピッチ差分算出処理のステップSE3に移行して、図10のステップSG4において倍音チャンネルが2以上か否かの判別結果を参照し、倍音チャンネルが2以上でエラーと判断しなかったか、又は、倍音チャンネルが2以上でなくエラーと判断したかによって、処理を分岐する。基音が存在するチャンネルが2以上でエラーと判断しなかったときは、算出したピッチ比から「1.0」を減算した値をピッチ差分としてストアする(ステップSE4)。
【0058】
算出したピッチ比は、マイク7から入力された音声信号のピッチ(入力音声ピッチ)に対する基準値のピッチ(基準ピッチ)の比であるので、両者のピッチが一致したときは、ピッチ比である(入力音声ピッチ)/(基準ピッチ)は「1.0」の値になる。したがって、ピッチ比から「1.0」を減算した値は、入力音声ピッチが基準ピッチより高いときはプラス、入力音声ピッチが基準ピッチより低いときはマイナスとなり、ピッチ差分は正負の符号を含むことになる。
【0059】
ステップSE4においてピッチ差分を算出した後は、ピッチ差分の積算回数であるCNTAのカウント値が16未満であるか、又は、16以上であるかを判別する(ステップSE5)。CNTAのカウント値が16未満である場合には、ピッチ差分をバッファにストアして積算する(ステップSE6)。そして、CNTAのカウント値をインクリメントする(ステップSE7)。本来ならば、ピッチ差分のデータは、256msecごとに平均値を計算する。すなわち、32回のピッチ差分のデータを積算するごとに平均値を計算する。しかし、この実施形態においては、CPU1の負荷を軽減するために、フレーム数を2のべき乗として、フレーム数の半数までの16回のピッチ差分のデータを積算するごとに平均値を計算する。
【0060】
ステップSE3において、基音が存在するチャンネルが1以下でエラーであると判断したときは、ピッチ差分エラーの積算回数のカウンタCNTBの値をインクリメントする(ステップSE8)。CNTBの値をインクリメントした後、又は、ステップSE7においてCNTAの値をインクリメントした後は、ピッチ差分の算出回数のカウンタCNTCの値をインクリメントする(ステップSE9)。ステップSE5においてCNTAの値が16になった後は、CNTAの値はインクリメントせず、ピッチ差分の算出回数のカウンタCNTCの値をインクリメントする(ステップSE9)。この結果、エラー以外のピッチ差分のデータのうち、最大で半数のピッチ差分のデータが捨てられることになるが、8msecという極めて短い時間においては、半数のピッチ差分のデータが失われても大勢に影響はない。次に、フラグTFを0にリセットして(ステップSE10)、図7のステップSC3の差分平均算出処理に移行する。
【0061】
図11は、256msecごとに実行される差分平均算出処理のフローチャートである。
まず、8msecごとのピッチ差分の算出回数のカウンタCNTCの値がフレーム数である32に達したか否かを判別し(ステップSH1)、CNTCの値が32に達した後は、CNTBが16より大きいか否かを判別する(ステップSH2)。すなわち、ピッチ差分エラーがフレーム数の半分より多いか否かを判別する。CNTBが16以下である場合には、積算値を右シフトしてビット差分の平均値を算出する(ステップSH3)。フレーム数は2のべき乗の32であるので、フレーム数の半分も2のべき乗の16である。したがって、積算された16個のビット差分の平均値は、積算値を除算する代わりに4ビットの右シフトによって算出する。これによって、CPU1の平均値算出の演算処理を軽減し、「演奏のコケ」と称される音切れのような発音処理のネックを回避できる。
【0062】
ステップSH3のシフト処理の後は、平均ピッチ差分の積算回数のカウンタCNTDの値が8未満であるか否かを判別する(ステップSH4)。上記したように、積算された256msecごとの平均ピッチ差分のデータは、4096msecの区間ごとに採点されるので、1区間の平均ピッチ差分は16(=4096/256)個のデータである。しかし、この場合にも、CPU1の負荷を軽減するために、8個の平均ピッチ差分のデータによって採点を行う。CNTDの値が8未満であるときは、平均ピッチ差分を積算し(ステップSH5)、CNTDの値をインクリメントする(ステップSH6)。
ステップSH2において、CNTBの値が16より多い場合、すなわち、ピッチ差分エラーの数がフレーム数である32の半分を超えた場合には、平均ピッチ差分エラーの積算回数のカウンタCNTEの値をインクリメントする(ステップSH7)。そして、エラー値を区間の平均値とする(ステップSH8)。
【0063】
ステップSH6においてCNTDの値をインクリメントした後、ステップSH8においてCNTEの値をインクリメントした後、又は、ステップSH4においてCNTDの値が8になった後は、平均ピッチ差分の算出回数のカウンタCNTFの値をインクリメントする(ステップSH9)。そして、図7のカラオケ処理のステップSC4に移行して、ピッチずれを表示し、次のステップSC5に移行して区間得点計算処理を実行する。
【0064】
図12は、約4secごとに実行される区間得点計算処理のフローチャートである。
まず、256msecごとの平均ピッチ差分の算出回数であるCNTFの値が16になったか否かを判別する(ステップSJ1)。すなわち、平均ピッチ差分の算出回数が1区間である約4sec(4096msec)の最大回数になったか否かを判別する。CNTFの値が16未満の場合にはこのフローチャートを終了するが、CNTFの値が16になったときは、平均ピッチ差分エラーの積算回数のカウンタCNTEの値が平均ピッチ差分の算出回数の半分(許容エラー数)である8より多いか否かを判別する(ステップSJ2)。CNTEの値が8以下である場合には、平均ピッチ差分の積算値を右シフトして平均値を算出する(ステップSJ3)。図11のステップSH4に示したように、CNTDの値である積算回数は8であるので、3ビットの右シフトにより8個の平均ピッチ差分の平均値を算出する。
【0065】
次に、歌唱者の初級、中級、上級のレベルごとにパラメータをセットする(ステップSJ4)。セットするパラメータは、歌唱力を最大評価値の100点とする基準値の許容範囲を規定するパラメータt、および、100点から0点までの範囲で許容範囲外の歌唱力の度合いを規定するパラメータaである。パラメータをセットした後、区間得点を計算する(ステップSJ5)。ステップSJ2において、CNTEの値が8より多くなり許容エラー数を超えたときは、区間得点を0とする(ステップSJ6)。ステップSJ5において区間得点を計算した後、又は、ステップSJ6において区間得点を0点にした後は、区間得点を積算する(ステップSJ7)。そして、区間採点の積算回数のカウンタCNTGの値をインクリメントして(ステップSJ8)、ピッチずれを表示し(ステップSJ9)、図7のカラオケ処理に戻る。
【0066】
ステップSJ5における区間得点の計算において、基準値からの平均ピッチ差分をxとし、区間得点をgradeとすると、区間得点の演算式は、下記の式(20)で表される。
最初にxの絶対値をとるのは、図8のステップSE5で求めた平均ピッチ差分が正負の符号を含んでいるので、正の値の領域だけで計算を行うためである。
また、ピッチの最小単位である半音のピッチが100セントであり、1オクターブが1200セントであるので、得点が100点となるピッチ範囲をdiff_t[セント]とすると、パラメータtは、下記の式(21)で表される。
得点が0点となるピッチ差分値をdiff_a[セント]とすると、パラメータaは、下記の式(22)で表される。
【0067】
図13は、初級、中級、上級の各レベルにおけるパラメータtおよびパラメータaの具体例を示す図である。図13に示すように、初級の歌唱者の場合には、基準値からのピッチ差分が40セントでも100点になる。一方、上級の歌唱者の場合には、基準値からのピッチ差分が20セント以内でなければ100点にはならない。また、初級の歌唱者の場合には、基準値からのピッチ差分が240セントで0点になるが、上級の歌唱者の場合には、基準値からのピッチ差分が120セントで0点になる。中級の歌唱者の場合には、100点になるパラメータtおよび0点になるパラメータaは、初級と上級のほぼ中間になる。
【0068】
図14は、区間得点の演算式である式(20)〜(22)の特性を示す図である。図14において、横軸はピッチ差分を表し、縦軸は区間得点を表している。図14に示すように、ピッチ差分に対する区間得点の特性は台形の形状になっている。そして、台形の上辺は歌唱力を100点とするピッチ差分の許容範囲を規定し、台形の傾斜は100点から0点までの範囲で許容範囲外の歌唱力の度合いを規定する。初級の歌唱者の場合には、台形の上辺が長くなり、傾斜が緩やかになる。一方、上級の歌唱者の場合には、台形の上辺が短くなり、傾斜が急峻になる。中級の歌唱者の場合には、台形は初級と上級との中間の形状になる。
【0069】
図7のカラオケ処理において、ステップSC5の区間得点の計算を行った後は、その区間得点を表示する(ステップSC6)。図15は、区間得点およびピッチずれを表示する画面を示す図である。ピッチずれの表示は、図15に示すように、発光色の異なる3つのLEDによって、ピッチが高い状態、ピッチが合っている状態、ピッチが低い状態を対応するLEDの点灯によって表示する。ステップSC6において、区間得点を表示した後は、カラオケが停止したか否かを判別し(ステップSC7)、カラオケが停止していない場合には、ステップSC2に移行して、ステップSC6までの処理を繰り返す。
【0070】
カラオケ曲が終了するか、又は、スタート/ストップスイッチがオンされて、ステップSC7においてカラオケの停止であると判別したときは、総合得点を計算する(ステップSC8)。総合得点の計算は、図12のステップSJ7において計算した区間得点の積算値をステップSJ8でインクリメントした最終のCNTGの値、すなわち、区間得点の積算回数で除算することによって算出される。総合得点の計算のときには、カラオケ演奏は停止しており、CPU1は発音処理から解放されているので、シフト処理でなく除算処理によって総合得点を算出する。総合得点を算出した後は、その総合得点を表示し(ステップSC9)、フラグKFを0にリセットし(ステップSC10)、フラグSTFを0にリセットして(ステップSC11)、図4のメインルーチンに戻る。
【0071】
図16は、マイク7から入力される音声信号の発声区間と、評価対象の歌唱区間との関係を示す図である。図16に示すように、伴奏曲において歌唱区間に達するまえに発声が行われた場合には、その発声については無判定として得点には加味しない。一方、歌唱区間であるにもかかわらず、発声が行われない場合には、得点を0点とする。
【0072】
以上のように、上記実施形態によれば、CPU1は、評価すべき歌唱力が100点となる基準値の許容範囲を規定するパラメータt、および、100点から0点の範囲で許容範囲外の歌唱力の度合いを規定するパラメータaを設定して、入力される音声信号の評価値をパラメータtおよびパラメータaに基づいて算出する。この場合において、CPU1は、音声信号のピッチおよび発声タイミングの評価値を算出する構成にしたが、いずれか一方の評価値を算出する構成にしてもよい。
したがって、膨大な数の評価値を記憶するためのメモリや、曲が終了した後に膨大な数の評価値の平均を算出する演算処理を必要とすることなく、迅速且つ正確に歌唱力をローコストで評価するができる。
【0073】
また、上記実施形態によれば、CPU1は、入力される音声信号のピッチと基準値との差分を算出し、符号を含む差分を積算して音声信号のピッチの評価値をパラメータtおよびパラメータaに基づいて算出する。
したがって、上級の歌唱者がビブラート唱法によってピッチに揺らぎが発生した場合でも、ピッチの揺らぎをピッチずれと見なさず、正当に歌唱力を評価することができる。
【0074】
また、上記実施形態によれば、CPU1は、入力される伴奏曲の歌唱区間を検索して、歌唱対象区間内に入力される音声信号の評価値を算出し、歌唱区間外に入力される音声信号については評価の対象外とする。
したがって、歌唱力を正確に採点することができる。
【0075】
また、上記実施形態によれば、CPU1は、入力される音声信号における2のべき乗のサンプル数を1フレームとして各フレームのエラー数を分析し、分析したエラー数が1フレームの2分の1を超えたときは、そのフレームを0点とし、分析したエラー数が1フレームの2分の1を超えないときは、1フレームの2分の1に相当するエラー以外のサンプル数によってそのフレームの評価値を算出する。
したがって、除算処理の代わりにシフト処理によってピッチ差分の平均値を算出することで、CPU1に大きな負荷がかからないようにすることができる。その結果、音切れのような発音処理のネックを回避できる。
【0076】
また、上記実施形態によれば、CPU1は、入力される音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出して基音のピッチを分析し、検出した基音のピッチの評価値を算出する。この場合において、CPU1は、入力される音声信号の周波数成分から位相を算出し、その算出した位相を用いて音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出する。
したがって、入力される歌唱者の音声信号の基音のピッチを確実に検出することができる。
【0077】
さらに、倍音は基音(ピッチ)の周波数の整数倍の周波数を持っている。それにより、倍音の周波数成分が存在する2つ以上の周波数チャンネル(倍音チャンネル)に対応する周波数間の最大公約数は、基音の周波数を表す情報として扱うことができる。このため、図10のスケーリング値の算出処理に示したように、2つ以上の周波数チャンネルの最大公約数を用いて、第1の音声波形であるhm1の基音を目標とする基音に高精度に変換(シフト)した第2の音声波形であるhm2を生成することができる。第1の音声波形の基音を抽出(検出)する必要性は回避されることから、ミッシング・ファンダメンタルと呼ばれる基本周波数が欠落、或いは他の周波数と比較して非常に小さいような第1の音声波形でも、目標とする基音を持つ第2の音声波形を確実に生成することができる。また、その最大公約数を用いることにより、第1の音声波形の基音の周波数も確実に抽出(検出)することができる。
【0078】
次に、上記実施形態の変形例について説明する。
上記実施形態においては、1200セントの1オクターブについた採点を行い、オクターブ違いの同音名については考慮していないが、オクターブ違いを検出して、差分をオクターブ以内の範囲になるように、折り返して採点するような構成にしてもよい。
また、総合得点の計算時に、初級や中級の歌唱者の場合には、ボーナス点を加算して採点するような構成にしてもよい。例えば、区間得点の最高点を保持しておき、総合得点の算出の際に、保持した最高点に、初級や中級のレベルに応じた係数を乗算して、総合点に加算する。
また、上記実施形態においては、平均ピッチ差分および区間採点のときに積算されるデータ数をフレーム数の半分にしたが、平均値を算出する演算を除算の代わりにシフト処理で行うことが可能なように、2のべき乗分の1であればフレーム数の半分でなくてもよい。4分の1、8分の1でもよい。分母が大きくなるほど廃棄するデータ数が多くなるが、採点の信頼性が得られる比率であればよい。一般に、4secのような短い区間においては、歌唱者のレベルにかかわらず歌唱力の変動は極めて少ないので、8分の1やそれより少ないデータ数によっても採点の信頼性は得られる。
また、上記実施形態においては、ピッチ差分を算出して歌唱力を採点する構成にしたが、発音のタイミングの差分を算出して歌唱力を採点する構成にしてもよい。
【0079】
なお、上記実施形態においては、ROM4にあらかじめ記憶されている歌唱採点処理のプログラムをCPU1が実行する装置の発明について説明したが、フレキシブルディスク(FD)、CD、メモリカードなどの外部記憶媒体に記憶された歌唱採点処理のプログラム、又は、インターネットなどのネットワークからダウンロードした歌唱採点処理のプログラムをRAM5あるいは別途設けたフラッシュROMなどの不揮発性メモリにインストールして、CPU1がそのプログラムを実行する構成も可能である。この場合には、プログラムの発明および記憶媒体の発明を実現できる。
【0080】
すなわち、本発明の歌唱採点処理のプログラムは、
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出するステップBと、をコンピュータに実行させる。
【0081】
前記ステップBは、入力される音声信号のピッチおよび発声タイミングのうち少なくとも1つの評価値を算出することを特徴とする。
この場合において、前記ステップBは、入力される音声信号のピッチと前記基準値との差分を算出し、符号を含む差分を積算して当該音声信号のピッチの評価値を前記設定された第1のパラメータおよび第2のパラメータに基づいて算出することを特徴とする。
【0082】
入力される伴奏曲の歌唱区間を検索するステップCをさらに有し、前記ステップBは、当該ステップCによって検索された歌唱対象区間内に入力される音声信号の評価値を算出し、当該歌唱区間外に入力される音声信号については評価の対象外とすることを特徴とする。
【0083】
入力される音声信号における2のべき乗のサンプル数を1フレームとして各フレームのエラー数を分析するステップDをさらに有し、前記ステップBは、前記ステップDによって分析されたエラー数が1フレームの2分の1を超えたときは当該フレームを最低評価値とし、分析されたエラー数が1フレームの2分の1を超えないときは1フレームの2分の1に相当するエラー以外のサンプル数によって当該フレームの評価値を算出することを特徴とする。
【0084】
前記ステップDは、入力される音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出して基音のピッチを分析し、前記ステップBは、前記ステップDによって検出された基音のピッチの評価値を算出することを特徴とする。
【0085】
前記ステップDは、入力される音声信号の周波数成分から位相を算出し、当該算出した位相を用いて当該音声信号の中から少なくとも2つ以上のピッチの最大公約数を検出することを特徴とする。
【符号の説明】
【0086】
1 CPU
2 曲メモリ
3 スイッチ部
4 ROM
5 RAM
6 表示部
7 マイク
8 A/D変換器
9 楽音生成部
10 D/A変換器
11 サウンドシステム
【特許請求の範囲】
【請求項1】
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するパラメータ設定手段と、
入力される伴奏曲の歌唱区間を検索する区間検索手段と、
当該区間検索手段によって検索された歌唱区間内に入力される音声信号の評価値を前記パラメータ設定手段によって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とする算出する評価演算手段と、
を備えた歌唱採点装置。
【請求項2】
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、
入力される伴奏曲の歌唱区間を検索するステップBと、
当該ステップBによって検索された歌唱区間内に入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とするステップCと、
をコンピュータに実行させる歌唱採点処理のプログラム。
【請求項1】
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するパラメータ設定手段と、
入力される伴奏曲の歌唱区間を検索する区間検索手段と、
当該区間検索手段によって検索された歌唱区間内に入力される音声信号の評価値を前記パラメータ設定手段によって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とする算出する評価演算手段と、
を備えた歌唱採点装置。
【請求項2】
評価すべき歌唱力が最大評価値となる基準値の許容範囲を規定する第1のパラメータおよび最大評価値から最低評価値の範囲で許容範囲外の歌唱力の度合いを規定する第2のパラメータを設定するステップAと、
入力される伴奏曲の歌唱区間を検索するステップBと、
当該ステップBによって検索された歌唱区間内に入力される音声信号の評価値を前記ステップAによって設定された第1のパラメータおよび第2のパラメータに基づいて算出し、当該歌唱区間外に入力される音声信号については評価の対象外とするステップCと、
をコンピュータに実行させる歌唱採点処理のプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2010−134474(P2010−134474A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2010−7224(P2010−7224)
【出願日】平成22年1月15日(2010.1.15)
【分割の表示】特願2005−332329(P2005−332329)の分割
【原出願日】平成17年11月17日(2005.11.17)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願日】平成22年1月15日(2010.1.15)
【分割の表示】特願2005−332329(P2005−332329)の分割
【原出願日】平成17年11月17日(2005.11.17)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
[ Back to top ]