説明

自動採譜装置及びプログラム

【課題】同時に複数の音が演奏される場合でも、単一楽器による演奏された音響信号から楽譜を自動採譜することが可能な自動採譜装置を提供する。
【解決手段】音響信号を入力する入力部1と楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出部2と、それを記憶しておく記憶部3と、上記音響信号から各音階音のパワーを検出する音階音パワー検出部4と、各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、音の低い音階音から順にすべての音階音に対して実行する倍音除去部5と、該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出部6と、上記音符情報の検出結果をファイル等に出力する検出結果出力部7とを有している。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、自動採譜装置及びプログラムに関する。
【背景技術】
【0002】
音楽CD等の演奏情報から楽譜を起こす、いわゆる採譜という作業は、音楽知識や絶対音感等の特別な能力を持つ人のみが可能な作業であるため、これをコンピュータ等によって行おうとする研究が古くから行われている。
【0003】
このコンピュータによる自動採譜が難しい原因は、楽器音の倍音にある。
【0004】
楽器音は、単音で演奏した場合でも、その音の高さ(ピッチ)に相当する基音(基本波)と複数の倍音(高調波)の周波数が同時に発せられる。倍音の周波数は、通常、基音の整数倍であるが、ピアノにおいては、高次の倍音の周波数が基音の整数倍にならないことが知られている。
【0005】
この倍音のパワーの基音のパワーに対する比率は、楽器によって異なり、また、同一の楽器でも音の高さによって異なり、打鍵(発音)後の時間とともに変化し、さらに、厳密には、同一の楽器の同一の音であっても、打鍵(発音)時のタッチ(タンギング等)によって、このパワー比は、演奏の度に毎回異なるものである。
【0006】
単音であっても上記の通りであるが、複数の音が同時に演奏された場合は、さらに問題は複雑になる。同時に演奏された複数の音のいずれかの音の基音、または、倍音同士が近い周波数になると、位相による打ち消しあい、または、重ね合わせで、基音や倍音のパワーは変化してしまう。
【0007】
自動採譜における楽器音のピッチ抽出は、楽器音の基音の周波数を検出することにあるが、このように基音と倍音のパワー比率はさまざまな条件により変化するため、基音と倍音の判断が容易にはつかなくなり、これが自動採譜を難しくしている。
【0008】
このような倍音を除去するための方法として、例えば、下記特許文献1に示す構成がある。同文献の構成では、このパワー比が楽器毎にほぼ決まっているという前提のもとに、ある注目周波数よりも高い周波数(比較周波数)が注目周波数の倍音かどうか判断し、倍音と判断したときには比較周波数の音量を一定の割合で削減し、また、場合によっては、これを注目周波数の音量に上乗せするという方法をとっている。
【特許文献1】特開2000−293188
【発明の開示】
【発明が解決しようとする課題】
【0009】
しかし、もし、パワー比が楽器毎にほぼ決まっているのならば、この方法が有効であるが、実際は多くの楽器で、その音域によりパワー比は大きく異なる。よって、一定の割合では、音域によっては倍音が正しく除去できないことが予想される。
【0010】
また、この従来構成においては、比較周波数(倍音)の音量の一定の割合を削減しているが、比較周波数には同時に鳴っている他の音の倍音の音量も含まれている可能性があるため、比較周波数の音量の一定の割合ではなく、注目周波数(基音)の音量に比較周波数の倍音の次数に応じた比率をかけた音量を比較周波数の音量から削減すべきである。
【0011】
本発明は、以上のような問題に鑑み創案されたもので、単一楽器によって演奏された音響信号から楽譜を自動採譜する、さらに単音演奏のみでなく、同時に複数の音が演奏される複音演奏の場合も含んで、演奏された音響信号から楽譜を自動採譜する自動採譜装置を提供せんとするものである。
【0012】
併せて、これらの装置をコンピュータ上に実現できる自動採譜用のコンピュータ・プログラムについても、提供する。
【課題を解決するための手段】
【0013】
そのため本発明に係る自動採譜装置は、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
を有することを基本的特徴としている。
【0014】
上記構成によれば、予め自動採譜の対象となる演奏に使われている楽器の基音に対する倍音のパワー比率を倍音パワー比検出手段により検出しておき、それらを上記記憶手段に記憶しておく。次に、上記音階音パワー検出手段により、入力手段から入力した音響信号から各音階音のパワーを検出する。その後倍音除去手段により、これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を減算し、さらに実際に減算されたパワーを基音のパワーに加算する。以上の処理を音の低い音階音から順にすべての音階音について実行する。そして、音符情報検出手段により、閾値以上のパワーを持つ音階音を抽出することにより音符情報を検出することになる。
【0015】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力するようにすると良い。
【0016】
本発明の上記構成で前提としている演奏情報は、単一楽器による演奏であり、単音のみならず、同時に複数の音が演奏される複音であっても構わない。
【0017】
自動採譜に先立ち、予め、その楽器で幾つかの音階音を演奏してもらう。その演奏の結果から基音に対する倍音のパワー比率を測定する。この倍音のパワー比は、打鍵(発音)直後は変化が激しく、減衰過程に入ると安定する。そのため、このパワー比はこの減衰過程で取ることが望ましい。
【0018】
パワー比は自動採譜する楽器の音域のすべての音階音について測定することが望ましいが、それでは準備に時間がかかってしまう。そもそも、このパワー比は楽器の音色を表しているものであり、楽器の音色は音の高さの変化とともに滑らかに変化するものである。そこで、請求項2の構成では、この楽器の音域の内、離散的な幾つかの音(例えば長3度の音程毎の音階音)でパワー比を測定し、その間の音については上下のパワー比から補間して生成する。
【0019】
さらに、請求項3の構成は、請求項1記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【0020】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項1に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【0021】
請求項3のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
して機能させることを特徴とする自動採譜用プログラムである。
【0022】
さらに、請求項4の構成は、請求項2記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、コンピュータに上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項2に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【0023】
請求項4のより具体的構成は、上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とするコード名検出用プログラムである。
【0024】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【0025】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【0026】
尚、請求項3又は4記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能(コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い)によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【0027】
これは、請求項1及び2に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【0028】
本発明の請求項1及び請求項2記載の自動採譜装置、並びに請求項3及び4記載の自動採譜用プログラムによれば、単音のみならず、同時に複数の音が演奏される場合でも、単一楽器による演奏された音響信号から楽譜を自動採譜することが可能であるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【0029】
以下、本発明の実施の形態を図示例と共に説明する。
図1は、本発明の自動採譜装置の、ある実施例における全体のブロック図である。
【0030】
同図に示す装置は、音響信号を入力する入力部1と、予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出部2と、その倍音パワー比を記憶しておく倍音パワー比記憶部3と、上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出部4と、これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去部5と、該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出部6と、上記音符情報の検出結果をファイル等に出力する検出結果出力部7とを有している。
【0031】
上記入力部1は、音響信号受信部10とA/D変換部11とを有している。該音響信号受信部10は、マイク等の機器で構成され、そこからアナログ信号を取り込む機能を有している。
【0032】
A/D変換部11は、取り込んだアナログ信号をディジタル信号に変換する機能を有している。A/D変換後のサンプリング周波数は、11025Hz、量子化ビット数は16ビットとする。
【0033】
このディジタル信号は、倍音のパワー比を測定する場合は、倍音パワー比検出部2に送られ、また演奏音から採譜処理を行う場合は、音階音パワー検出部4に送られる。
【0034】
該倍音パワー比検出部2は、図2のようなブロックから構成され、音量検出部20とパワー比検出部21とで構成される。
【0035】
上記音量検出部20では、入力されたディジタル信号の音量を測定する。
【0036】
上記パワー比検出部21では、入力されたディジタル信号をFFT演算し、基音に対する倍音のパワー比を測定する。
【0037】
該倍音パワー比検出部2での処理は、A/D変換後の波形サンプルが所定数溜まる毎に処理される。この所定数は、パワー比検出部21のFFTポイント数によって決まるが、より詳細にデータをとる場合は、FFTの窓をオーバーラップさせるため、例えば窓を3/4オーバーラップさせる場合、窓のシフト量は窓のサイズの1/4となり、倍音パワー比検出部2での処理も窓サイズの1/4のデータが溜まるたびに処理される。
【0038】
この1回の処理の時間単位を1フレームと呼ぶことにする。本実施例では、倍音パワー比検出部2での窓のサイズ、つまりFFTポイント数は、4096ポイントとする。つまり、窓のサイズは約372msとなり、3/4オーバーラップさせる場合、1フレームは、約93msとなる。
【0039】
音量検出部20での音量測定について次に説明する。
【0040】
音量検出部20では、FFTの窓サイズの波形データを受け取り、その音量を測定する。
【0041】
音量の測定は、波形の振幅の二乗の総和の平方根を取ることにより計算する。すなわち、i番目の波形サンプルをW(i)とすると、音量Ampは、下記数1式により、計算される。
【0042】
【数1】

ここで、Nは音量計算する波形のサンプル数であり、N=4096である。
【0043】
次に、パワー比検出部21での処理を説明する。パワー比検出部21は、FFTの窓サイズの波形データを受け取り、基音に対する倍音のパワー比を測定する機能を有している。
【0044】
基音の音高は、自動採譜する音域の中から離散的に選択された幾つかの音高であり、これは外部からパワー比検出部21に指示される。
【0045】
この指示された音高を基音とし、基音のパワーに対する2倍音から8倍音までの倍音のパワー比を、パワー比検出部21では測定する。
【0046】
FFT演算の結果得られるパワースペクトルは、サンプリング周波数をFFTポイント数で割った値、つまり、本実施例の場合、約2.7Hzの間隔で測定される。
【0047】
つまり、この約2.7Hzの整数倍の周波数のパワーが測定されるわけで、今求めたい基音や倍音の周波数にちょうど一致する周波数が測定されるわけではない。
【0048】
そこで、基音、倍音の周波数の上下50セントの範囲にあるパワースペクトルの内、パワーが最大のスペクトルのパワーを基音、倍音のパワーとする。これにより、多少(半音の半分まで)ピッチが揺らいでも正確にパワー比を測定できるため、本発明の自動採譜装置は、トランペット等の安定したピッチで演奏することが難しい楽器にも対応できる。
【0049】
音高が与えられたとき、その音高NN(C4:中央のド=60)から周波数Freq(Hz)への変換は、以下の数2式で行うことができる。
【0050】
【数2】

【0051】
上記式の、440はA4の周波数である。これにより、例えばC3(ノートナンバー48)の周波数は、130.8Hzと計算される。
【0052】
上記式を変形して、逆に周波数からCentは、下記式数3で計算できる。
【0053】
【数3】

【0054】
従って、C3の上下50セントの周波数は、127.0Hzから134.6Hzと計算できる。
【0055】
これをFFTのスペクトル間隔で割ることにより、C3の基音のパワーは、47番目から50番目のスペクトルのパワーから最大値を検索して求めることになる。
【0056】
図3は、ある楽器(電子ピアノ)のノートナンバー48の音を弾いた時の基音と倍音のパワーの時間変化を、また図4は、その音量の時間変化を、夫々表したグラフである。
【0057】
パワー変化の図3のグラフの縦軸は、パワーで横軸は倍音の次数(Iが基音、IIが2倍音、…)、奥行き方向が時間変化で、時間は手前から奥へと進む(数字はフレーム数)。このグラフのように打鍵後音量がピークになる6フレームまでの間(アタック区間)は、各倍音のパワーが大きく変化しており、この区間では基音に対する倍音のパワー比も安定していない。
【0058】
その後、8フレーム辺りから各倍音のパワーは安定しているので、これ以降にパワー比を測定することが望ましい。なお、楽器によってはアタック区間を過ぎても倍音のパワーが安定しない場合もあるので、ある範囲で平均を取ってパワー比を求めた方がよい(図4参照)。
【0059】
アタックを検出し、パワー比を何フレームか測定して平均し、その音階音のパワー比を倍音パワー比記憶部3に記憶させ、次の音階音に移る一連の流れをフローチャートにしたのが、図5である。
【0060】
同図を用いてパワー比を測定する処理の流れを、以下説明する。まず、ステップS101で各変数に初期値を代入する。
【0061】
各変数の意味は以下の通りである。
Note 基音の音高
Attack アタック検出したかどうか
Record パワー比を保存したかどうか
Silence 無音になったと判断したかどうか
AttackCt アタック検出した回数
RecordCt パワー比を測定した回数
SilenceTime 無音になったと判断した時刻
パワー比 2倍音から8倍音までの倍音のパワー比
PASSNUM アタック検出後、パワー比の測定を始めるまで読み飛ばすフレーム数
RECNUM パワー比を測定するフレーム数
NOTEADD パワー比を計算する音高の間隔
【0062】
まず、Noteにパワー比を測定する最初の音高をセットする。後述する図6のような結果を得る場合には、最初の音高として48をセットする。
【0063】
Attack、Record、Silenceの各変数は、ブール変数で、true(=1)とfalse(=0)の2つの値を持つ変数である。各変数はこれらを検出していないことを示すfalseの値(=0)をセットする。
【0064】
AttackCt、RecordCt、SilenceTimeの変数も、初期値0をセットする。
【0065】
パワー比は、図6では8倍音まで測定しているが、この場合、要素数7の配列となる。基音を基準(=1)とした倍音のパワー比を測定しているので、基音のパワー比は必要ないため、8倍音まで測定する場合、要素数は7となる。これも、後に加算して平均を測定するため、初期値0をセットしておく。
【0066】
上述のPASSNUM、RECNUM、NOTEADDは、予め値を決めておく固定値で、今回の例では、PASSNUM=2、RECNUM=8、NOTEADD=4としている。
【0067】
PASSNUMがこのように小さい値なのは、今回広い範囲の音域のパワー比を測定するため、特に高い音では音の立ち上がり・減衰が早いため、このような小さな値にしてある。
【0068】
以上のように初期値がセットできたら、ステップS102に進む。ステップS102では、すでにアタックが検出されたかどうかを、Attack変数でチェックする。
【0069】
まだアタックが検出されていない(ステップS102;Yes)ということは、本装置がまだ音の打鍵を検出していないということであるので、ユーザに現在設定されているNoteの音高の鍵盤を弾くように指示する(ステップS103)。該指示は、本装置の表示装置、または、コンピュータのディスプレイ等を用いて行う。
【0070】
既にアタック検出している場合(ステップS102;No)は、この指示は出す必要はない。
【0071】
次に、離鍵の指示を出すかどうかを、AttackとRecordの変数でチェックする(ステップS104)。既にアタック検出済みで、パワー比の保存も完了しているならば(ステップS104;Yes)、これ以上押鍵しておく必要はないので、離鍵の指示を出す(ステップS105)。
【0072】
離鍵の指示も、本装置の表示装置、または、コンピュータのディスプレイ等を用いて行う。
【0073】
次に、A/D変換後の波形サンプルが、FFTの窓サイズ溜まるまで待つ(ステップS106)。溜まったら(ステップS106;Yes)、FFT演算を行い、音量とパワー比を測定する(ステップS107)。音量、パワー比の測定方法は、先に述べた通りである。
【0074】
次のステップS108では、求めた音量が閾値を上回っているかどうかをチェックする。閾値を上回っていない場合(ステップS108;No)は、ステップS121以降の無音の判断の処理にジャンプする。
【0075】
ステップS121以降の無音の判断の処理は、パワー比を所定回数測定して、パワー比の平均が求まってから、次の音符に移る前に、完全に無音になっていることを判断するための処理である。
【0076】
今は、まだアタックの検出も、パワー比の保存も行われていないので、ステップS121とステップS123は、どちらもNoの分岐に進み、ステップS111へと進む。無音の判断処理の詳細は、後ほど説明する。
【0077】
アタックを検出していない、今の段階では、ステップS111もNoの分岐に進み(ステップS111;No)、ステップS118でもNoとなり、当然、まだ最終音ではないので、ステップS120から、ステップS102へと戻る。
【0078】
このようにして、再びステップS106でFFTの窓サイズまでデータが溜まるまで待ち、ステップS107で音量とパワー比を測定する。
【0079】
そのうちに、ユーザが打鍵を行うので、音量が閾値を上回り、ステップS108がYesの分岐に進み、ステップS109が実行される。
【0080】
ステップS109では、音量が閾値を上回ったので、アタック検出済みフラグAttackをtrueにセットする。
【0081】
また、次のステップS110で、アタック検出したばかりなので、無音検出済みフラグもfalseにセットしておく。
【0082】
ステップS111では、アタック検出後、パワー比の測定を開始するまでに読み飛ばす処理を行う。つまり、アタックを検出済みで、まだパワー比の保存は完了していないとき、アタック検出後の回数がPASSNUM(今の例では2)以下ではNoの分岐に進み(ステップS111;No)、ステップS118に進む。
【0083】
ステップS118で、アタックは検出済みであるので、ステップS119で、アタック検出後の回数がインクリメントされる。
【0084】
再びステップS102からのループが行われ、アタック検出後の回数AttackCtがRECNUMを上回ったとき(ステップS111;Yes)、処理は、ステップS112へと進む。
【0085】
ステップS112では、実際のパワー測定に入る。
【0086】
始めのステップS101で0に初期化しておいたパワー比のバッファに各倍音(この例では2倍音から8倍音)の基音のパワーに対する比率を加算していく(ステップS112)。最初に0で初期化して加算していくのは、後に平均を計算するためである。
【0087】
次のステップS113では、パワー比録音の回数をインクリメントする。
【0088】
録音の回数が、RECNUM(今の例では8)以上になったら(ステップS114;Yes)、パワー比の平均を計算する(ステップS115)。
【0089】
パワー比の平均は、先に述べたとおり、これまでのパワー比がパワー比のバッファに加算されているので、録音回数RECNUMで除算することにより平均が求まる。
【0090】
平均されたパワー比を、上記倍音パワー比記憶部3に保存する(ステップS116)。
【0091】
以上で、この音高に対するパワー比の測定が完了したので、録音済みフラグRecordをtrueにセットする(ステップS117)。
【0092】
次に、ステップS121以降の録音後の無音の判断処理について説明する。
【0093】
前の音が残っている状態で次の音の録音を始めてしまうと、次の音のパワースペクトルに前の音の成分も混在してしまうため、正しくパワー比を求めることができない。特にピアノのような楽器では、離鍵後もピアノの内部で残響音が残るため、十分に無音になったと判断してから、次の音の録音を始めなくてはならない。
【0094】
この処理は、ステップS121からステップS124で行っている。録音が完了するとRecordフラグがtrueになる(ステップS117)ので、ステップS104でYesに進み、ステップS105で、離鍵の指示がされる。この指示を受けて、ユーザは離鍵する。
【0095】
すると、そのうちに音量が下がり、ステップS108で音量が閾値以下になる。
【0096】
音量が閾値以下になるまでの間は、ステップS110でSilenceがfalseにセットされ、録音済みなのでステップS111はNoに進み、ステップS109でアタック検出後の回数のみがインクリメントされる。
【0097】
なお、この例では、アタック検出と無音判断のための音量閾値が同じ値にしてあるが、これらを別にするようにしてもよい。
【0098】
ステップS108で、音量が閾値以下になったら、ステップS121に進む。ステップS121では、まず、アタック検出済みかどうかがチェックされ、一度でも無音と判断したかどうか(Silenceフラグ)がチェックされる。Attackフラグのチェックは、打鍵前の無音状態でもこのステップが実行されるために入れてある。
【0099】
無音の判断Silenceがfalseの場合(ステップS121;Yes)は、ここでtrueにセットし、今の時刻をSilenceTime変数にミリ秒の単位で保存しておく(ステップS122)。
【0100】
次に、ステップS123で1秒間以上無音が続いていることをチェックする。アタック検出済みで、録音が完了していて、一度以上無音と判断していて、最初の無音の判断から1000ミリ秒、つまり1秒が経過していたら(ステップS123;Yes)、ステップS124に進む。
【0101】
ステップS124に進んだ場合は、この音高に対するすべての処理の完了を意味し、音高に次の音をセットし、他のすべての変数を初期化する。
【0102】
無音の判断中、一度でも音量が閾値を上回ると、ステップS108は、Yesに分岐し、ステップS110で、Silenceがfalseに戻されてしまう。
【0103】
すると、次に音量が閾値を下回ったときに、ステップS122に入り、無音の判断開始時間が再設定される。
【0104】
これで、音量が閾値を下回る状態が1秒以上続くことを判断でき、完全に無音となったことが判断できる。
【0105】
このように、連続して1秒以上無音になることを判断するのは、ピアノ等の楽器では、音量が上下しながら減衰していくため、一度閾値を下回っても、再び閾値以上になることがあるからである。
【0106】
最後に、ステップS120で音高が最終音を上回ったら、処理を終了する。
【0107】
このようにして、すべての測定する音階音についてのパワー比が求まったら、倍音パワー比記憶部3で外部の記憶装置(フレキシブルディスク等)にパワー比を保存しておく。
【0108】
これは、パワー比の測定は自動採譜の度に行う必要はなく、同一音のパワー比がそれほど変化しない限り、つまり、原則的にはある楽器については一度だけ行えばよいと考えられるからである。すなわち、倍音のパワー比は、自動採譜に先立って測定を行ってもよいし、以前測定して保存しておいたものから読み込んで使用してもよい。
【0109】
図6に、このようにして測定したある楽器(電子ピアノ)の倍音パワー比を示す。この例では、C3からC6の3オクターブの音域で、長3度(半音4個分)の音程差毎にパワー比を測定した。
【0110】
この図のように、倍音のパワー比は音の高さの変化と共に、ほぼ滑らかに変化しているので、測定を行わなかった、例えばノートナンバー49から51の音高のパワー比も、ノートナンバー48や52のパワー比に似た形になることが予想される。よって、この間のパワー比は、近い音高のパワー比を使うか、または、上下の音高のパワー比を使って、各倍音のパワー比がそれらの中間のパワー比になるように、比例計算したものを使うとよい。
【0111】
倍音のパワー比が準備できたら、自動採譜が可能になる。自動採譜の処理について次に説明する。
【0112】
A/D変換部11でディジタル信号化された楽器の演奏音は、音階音パワー検出部4で各音階音のパワーが測定される。
【0113】
音階音パワー検出部4での各音階音のパワー測定は、倍音パワー比検出部2で使った方法とまったく同じ方法で測定する。つまり、各音階音の基本周波数の上下50セントの範囲におけるパワースペクトルのパワーの最大値を検出する。
【0114】
ただし、より広い音域で正確にパワーを測定するため、FFTポイント数は8192とし、窓のオーバーラップは15/16とする。このとき、周波数分解能は約1.3Hz、時間分解能(=1フレームタイム)は約46msとなる。これは、およそ4分音符=163のテンポの曲の32分音符の長さに相当する。
【0115】
検出する音階音の音域は、自動採譜する楽器の音域に合わせて設定する。もちろん、採譜する曲の音域によって、さらに限定してもよい。
【0116】
ここでは、仮に、C3からC6の3オクターブの範囲とする。つまり、各フレーム時間毎に上記パラメータで1度FFT演算を行い、その結果から、C3からC6の各音階音(C3、C#3、D3、…、B5、C6)のパワーを検出する。
【0117】
各音階音のパワー検出結果の例を図7に示す。図7の上段は波形で、下段が各音階音のパワーを濃淡で表したものである。
【0118】
各音階音のパワーが検出されたら、先に保存しておいたこの楽器の各音階音の基音に対する倍音のパワー比を使って、倍音成分を除去する。この手順を図8にフローチャートで示す。
【0119】
Nは採譜する音階音であり、今の場合C3(48)からC6(84)の範囲となる。hは倍音の次数で、2から8まで変化させる。HはNのh倍音の音高で、HがC6を超えている場合は、以下の処理をしない。P(N)は、音階音Nのパワーで、R(N,h)は、音階音Nのh倍音のパワー比である。
【0120】
まず、ステップS201で、変数Nに採譜する音域の最低音の音高をセットする。今の例では、C3からC6が採譜する音域なので、最低音の音高は48である。
【0121】
次に、ステップS202で、変数hに2を代入する。変数hは、倍音を示す数で、今は2倍音から8倍音まで処理を行うため、まず、2をセットする。
【0122】
次に、ステップS203で、変数HにNのh倍音の音階音をセットする。今は、48の2倍音の音高、60がセットされる。
【0123】
Nのh倍音の音高は、まず基準となるNの音高を周波数に変換し、その周波数をh倍した周波数を求め、それをまた音高に変換することにより求める。
【0124】
Hが採譜する音域を超えている場合(ステップS204;No)は、その音階音のパワーは計算していないため、後の処理ができない。
【0125】
Hが採譜する音域内の場合にのみ倍音除去の処理を行う(ステップS204;Yes)。
【0126】
次のステップS205からステップS211が、実際の倍音除去の処理である。
【0127】
ステップS205では、まず、音高Nのパワーに、あらかじめ測定して保存してある、音高Nのh倍音のパワー比を掛け算する。これにより、基音Nのh倍音の想定される倍音のパワーが計算される。計算の結果を変数PHに保存する(ステップS205)。
【0128】
次のステップS206で、後で使用するため、Nのh倍音であるHの音高の現在のパワーを変数POに保存しておく(ステップS206)。
【0129】
次にステップS207で、Nのh倍音のHのパワーからPHを減算する。PHはh倍音の想定される倍音のパワーであり、これを引き算することで、倍音成分が除去される。
【0130】
ただし、パワーはマイナスの値になることはないので、ステップS208とステップS209で、マイナスになってしまった場合は、0にしておく。
【0131】
次に、ステップS210で、保存しておいた以前のNのh倍音、HのパワーPOから、現在のHのパワーP(H)を引く。これにより、実際に減算されたパワーの値がPDに保存される。
【0132】
このPDの値をNのパワーに加算する(ステップS211)。これは、特にピアノの低音域のように、基音のパワーが倍音に比べて小さい音でも検出できるように、その倍音の成分を基音に加算してあげようという考えである。
【0133】
以上が倍音除去の処理であり、次の倍音に進めるために、ステップS212でhをインクリメントする。
【0134】
hが8以下の時(ステップS213;Yes)は、ステップS203に戻って倍音除去の処理を繰返し、8を上回ったら(ステップS213;No)、ステップS214に進む。
【0135】
ステップS214では、次の音階音を処理するために、Nをインクリメントする。
【0136】
ステップS215では、Nが採譜する範囲かどうか調べ、まだ続ける場合(ステップS215;Yes)は、ステップS202に戻って、hを2に初期化する。
【0137】
Nが採譜する範囲を超えたら(ステップS215;No)、処理を終了する。 以上のように、音階音Nのパワーに、音階音Nのh倍音のパワー比をかけた値を、h倍音のパワーP(H)から減算し、減算が行われた場合、その値だけ音階音NのパワーP(N)に加算している。
【0138】
このようにして、倍音を除去し、その分を基音に上乗せした各音階音のパワーを図9に示す。
【0139】
後は、この倍音除去後の各音階音のパワーから、ある閾値以上のパワーを持つ部分を抜き出し、これらから音符情報を生成し、出力する。
【0140】
閾値は、例えば、全音階音の全フレームにおけるパワーの最大値を検出し、これにある値、例えば0.3をかけた値とする。音符の検出具合に応じて、ユーザがこの比率を設定するようにしてもよい。
【0141】
音符検出処理のフローチャートを図10に示す。
【0142】
まず、ステップS301では、全フレーム、全音階音のパワーの最大値が計算され、変数PMに代入される。
【0143】
PMに代入する値は、パワーの最大値ではなく、パワーの平均値としてもよい。この場合には、次のステップS302における係数0.3の値をより大きな適当な値にすべきである。
【0144】
ステップS302では、音符検出の閾値が決定される。閾値は、PMにある係数(この例では0.3)を掛けた値で計算される。
【0145】
閾値が求まったら、音符の検出処理に入る。
【0146】
ステップS303で、まず、採譜する音高の初期値として、採譜する音域の最低音をセットする。
【0147】
次にステップS304で採譜処理に使う変数を初期化する。Onは、音符の鳴り始め(ノート・オン)を表すブール変数で、最初はfalseにセットする。pmは、検出している音のパワーの最大値で、最初は0を代入する。
【0148】
ステップS305では、別の変数fを0に初期化する。fは、フレームの番号ある。
【0149】
次のステップS306で、採譜する音階音Nのf番目のフレームのパワーを変数Pに代入する。Pが閾値以上で、かつ、Onフラグがまだfalseの場合(ステップS307;Yes)、次のステップS314に進む。
【0150】
ステップS314では、Onフラグをtrueにし、音符検出の開始フレームを表す変数FBに現在のフレーム番号fを代入し、この音符のパワーを表すpmに現在のパワーPを代入する。
【0151】
ステップS315からステップS317は、pmの更新処理であり、Onフラグがtrue、つまり音符を検出し始めたら(ステップS315;Yes)、現在のパワーPがpmより大きいかどうかチェックし(ステップS316)、Pがpmより大きければpmをPで更新する(ステップS317)。
【0152】
ステップS318で、現在のフレーム番号fをインクリメントし、ステップS319で、fが総フレーム数未満の時は(ステップS319;Yes)、ステップS306に戻り、繰り返す。fが総フレーム数以上の時は(ステップS319;No)、ステップS320に進み、検出する音階音Nをインクリメントする。
【0153】
ステップS321で、Nが採譜する音域内ならば(ステップS321;Yes)、ステップS304に戻って、各変数を初期化する。Nが音域外になったら(ステップS321;No)、処理を終了する。
【0154】
ステップS308からステップS313について説明する。
【0155】
一度音符を検出し始めると、ステップS314で、Onフラグがtrueになるので、ステップS307は、Noに分岐する。
【0156】
ステップS308では、ノートオフを検出する。つまり、パワーPが閾値未満かどうかチェックし、閾値未満になったら(ステップS308;Yes)、ステップS309に進む。
【0157】
ステップS309では、Onフラグをfalseにする。
【0158】
ステップS310では、検出した音符の継続時間FLを、(f−FB)で計算する。
【0159】
ステップS311で、継続時間FLが3フレーム未満の時は(ステップS311;No)、ステップS313にジャンプする。継続時間FLが十分に長いときは(ステップS311;Yes)、検出音符の確定となり、音符検出終了フレームFEに現在のフレーム番号fをセットし、127×pm/PMで、ベロシティーVelを計算し、検出音高N、検出開始フレームFB、検出終了フレームFE、ベロシティVelを、検出音符情報として、バッファに保存する(ステップS312)。
【0160】
ステップS313は、検出した音符の継続時間が短すぎた場合の処理で、Onフラグをfalseに初期化し、パワーの最大値pmも0に初期化して、次の音符検出に備える。
【0161】
以上のようにして、各音階音毎に、開始フレームから終了フレームまで、閾値以上で、ある程度の長さを持った音符が検出されていく。
【0162】
以上のように、すべての音階音Nについて、先頭のフレームから最後のフレームまで、そのフレームfにおけるパワーP(N,f)が閾値以上かどうかチェックし、閾値以上になったところ(FB)から閾値未満になったところ(FE)までを音符の継続時間として、その長さが3フレームに満たない短いデータは削除し、それ以上のものを検出音符として保存する。pmは音符継続時間中の最大のパワーであり、これと全音階音の全フレームにおけるパワーの最大値PMから音符のベロシティ(音の強さ)を計算する。
【0163】
図10の例では、パワーの最大値からベロシティを決定しているが、パワーの平均値からベロシティを計算するようにしてもよい。
【0164】
上記図9の枠で囲まれている部分が、このようにして検出された音符である。検出した音符情報は、検出結果出力部7で発音時間順に並べ替えられ、SMF(スタンダード・ミディ・ファイル)等の形式でファイルに出力される。または、この採譜装置で演奏できるようにしてもよい。
【0165】
以上詳述した本実施例構成では、予め自動採譜の対象となる演奏に使われている楽器の基音に対する倍音のパワー比率を幾つかの音階音について用意し、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成し、入力した音響信号から各音階音のパワーを検出し、これら各音階音について、それぞれが基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を減算し、さらに実際に減算されたパワーを基音のパワーに加算し、以上を音の低い音階音から順にすべての音階音について実行した後に、閾値以上のパワーを持つ音階音を抽出することにより音符情報を検出している。
【0166】
従って、単音演奏のみでなく、同時に複数の音が演奏される複音演奏の場合であっても、単一楽器によって演奏された音響信号から、楽譜を自動採譜することができるようになる。
【0167】
尚、本発明の自動採譜装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【0168】
本発明の自動採譜装置及びそれらを実現できるプログラムは、自動採譜装置、音楽データベース作成、音楽構造等の研究、自動伴奏システム、セッションシステム、音楽レッスンシステムなど、種々の分野で利用可能である。
【図面の簡単な説明】
【0169】
【図1】本発明の自動採譜装置の、ある実施例における全体のブロック図である。
【図2】倍音パワー比検出部2の構成を示すブロック図である。
【図3】電子ピアノのノートナンバー48の音を弾いた時の基音と倍音のパワーの時間変化を表したグラフである。
【図4】その音量の時間変化を表したグラフである。
【図5】アタックを検出し、パワー比を何フレームか測定して平均し、その音階音のパワー比を記憶させ、次の音階音に移る一連の流れを示すフローチャートである。
【図6】電子ピアノの倍音パワー比を示すグラフである。
【図7】各音階音のパワー検出結果の例を示すグラフである。
【図8】倍音成分の除去の手順を示すフローチャートである。
【図9】倍音除去後、その分を基音に上乗せした各音階音のパワーを示すグラフである。
【図10】音符検出処理の手順を示すフローチャートである。
【符号の説明】
【0170】
1 入力部
2 倍音パワー比検出部
3 倍音パワー比記憶部
4 音階音パワー検出部
5 倍音除去部
6 音符情報検出部
7 検出結果出力部
10 音響信号受信部
11 A/D変換部
20 音量検出部
21 パワー比検出部

【特許請求の範囲】
【請求項1】
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
を有することを特徴とする自動採譜装置。
【請求項2】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とする請求項1記載の自動採譜装置。
【請求項3】
コンピュータを、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
して機能させることを特徴とする自動採譜用プログラム。
【請求項4】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とする請求項3記載の自動採譜用プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2007−33479(P2007−33479A)
【公開日】平成19年2月8日(2007.2.8)
【国際特許分類】
【出願番号】特願2005−212060(P2005−212060)
【出願日】平成17年7月22日(2005.7.22)
【出願人】(000001410)株式会社河合楽器製作所 (563)
【Fターム(参考)】