(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024148250
(43)【公開日】2024-10-18
(54)【発明の名称】楽曲データ処理装置、方法、及びプログラム
(51)【国際特許分類】
G10G 3/04 20060101AFI20241010BHJP
【FI】
G10G3/04
【審査請求】未請求
【請求項の数】16
【出願形態】OL
(21)【出願番号】P 2023061216
(22)【出願日】2023-04-05
(71)【出願人】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100182936
【弁理士】
【氏名又は名称】矢野 直樹
(72)【発明者】
【氏名】田畑 裕二
【テーマコード(参考)】
5D182
【Fターム(参考)】
5D182AD10
(57)【要約】
【課題】楽曲データからチューニング値の特定と、コード判定を行うための技術に関し、楽曲に合わせた楽器演奏をする際の正確なチューニング値の特定を容易に行い、これに基づいてより正確なコード判定を行う。
【解決手段】チューニング値特定部201は、FFTの演算点に対応するビン番号毎に、位相エラーを算出する位相エラー算出処理S212、位相エラーを考慮したカレント周波数及びそれに基づく仮音階を算出する周波数特定処理S213、仮音階の小数部に基づいて算出した音階ずれ量に基づいて楽曲データに対するチューニング値を特定するチューニング値特定処理S214を実行する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するプロセッサを備え、
前記プロセッサは、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果である今回の前記処理単位での位相から、前記演算結果である前回の前記処理単位での位相に前記ビン番号に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位を加算した結果を、減算して得られるずれ量を位相エラーとして算出する、
楽曲データ処理装置。
【請求項2】
前記ビン番号毎に、前記標準位相変位に前記位相エラーを加算した結果の前記標準位相変位に対する比を、前記ビン番号周波数に乗算して得た周波数であるカレント周波数を算出し、
基準音の周波数に対する前記カレント周波数の比に基づいて仮音階を算出し、前記仮音階の小数部に基づいて音階ずれ量を算出し、
前記音階ずれ量に基づいて前記楽曲データに対するチューニング値を算出する、
請求項1に記載の楽曲データ処理装置。
【請求項3】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するプロセッサを備え、
前記プロセッサは、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果である今回の前記処理単位での位相から、前記演算結果である前回の前記処理単位での位相に前記ビン番号に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位を加算した結果を、減算して得られるずれ量を位相エラーとして算出し、
前記位相エラーに基づいて前記ビン番号毎のカレント周波数を特定し、
特定された前記ビン番号毎の前記カレント周波数に基づいて前記楽曲データにおけるコードを判定する、
楽曲データ処理装置。
【請求項4】
前記コードの判定は、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記楽曲データに対するチューニング値と、前記ビン番号に対して算出されている前記カレント周波数とに基づき、前記ビン番号毎の真音階を算出し、
前記ビン番号毎に算出した前記真音階の整数部と小数部と、前記演算結果から算出される前記ビン番号毎の振幅とに基づき、所定の音階範囲の音数音階に、前記振幅の値を分配合成することにより、前記音数音階毎の周波数の振幅強度を特徴量としたベクトルであるクロマベクトルを生成し、
前記クロマベクトルに基づいて前記楽曲データにおけるコードを判定する、
ことを含む請求項3に記載の楽曲データ処理装置。
【請求項5】
前記プロセッサは、前記ビン番号に対応する前記ビン番号周波数を、前記高速フーリエ変換に先立って前記楽曲データにサンプル毎に乗算される窓データの窓サイズに対する前記ビン番号の比を、前記楽曲データのサンプルレートに乗算することにより算出する、請求項1又は請求項3に記載の楽曲データ処理装置。
【請求項6】
前記プロセッサは、前記仮音階の小数部をビン番号毎音階ずれ量として算出する動作を、1つの前記処理単位内の所定の音域範囲内の各前記ビン番号に対して実行して前記1つの処理単位に対応する処理単位毎音階ずれ量を算出する動作を、更に前記楽曲データ全体に渡る各前記処理単位に対して実行して算出した各前記処理単位毎音階ずれ量から前記楽曲データに対応する楽曲音階ずれ量として前記音階ずれ量を算出する、
請求項2に記載の楽曲データ処理装置。
【請求項7】
前記プロセッサは、前記音階ずれ量から1音階あたりの音階ずれ率を算出して前記任意の音階の第1音周波数に乗算することにより前記楽曲データに対するチューニング値を算出する、請求項2に記載の楽曲データ処理装置。
【請求項8】
前記プロセッサは、
前記楽曲データの音域全体の音数n(n>12)のn音階に対応するn音クロマベクトルと、前記n音クロマベクトルを12音階に丸め込む演算により、12音階に対応する12音クロマベクトルと、を前記クロマベクトルとして生成し、
前記12音クロマベクトルの変化に基づいて、テンポ値、小節位置、及び拍位置をビートトラッキング情報として検出し、
前記ビートトラッキング情報に基づいてコード判定すべき時間長を決定し、前記時間長に対して前記12音クロマベクトルの要素値毎の合計値を要素値とするビート長12音クロマベクトルを生成し、
前記ビート長12音クロマベクトルとコードの構成音/非構成音で重みづけされたコード構成音テーブルの値とを乗算し、合計が最大となるコードをコード判定結果として出力する、
請求項4に記載の楽曲データ処理装置。
【請求項9】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するプロセッサに、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果から夫々算出される前回の前記処理単位での位相と今回の前記処理単位での位相との位相差と、前記ビン番号の演算点に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位と、を比較したときのずれ量である位相エラーを算出する処理、
を実行させるための楽曲データ処理方法。
【請求項10】
前記ビン番号毎に、前記標準位相変位に前記位相エラーを加算した結果の前記標準位相変位に対する比を、前記ビン番号周波数に乗算して得た周波数であるカレント周波数を算出する処理と、
基準音の周波数に対する前記カレント周波数の比に基づいて仮音階を算出し、前記仮音階の小数部に基づいて音階ずれ量を算出する処理と、
前記音階ずれ量に基づいて前記楽曲データに対するチューニング値を算出する処理と、
を実行させるための請求項9に記載の楽曲データ処理方法。
【請求項11】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するプロセッサに、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果である今回の前記処理単位での位相から、前記演算結果である前回の前記処理単位での位相に前記ビン番号に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位を加算した結果を、減算して得られるずれ量を位相エラーとして算出する処理と、
前記位相エラーに基づいて前記ビン番号毎のカレント周波数を特定する処理と、
特定された前記ビン番号毎の前記カレント周波数に基づいて前記楽曲データにおけるコードを判定する処理と、
を実行させるための楽曲データ処理方法。
【請求項12】
前記コードを判定する処理は、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記楽曲データに対するチューニング値と、前記ビン番号に対して算出されている前記カレント周波数とに基づき、前記ビン番号毎の真音階を算出する処理と、
前記ビン番号毎に算出した前記真音階の整数部と小数部と、前記演算結果から算出される前記ビン番号毎の振幅とに基づき、所定の音階範囲の音数音階に、前記振幅の値を分配合成することにより、前記音数音階毎の周波数の振幅強度を特徴量としたベクトルであるクロマベクトルを生成する処理と、
前記クロマベクトルに基づいて前記楽曲データにおけるコードを判定する処理と、
を含む請求項11に記載の楽曲データ処理方法。
【請求項13】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するコンピュータに、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果から夫々算出される前回の前記処理単位での位相と今回の前記処理単位での位相との位相差と、前記ビン番号の演算点に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位と、を比較したときのずれ量である位相エラーを算出する処理、
を実行させるためのプログラム。
【請求項14】
前記ビン番号毎に、前記標準位相変位に前記位相エラーを加算した結果の前記標準位相変位に対する比を、前記ビン番号周波数に乗算して得た周波数であるカレント周波数を算出する処理と、
基準音の周波数に対する前記カレント周波数の比に基づいて仮音階を算出し、前記仮音階の小数部に基づいて音階ずれ量を算出する処理と、
前記音階ずれ量に基づいて前記楽曲データに対するチューニング値を算出する処理と、
を実行させるための請求項13に記載のプログラム。
【請求項15】
処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき前記楽曲データを処理するコンピュータに、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記演算結果である今回の前記処理単位での位相から、前記演算結果である前回の前記処理単位での位相に前記ビン番号に対応するビン番号周波数のもとで前記処理単位が1単位進んだときに変位すべき位相量である標準位相変位を加算した結果を、減算して得られるずれ量を位相エラーとして算出する処理と、
前記位相エラーに基づいて前記ビン番号毎のカレント周波数を特定する処理と、
特定された前記ビン番号毎の前記カレント周波数に基づいて前記楽曲データにおけるコードを判定する処理と、
を実行させるためのプログラム。
【請求項16】
前記コードを判定する処理は、
前記高速フーリエ変換の演算点に対応するビン番号毎に、前記楽曲データに対するチューニング値と、前記ビン番号に対して算出されている前記カレント周波数とに基づき、前記ビン番号毎の真音階を算出する処理と、
前記ビン番号毎に算出した前記真音階の整数部と小数部と、前記演算結果から算出される前記ビン番号毎の振幅とに基づき、所定の音階範囲の音数音階に、前記振幅の値を分配合成することにより、前記音数音階毎の周波数の振幅強度を特徴量としたベクトルであるクロマベクトルを生成する処理と、
前記クロマベクトルに基づいて前記楽曲データにおけるコードを判定する処理と、
を含む請求項15に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楽曲データからチューニング値を特定するための処理と、コード判定を行うための処理の技術に関する。
【背景技術】
【0002】
音響信号の楽曲データからのチューニング値(例えばA4音の周波数)の特定は、単音であれば自己相関関数を用いて検出可能である。
また、自己相関関数による手法のほかに、音響信号の分析に多く用いられる手法にフーリエ変換処理がある。特に、FFT(Fast Fourier Transform:高速フーリエ変換)による方法は計算機上で高速な処理が可能であり、多くの信号分析に用いられている。
【0003】
更に、FFTとクロマベクトルという技術を組み合わせて、コード判定を可能とする技術も知られている(例えば非特許文献1)。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】松岡 保静,渡部 瑞希,“音楽のコード認識技術とその応用”,[online],NTT DOCOMOテクニカル・ジャーナル Vol.25 No.2, Jul.2017, [令和5年2月26日検索],インターネット <URL:https://www.docomo.ne.jp/binary/pdf/corporate/technology/rd/technical_journal/bn/vol25_2/vol25_2_004jp.pdf>
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、対象データがコード音(和音)や複数の楽器音から構成される合成音データである場合、自己相関関数による手法はチューニング値の検出には適用できない。
また、FFTにより得られる分析結果における周波数情報は、FFTビン番号毎の離散値の合成となり、楽曲全体のチューニング値といった連続的な値を取る周波数の検出には適さないという課題があった。
【0006】
本発明は、楽曲に合わせて楽器演奏をする際や、楽曲のコード進行を判定する際に必要となる正確なチューニング値を得ることを目的とする。
【課題を解決するための手段】
【0007】
態様の一例の楽曲データ処理装置は、処理単位毎に入力された楽曲データから生成した入力データに対して実行した高速フーリエ変換の演算結果に基づき楽曲データを処理するプロセッサを備え、プロセッサは、高速フーリエ変換の演算点に対応するビン番号毎に、演算結果である今回の処理単位での位相から、演算結果である前回の処理単位での位相にビン番号に対応するビン番号周波数のもとで処理単位が1単位進んだときに変位すべき位相量である標準位相変位を加算した結果を、減算して得られるずれ量を位相エラーとして算出する。
【発明の効果】
【0008】
本発明によれば、楽曲に合わせた楽器演奏をする際や、楽曲のコード進行を判定する際に必要となる正確なチューニング値を得ることが可能となる。
【図面の簡単な説明】
【0009】
【
図1】楽曲データ処理装置のハードウェアの構成例を示すブロック図である。
【
図3】チューニング値特定部の処理例を示すフローチャートである。
【
図4】クロマベクトル生成部の処理例((a))と、コード判定部の処理例((b))を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
図1は、楽曲データに対してチューニング値を特定し、その特定されたチューニング値に基づいてコード判定を行うことができる楽曲データ処理装置100のハードウェアの構成例を示すブロック図である。
【0011】
楽曲データ処理装置100は、例えばユーザが操作するスマートフォン端末、タブレット端末、又はいわゆるノートブックパソコンなどのパーソナルコンピュータであるユーザ端末である。
楽曲データ処理装置100においては、少なくとも1つのプロセッサとしてのCPU(中央演算処理装置)101、ROM(リードオンリーメモリ)102、RAM(ランダムアクセスメモリ)103、例えばタッチパネルディスプレイによって構成される入力部104及び表示/出力部105、並びにサーバ装置や他のユーザ端末と通信するために例えばインターネットやローカルエリアネットワークなどに接続する通信部106が、システムバス107により相互に接続されている。その他、ユーザ端末として一般的に備わっており本実施形態の動作と直接には関係ないブロック(例えば、マイク、スピーカ、通話機能、カメラ等)は、省略しているが、これらのブロックを備えてもよいことは言うまでもない。
【0012】
CPU101は、RAM103をワークメモリとして使用しながらROM102に記憶された制御プログラムを実行することにより、
図1の楽曲データ処理装置100の制御動作を実行する。また、ROM102は、上記制御プログラム及び各種固定データのほか、例えば後述する
図5の[コード構成音テーブル]のデータ等を記憶している。制御プログラム等はROM102にあらかじめ記憶されているのではなく、通信部106を介してインターネット等から適宜ダウンロードしてインストールできるようにしてもよい。
【0013】
図1のコンピュータによって実行される本実施形態の処理例を以下に詳細に説明する。「CPU101」「ROM102」又は「RAM103」などと言及する場合、
図1のCPU101、ROM102、又はRAM103を参照することを意味するものとする。
【0014】
まず、以下の物理単位を下記(1)式により定義する。
サンプルレート :SR(サンプル/秒)
FFT処理レート:PR(回/秒)
FFT窓サイズ :WL(サンプル)
処理単位 :PU=SR/PR(サンプル/回)
・・・(1)
処理単位PUは、1回にまとめて対応する処理単位である。
【0015】
図2は、
図1の楽曲データ処理装置100のCPU101等で構成されるコード判定処理部200のブロック図である。コード判定処理部200は、楽曲データ処理装置100内で後述する処理を実行し、対応するハードウェアは、上述の通りCPU101、ROM102、及びRAM103の少なくともいずれかを含む。
コード判定処理部200によって実行されるプログラムは、
図1の楽曲データ処理装置100であるユーザ端末の工場出荷時に、ROM102に記憶させられて出荷され、ユーザが使用時にROM102からRAM103にロードして使用するようにできる。
或いは、コード判定処理部200によって実行されるプログラムは、ユーザが、楽曲データ処理装置100のユーザ端末に、例えばコード判定処理部200の機能を備えたいわゆるアプリ(アプリケーション)を、このアプリを提供するベンダー企業のWebサイト等から、インターネット等のネットワークを経由して、
図1の通信部106からRAM103にダウンロード及びインストールすることにより、動作させることができる。
【0016】
コード判定処理部200は、大きく分けてチューニング値特定部201、クロマベクトル生成部202、及びコード判定部203から構成される。
【0017】
チューニング値特定部201は、波形データ読込み処理S210、振幅/位相算出処理S211、位相エラー算出処理S212、周波数特定処理S213、及びチューニング値特定処理S214を実行する。
【0018】
クロマベクトル生成部202は、88音クロマベクトル生成処理S220及び12音クロマベクトル生成処理S221を実行する。
【0019】
コード判定部203は、ビートトラッキング処理S230及びコード判定処理S231を実行する。
【0020】
図3は、
図2のチューニング値特定部201の更に詳細な処理例を示すフローチャートである。
CPU101は主に、
図2のチューニング値特定部201のブロック内に「主な情報」として記載した、[FFT窓データ]、[複素データ]([振幅][位相])、[位相エラー]、[カレント周波数]と[仮音階]、[仮音階整数部]と[仮音階小数部]、[仮音階小数部重心]、及び[チューニング値]などの情報を、RAM103に記憶された変数として取り扱う。
【0021】
図3において、CPU101は、ROM102又は通信部106を介して外部のネットワーク(インターネット等)から読み込まれた、コード判定対象の楽曲データの波形データを、前述した(1)式で定義した処理単位PU[サンプル/回]=SR(サンプルレート[サンプル/秒])/PR(FFT処理レート[回/秒])で、RAM103に順次読み込むことになるが、ここで、まず波形データの最終データまで読込み及び処理が完了したか否かを判定する(
図3のステップS300)。
【0022】
最終データまで完了しておらずステップS300の判定がNOならば、CPU101は、
図2で説明した波形データ読込み処理S210を実行する。具体的には、CPU101は、PUサンプルの新たな波形データをRAM103に読み込むと共に、(1)式で定義されたFFT窓サイズWL[サンプル]を有するFFT窓データを、例えばROM102から例えばRAM103又は特には図示しないCPU101が内蔵するレジスタ等のFIFO(First In,First Out)バッファにセットする。
【0023】
次に、CPU101は、
図2で説明した振幅/位相算出処理S211を実行する。
【0024】
具体的には、CPU101はまず、RAM103に現在までに処理単位PU[サンプル]毎に読み込まれている楽曲データの最新の処理単位PU(サンプル)の中央サンプルと、FIFOバッファにセットされているFFT窓データの中央サンプルとが一致するようにして、RAM103上の楽曲データのサンプルとFIFOバッファ中のFFT窓データのサンプルとを、対応するサンプル毎に乗算する。
【0025】
次に、CPU101は、FFT窓サイズWL[サンプル]分の乗算結果データに対して、FFT演算を実行する。
【0026】
更に、CPU101は、FFT演算の結果得られたFFTビン番号bin(以下「ビン番号bin」と記載)毎に、FFTの演算結果である複素データを取得し、その複素データから振幅と位相を算出する。ここで、FFT演算の演算点はFFT窓サイズWL[サンプル]に等しいが、0~(WL/2)-1までの演算結果と、WL/2~WL-1までの演算結果は、鏡像関係にある。従って、ビン番号binは、FFTの演算点に対応し、かつその演算点数の半分の0≦bin<FFT窓サイズWL/2の値をとる。
今、ビン番号binにおける複素データの実数部をre(bin)、虚数部をim(bin)とすると、ビン番号binにおける振幅Amp(bin)と位相Phs(bin)は、下記(2)式及び(3)式で示される各演算により算出される。
【0027】
Amp(bin)=Sqrt(re(bin)×re(bin)
+im(bin)×im(bin)) ・・・(2)
ここで、「Sqrt(n)」はnの平方根を演算する演算関数である。
Phs(bin)=Atan(im(bin),re(bin)) ・・・(3)
ここで、「Atan(y,x)」はxに対するyのアークタンジェントを演算する演算関数である。
【0028】
図3の説明に戻り、以上の振幅/位相算出処理S211の後、CPU101は、
図2で説明した位相エラー算出処理S212を実行する。
【0029】
具体的にはCPU101はまず、FFTの演算点に対応するビン番号bin(0≦bin<FFT窓サイズWL/2)毎に、下記(4)式で示される演算により、FFTビン周波数BFQ(bin)(ビン番号周波数)を算出する。
【0030】
BFQ(bin)=SR×bin/WL ・・・(4)
【0031】
上記(4)式に示されるように、FFTビン周波数BFQ(bin)(Hz=1/秒)は、FFT窓サイズWL(サンプル)に対するビン番号binの比を、楽曲データのサンプルレートSR(サンプル数/秒)に乗算することにより算出される。即ち、FFTビン周波数BFQ(bin)は、ビン番号binが示すFFTの演算点に依存して決定される周波数である。
【0032】
次に、CPU101は、ビン番号bin毎に、上記(4)式で示される演算により算出されるFFTビン周波数BFQ(bin)のもとで、処理単位PUが1単位(=SR/PR[サンプル])進んだときに変位すべき位相量である標準位相変位NPD(bin)を、下記(5)式で示される演算により算出する。
【0033】
NPD(bin)=2π×BFQ(bin)×PU/SR ・・・(5)
ここで、πは円周率である。
【0034】
次に、CPU101は、ビン番号bin毎に、(6)式で示される演算により、FFT演算結果である複素データから(3)式で示される演算で算出される今回の処理単位での位相Phs1(bin)から、同様に算出される前回の処理単位での位相Phs0(bin)に(5)式で示される演算で算出される標準位相変位NPD(bin)を加算した結果を、減算して得られるずれ量を、位相エラーePhs(bin)として算出する。
【0035】
ePhs(bin)=Phs1(bin)-(Phs0(bin)
+NPD(bin))%(2π) ・・・(6)
なお、位相エラーePhs(bin)は±πの範囲を超えないよう(1)式で定義されるサンプルレートSR[サンプル数/秒]、FFT処理レートPR[回/秒]、及びFFT窓サイズWL[サンプル]が調整されている。ここで「%」は剰余演算式であり、(6)式の右辺は2πで割った余りを意味する。
【0036】
前回の処理単位での位相Phs0(bin)に(5)式で示される演算により算出される標準位相変位NPD(bin)を加算したものは、本来であれば今回の処理単位での位相Phs1(bin)と一致するはずである。しかしながら、実際には、楽曲データの周波数が、(4)式で示される演算により算出されるFFTビン周波数BFQ(bin)とは異なるケースについては上記両者は一致しないので、上記(4)、(5)、及び(6)式で示される各演算により、Phs1(bin)と(Phs0(bin)+NPD(bin))%(2π)との差分が位相エラーePhs(bin)として算出される。
【0037】
図3の説明に戻り、以上の位相エラー算出処理S212の後、CPU101は、
図2で説明した周波数特定処理S213を実行する。
【0038】
具体的にはCPU101はまず、ビン番号bin(0≦bin<FFT窓サイズWL/2)毎に、位相エラー算出処理S212で算出した位相エラーePhs(bin)からカレント周波数cFq(bin)と仮音階vNt(bin)を算出する。
(5)式で示される演算により算出した標準位相変位NPD(bin)に(6)式で示される演算により算出した位相エラーePhs(bin)を加算した結果を標準位相変位NPD(bin)で除算することにより、標準位相変位NPD(bin)に対する実際の位相の比率が算出できる。
そこで、CPU101は、下記(7)式で示される演算により、(4)式で示される演算により算出したFFTビン周波数BFQ(bin)にその比率を乗算することにより、ビン番号bin毎に、カレント周波数cFq(bin)を算出する。
【0039】
cFq(bin)=BFQ(bin)×(NPD(bin)
+ePhs(bin))/NPD(bin) ・・・(7)
【0040】
また、CPU101は、ビン番号bin毎に、(7)式で示される演算により算出されたカレント周波数cFq(bin)を用いて、下記(8)式で示される演算により仮音階vNt(bin)を算出する。
【0041】
vNt(bin)=Log(cFq(bin)/440.0,2.0)×12
+69 ・・・(8)
ここで、「69」は、A4音の音階番号である。また、Log(x,2.0)は、xに対して2を底とする対数を演算する演算関数である。
ビン番号binにおける仮音階vNt(bin)は、上記(8)式に示されるように、ビン番号binにおけるカレント周波数cFq(bin)を任意の1つの音高の第1音周波数であるA4基準音の周波数440Hzで除算した結果に対して、2底の対数を計算し、その結果を12倍してA4音階番号=69に加算する演算により、算出することができる。
【0042】
続いて、CPU101は、全てのビン番号bin(0≦bin<FFT窓サイズWL/2)における(2)式で示される演算により算出される複素データの振幅Amp(bin)の合計値が一定値以上である場合に、下記(9)式に示されるように、ビン番号bin毎に、(8)式で示される演算により算出される仮音階vNt(bin)の小数部を四捨五入することにより、仮音階整数部ivNt(bin)を算出する。
【0043】
ivNt(bin)=vNt(bin)の小数部の四捨五入結果 ・・・(9)
【0044】
更に、CPU101は、下記(10)式に示されるように、ビン番号bin毎に、(8)式で示される演算により算出される仮音階vNt(bin)から(9)式で示される演算により算出される仮音階整数部ivNt(bin)を減算することにより、仮音階小数部fvNt(bin)を算出する。
【0045】
fvNt(bin)=vNt(bin)-ivNt(bin) ・・・(10)
【0046】
(9)式で示される演算が四捨五入の演算であることにより、(10)式で示される演算により算出される仮音階小数部fvNt(bin)は、-0.5以上0.5未満の範囲に収まる。
(10)式で示される演算により算出される仮音階小数部fvNt(bin)は、ビン番号bin毎の音階ずれ量と考えることができる。
【0047】
CPU101は更に、(9)式で示される演算により算出された仮音階整数部ivNt(bin)が予め決められた音域範囲内(例:36(C2)~95(B6))にあるビン番号binの範囲での仮音階小数部fvNt(bin)と振幅Amp(bin)((2)式参照)の重心である仮音階小数部重心Fltを、下記(11)式で示される演算により算出する。
【数1】
ここで、
bin:ビン番号、
min
bin:予め決められた音域の最小ビン番号、
max
bin:予め決められた音域の最大ビン番号、
Amp(bin):(2)式の演算で算出されるビン番号binの振幅、
fvNt(bin):(10)式の演算で算出されるビン番号binの仮音階小数部、
である。なお、上記式を満たすには、振幅が所定の閾値以上でなければならない。
つまりCPU101は、1つの処理単位PU内の上記所定の音域範囲内の各ビン番号binに対して(10)式で示される演算により各仮音階小数部fvNt(bin)を算出し、それらの各仮音階小数部fvNt(bin)の例えば重心を算出することにより、1つの処理単位に対応する処理単位毎音階ずれ量である仮音階小数部重心Fltを算出する。
【0048】
図3の説明に戻り、以上の周波数特定処理S213の後、CPU101は、ステップS300の判定処理に戻る。このようにして、CPU101は、波形データ読込み処理S210、振幅/位相算出処理S211、位相エラー算出処理S212、及び周波数特定処理S213を、対象の楽曲データを(1)式で定義した処理単位PU[サンプル]毎に最終データまで読み込んで波形データ読込み処理S210から周波数特定処理S213までの処理が完了したと判定するまで、繰り返し実行する。
この繰返し処理により、CPU101は、楽曲データの先頭から末尾まで処理単位PU[サンプル]毎に、処理単位毎音階ずれ量である仮音階小数部重心Fltを算出することができる。
【0049】
コード判定を行う楽曲データを処理単位PU[サンプル]毎に最終データまで読込んで波形データ読込み処理S210から周波数特定処理S213までの処理が完了し
図3のステップS300の判定がYESになると、CPU101は、
図2で説明したチューニング値特定処理S214を実行する。
【0050】
具体的には、CPU101はまず、楽曲データの先頭から末尾まで処理単位PU[サンプル]毎に得られた各仮音階小数部重心Fltの平均値である仮音階小数部重心平均値aFltを算出する。
この仮音階小数部重心平均値aFltは、楽曲データ全体の音階ずれ量に相当しているといえる。
【0051】
そして、CPU101は、上述の算出した仮音階小数部重心平均値aFltを用いて、下記(12)式で示される演算により、チューニング値sTunを特定する。
【0052】
sTun=440.0×Pow(2.0,aFlt/12) ・・・(12)
ここで、Pow(x,y)は、xのy累乗を求める演算関数である。
【0053】
CPU101は、上記(12)式で示される演算では、「2の[楽曲データ全体の音階ずれ量に相当する仮音階小数部重心平均値aFltを12で除算した結果値]乗」を演算することにより、1音階あたりの音階ずれ率を計算し、その音階ずれ率を任意の音階の第1音周波数、例えばA4基準音の周波数440.0(Hz)に乗算することにより、楽曲データに対するチューニング値sTunを算出している。
【0054】
以上のようにして、
図3のフローチャートで示される
図2のチューニング値特定部201の処理により、楽曲データ全体に対するチューニング値sTunを算出することができる。
【0055】
図4(a)は、
図2のクロマベクトル生成部202の更に詳細な処理例を示すフローチャートである。
CPU101は主に、
図2のクロマベクトル生成部202のブロック内に「主な情報」として記載した、[真音階]、[88音クロマベクトル]及び[12音クロマベクトル]などの情報を、RAM103に記憶された変数として取り扱う。
【0056】
CPU101はまず、
図2で説明した88音クロマベクトル生成処理S220を実行する。
【0057】
具体的には、CPU101は、
図2及び
図3のチューニング値特定部201において(12)式で示される演算により算出された楽曲データ全体にわたるチューニング値sTunと、
図2の周波数特定処理S213において(7)式で示される演算により算出したビン番号bin(0≦bin<FFT窓サイズWL/2)毎のカレント周波数cFq(bin)とに基づき、下記(13)式で示される演算により、ビン番号bin毎の真音階sNt(bin)を算出する。
【0058】
sNt(bin)=Log(cFq(bin)/sTun,2.0)×12+69
・・・(13)
ここで、(8)式で示される演算で仮音階vNt(bin)を算出したときと同様に、「69」は、A4音の音階番号である。
ビン番号binにおける真音階sNt(bin)は、上記(13)式に示されるように、ビン番号binにおけるカレント周波数cFq(bin)を(12)式で示される演算により算出されたチューニング値sTunで除算した結果に対して、2底の対数を計算し、その結果を12倍してA4音階番号=69に加算する演算により、算出することができる。
【0059】
続いて、CPU101は、下記(14)式に示されるように、ビン番号bin毎に、(13)式で示される演算により算出される真音階sNt(bin)の小数部を切捨てすることにより、真音階整数部iNt(bin)を算出する。
【0060】
iNt(bin)=sNt(bin)の小数部を切捨てした結果 ・・・(14)
【0061】
更に、CPU101は、下記(15)式に示されるように、ビン番号bin毎に、(13)式で示される演算により算出される真音階sNt(bin)から(14)式で示される演算により算出される真音階整数部iNt(bin)を減算することにより、真音階小数部fNt(bin)を算出する。
【0062】
fNt(bin)=sNt(bin)-iNt(bin) ・・・(15)
【0063】
(14)式が切捨ての演算であることにより、(15)式で示される演算により算出される真音階小数部fNt(bin)は、0.0以上1.0未満の範囲に収まる。
【0064】
次に、CPU101は、ビン番号bin毎に、(2)式で示される演算により算出される振幅Amp(bin)を、(14)式で示される演算によりビン番号bin毎に算出される真音階整数部iNt(bin)と(15)式で示される演算によりビン番号bin毎に算出される真音階小数部fNt(bin)とに基づき、所定の音階範囲の音数音階に分配合成することにより、その音数音階毎の周波数の振幅強度を特徴量としたベクトルであるクロマベクトルCRV[n]を生成する。
【0065】
より具体的には、楽曲データの音域全体、例えばA0(21)~C8(108)の88音階において、88音クロマベクトルをCRV88[n](n:0~87)で表すと、CPU101は、下記(16)式及び(17)式で示される各分配(合成)演算により、88音クロマベクトルCRV88[n]を生成する。
【0066】
CRV88[iNt(bin)-21]+=Amp(bin)
×(1.0-fNt(bin))
・・・(16)
CRV88[iNt(bin)+1-21]+=Amp(bin)
×fNt(bin)
・・・(17)
ここで「+=」は複合代入演算子であり、式中の左辺の値と右辺の値を足した結果を左辺の変数に入れることを意味する。
【0067】
図4(a)の説明に戻り、CPU101は、88音クロマベクトル生成処理S220の後に、
図2で説明した12音クロマベクトル生成処理S221を実行する。
【0068】
具体的には、CPU101は、(16)式及び(17)式で示される各演算により算出された88音クロマベクトルCRV88[n](n:0~87)の隣接する3音階(n-1,n,n+1)の最小値を基にノイズ除去を行った後、12音階に丸め込む再合成演算を実行する。
ここで、12音クロマベクトルをCRV12[m](m:0~11)で表すと、これは下記(18)式で示される再合成演算により算出される。
【0069】
CRV12[(n+21)%12]+=CRV88[n] ・・・(18)
ここで、n:0~87、%12:12で割る剰余演算である。
【0070】
以上のようにして、
図4(a)のフローチャートで示される
図2のクロマベクトル生成部202の処理により、88音クロマベクトルCRV88[n](n:0~87)と12音クロマベクトルCRV12[m](m:0~11)を生成することができる。
【0071】
図4(b)は、
図2のコード判定部203の更に詳細な処理例を示すフローチャートである。
CPU101は主に、
図2のコード判定部203のブロック内に「主な情報」として記載した、[ビートトラッキング情報](テンポ値、小節位置、拍位置)、[ビート長12音クロマベクトル]、[コード構成音テーブル]、及び[コード判定結果]などの情報を、RAM103に記憶された変数として取り扱う。
【0072】
CPU101はまず、
図2で説明したビートトラッキング処理S230を実行する。
【0073】
具体的には、CPU101は、楽曲データの音量変化や構成音、例えば
図2のクロマベクトル生成部202において
図4(a)の12音クロマベクトル生成処理S221で(18)式で示される演算により算出した12音クロマベクトルCRV12[m]の変化から、[ビートトラッキング情報](テンポ値、小節位置、拍位置)を検出する。
【0074】
次に、CPU101は、
図2で説明したコード判定処理S231を実行する。
【0075】
具体的には、CPU101は、
図4(b)のビートトラッキング処理S230で算出した[ビートトラッキング情報]に基づきコード判定すべき時間長を決定し、該当する時間長に対し(18)式で示される演算により得られている12音クロマベクトルCRV12[m]の要素値毎の合計値を要素値とする[ビート長12音クロマベクトル]を作成する。
【0076】
更に、CPU101は、下記(19)式で示される演算により、上記[ビート長12音クロマベクトル]と、コードの構成音/非構成音で重みづけされた[コード構成音テーブル]の値とを乗算し、合計が最大となるコードを[コード判定結果]に格納する。
【0077】
[ビート長12音クロマベクトル]×[コード構成音テーブル]の合計最大値
→[コード判定結果] ・・・(19)
なお、CPU101は、ルート音の違いにより[コード構成音テーブル]を12回シフトして決定する。
【0078】
図5は、C(ド)音を基準(ルート音)とする、[コード構成音テーブル]の重みづけの構成例の表を示す図である。
図5(a)の表はメジャーコードの場合、
図5(b)の表はマイナーコードの場合を示している。
図5において、構成音の重みづけは正の値をとり、3和音ではそれぞれ20(合計60)としている。非構成音は負の値をとり、特にメジャー/マイナーコードの違いとなる長短3度は絶対値の大きい値としている。
【0079】
以上説明したように、本実施形態によれば、楽曲に合わせた楽器演奏をする際の正確なチューニング値を特定しチューニング操作を容易に行うことが可能となる。また、このチューニング値に基づいて、より正確なコード判定結果を得ることが可能になる。
なお、以上説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。本実施形態は、その他の様々な形態で実施されることが可能であり、発明の趣旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。本実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0080】
100 楽曲データ処理装置
101 CPU
102 ROM
103 RAM
104 入力部
105 表示/出力部
106 通信部
107 システムバス
201 チューニング値特定部
202 クロマベクトル生成部
203 コード判定部