(57)【特許請求の範囲】
【請求項１】
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
を有することを特徴とする自動採譜装置。
【請求項２】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とする請求項１記載の自動採譜装置。
【請求項３】
コンピュータを、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
して機能させることを特徴とする自動採譜用プログラム。
【請求項４】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とする請求項３記載の自動採譜用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動採譜装置及びプログラムに関する。
【背景技術】
【０００２】
音楽ＣＤ等の演奏情報から楽譜を起こす、いわゆる採譜という作業は、音楽知識や絶対音感等の特別な能力を持つ人のみが可能な作業であるため、これをコンピュータ等によって行おうとする研究が古くから行われている。
【０００３】
このコンピュータによる自動採譜が難しい原因は、楽器音の倍音にある。
【０００４】
楽器音は、単音で演奏した場合でも、その音の高さ（ピッチ）に相当する基音（基本波）と複数の倍音（高調波）の周波数が同時に発せられる。倍音の周波数は、通常、基音の整数倍であるが、ピアノにおいては、高次の倍音の周波数が基音の整数倍にならないことが知られている。
【０００５】
この倍音のパワーの基音のパワーに対する比率は、楽器によって異なり、また、同一の楽器でも音の高さによって異なり、打鍵（発音）後の時間とともに変化し、さらに、厳密には、同一の楽器の同一の音であっても、打鍵（発音）時のタッチ（タンギング等）によって、このパワー比は、演奏の度に毎回異なるものである。
【０００６】
単音であっても上記の通りであるが、複数の音が同時に演奏された場合は、さらに問題は複雑になる。同時に演奏された複数の音のいずれかの音の基音、または、倍音同士が近い周波数になると、位相による打ち消しあい、または、重ね合わせで、基音や倍音のパワーは変化してしまう。
【０００７】
自動採譜における楽器音のピッチ抽出は、楽器音の基音の周波数を検出することにあるが、このように基音と倍音のパワー比率はさまざまな条件により変化するため、基音と倍音の判断が容易にはつかなくなり、これが自動採譜を難しくしている。
【０００８】
このような倍音を除去するための方法として、例えば、下記特許文献１に示す構成がある。同文献の構成では、このパワー比が楽器毎にほぼ決まっているという前提のもとに、ある注目周波数よりも高い周波数（比較周波数）が注目周波数の倍音かどうか判断し、倍音と判断したときには比較周波数の音量を一定の割合で削減し、また、場合によっては、これを注目周波数の音量に上乗せするという方法をとっている。
【特許文献１】特開２０００−２９３１８８
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、もし、パワー比が楽器毎にほぼ決まっているのならば、この方法が有効であるが、実際は多くの楽器で、その音域によりパワー比は大きく異なる。よって、一定の割合では、音域によっては倍音が正しく除去できないことが予想される。
【００１０】
また、この従来構成においては、比較周波数（倍音）の音量の一定の割合を削減しているが、比較周波数には同時に鳴っている他の音の倍音の音量も含まれている可能性があるため、比較周波数の音量の一定の割合ではなく、注目周波数（基音）の音量に比較周波数の倍音の次数に応じた比率をかけた音量を比較周波数の音量から削減すべきである。
【００１１】
本発明は、以上のような問題に鑑み創案されたもので、単一楽器によって演奏された音響信号から楽譜を自動採譜する、さらに単音演奏のみでなく、同時に複数の音が演奏される複音演奏の場合も含んで、演奏された音響信号から楽譜を自動採譜する自動採譜装置を提供せんとするものである。
【００１２】
併せて、これらの装置をコンピュータ上に実現できる自動採譜用のコンピュータ・プログラムについても、提供する。
【課題を解決するための手段】
【００１３】
そのため本発明に係る自動採譜装置は、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
を有することを基本的特徴としている。
【００１４】
上記構成によれば、予め自動採譜の対象となる演奏に使われている楽器の基音に対する倍音のパワー比率を倍音パワー比検出手段により検出しておき、それらを上記記憶手段に記憶しておく。次に、上記音階音パワー検出手段により、入力手段から入力した音響信号から各音階音のパワーを検出する。その後倍音除去手段により、これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を減算し、さらに実際に減算されたパワーを基音のパワーに加算する。以上の処理を音の低い音階音から順にすべての音階音について実行する。そして、音符情報検出手段により、閾値以上のパワーを持つ音階音を抽出することにより音符情報を検出することになる。
【００１５】
上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力するようにすると良い。
【００１６】
本発明の上記構成で前提としている演奏情報は、単一楽器による演奏であり、単音のみならず、同時に複数の音が演奏される複音であっても構わない。
【００１７】
自動採譜に先立ち、予め、その楽器で幾つかの音階音を演奏してもらう。その演奏の結果から基音に対する倍音のパワー比率を測定する。この倍音のパワー比は、打鍵（発音）直後は変化が激しく、減衰過程に入ると安定する。そのため、このパワー比はこの減衰過程で取ることが望ましい。
【００１８】
パワー比は自動採譜する楽器の音域のすべての音階音について測定することが望ましいが、それでは準備に時間がかかってしまう。そもそも、このパワー比は楽器の音色を表しているものであり、楽器の音色は音の高さの変化とともに滑らかに変化するものである。そこで、請求項２の構成では、この楽器の音域の内、離散的な幾つかの音（例えば長３度の音程毎の音階音）でパワー比を測定し、その間の音については上下のパワー比から補間して生成する。
【００１９】
さらに、請求項３の構成は、請求項１記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【００２０】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項１に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００２１】
請求項３のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出手段と、
その倍音パワー比を記憶しておく記憶手段と、
上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出手段と、
これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去手段と、
該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出手段と
して機能させることを特徴とする自動採譜用プログラムである。
【００２２】
さらに、請求項４の構成は、請求項２記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、コンピュータに上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項２に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００２３】
請求項４のより具体的構成は、上記倍音パワー比検出手段による基音に対する倍音のパワー比率を検出する場合に、倍音のパワー比率を幾つかの音階音について用意しておき、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成して、上記音階音についての倍音のパワー比率として出力することを特徴とする自動採譜用プログラムである。
【００２４】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【００２５】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【００２６】
尚、請求項３又は４記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能（コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い）によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【００２７】
これは、請求項１及び２に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【００２８】
本発明の請求項１及び請求項２記載の自動採譜装置、並びに請求項３及び４記載の自動採譜用プログラムによれば、単音のみならず、同時に複数の音が演奏される場合でも、単一楽器による演奏された音響信号から楽譜を自動採譜することが可能であるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の実施の形態を図示例と共に説明する。
図１は、本発明の自動採譜装置の、ある実施例における全体のブロック図である。
【００３０】
同図に示す装置は、音響信号を入力する入力部１と、予め自動採譜の対象となる演奏に使われている楽器のサンプル入力音響信号の基音に対する倍音のパワー比率を検出する倍音パワー比検出部２と、その倍音パワー比を記憶しておく倍音パワー比記憶部３と、上記楽器から入力した音響信号から各音階音のパワーを検出する音階音パワー検出部４と、これら各音階音について、夫々が基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を、減算すると共に、実際に減算されたパワーを基音のパワーに加算する処理について、音の低い音階音から順にすべての音階音に対して実行する倍音除去部５と、該倍音除去手段による処理後に、閾値以上のパワーを持つ音階音を抽出し、音符情報を検出する音符情報検出部６と、上記音符情報の検出結果をファイル等に出力する検出結果出力部７とを有している。
【００３１】
上記入力部１は、音響信号受信部１０とＡ／Ｄ変換部１１とを有している。該音響信号受信部１０は、マイク等の機器で構成され、そこからアナログ信号を取り込む機能を有している。
【００３２】
Ａ／Ｄ変換部１１は、取り込んだアナログ信号をディジタル信号に変換する機能を有している。Ａ／Ｄ変換後のサンプリング周波数は、１１０２５Ｈｚ、量子化ビット数は１６ビットとする。
【００３３】
このディジタル信号は、倍音のパワー比を測定する場合は、倍音パワー比検出部２に送られ、また演奏音から採譜処理を行う場合は、音階音パワー検出部４に送られる。
【００３４】
該倍音パワー比検出部２は、図２のようなブロックから構成され、音量検出部２０とパワー比検出部２１とで構成される。
【００３５】
上記音量検出部２０では、入力されたディジタル信号の音量を測定する。
【００３６】
上記パワー比検出部２１では、入力されたディジタル信号をＦＦＴ演算し、基音に対する倍音のパワー比を測定する。
【００３７】
該倍音パワー比検出部２での処理は、Ａ／Ｄ変換後の波形サンプルが所定数溜まる毎に処理される。この所定数は、パワー比検出部２１のＦＦＴポイント数によって決まるが、より詳細にデータをとる場合は、ＦＦＴの窓をオーバーラップさせるため、例えば窓を３／４オーバーラップさせる場合、窓のシフト量は窓のサイズの１／４となり、倍音パワー比検出部２での処理も窓サイズの１／４のデータが溜まるたびに処理される。
【００３８】
この１回の処理の時間単位を１フレームと呼ぶことにする。本実施例では、倍音パワー比検出部２での窓のサイズ、つまりＦＦＴポイント数は、４０９６ポイントとする。つまり、窓のサイズは約３７２ｍｓとなり、３／４オーバーラップさせる場合、１フレームは、約９３ｍｓとなる。
【００３９】
音量検出部２０での音量測定について次に説明する。
【００４０】
音量検出部２０では、ＦＦＴの窓サイズの波形データを受け取り、その音量を測定する。
【００４１】
音量の測定は、波形の振幅の二乗の総和の平方根を取ることにより計算する。すなわち、ｉ番目の波形サンプルをＷ（ｉ）とすると、音量Ａｍｐは、下記数１式により、計算される。
【００４２】
【数１】
0004672474.tif 000002
ここで、Ｎは音量計算する波形のサンプル数であり、Ｎ＝４０９６である。
【００４３】
次に、パワー比検出部２１での処理を説明する。パワー比検出部２１は、ＦＦＴの窓サイズの波形データを受け取り、基音に対する倍音のパワー比を測定する機能を有している。
【００４４】
基音の音高は、自動採譜する音域の中から離散的に選択された幾つかの音高であり、これは外部からパワー比検出部２１に指示される。
【００４５】
この指示された音高を基音とし、基音のパワーに対する２倍音から８倍音までの倍音のパワー比を、パワー比検出部２１では測定する。
【００４６】
ＦＦＴ演算の結果得られるパワースペクトルは、サンプリング周波数をＦＦＴポイント数で割った値、つまり、本実施例の場合、約２．７Ｈｚの間隔で測定される。
【００４７】
つまり、この約２．７Ｈｚの整数倍の周波数のパワーが測定されるわけで、今求めたい基音や倍音の周波数にちょうど一致する周波数が測定されるわけではない。
【００４８】
そこで、基音、倍音の周波数の上下５０セントの範囲にあるパワースペクトルの内、パワーが最大のスペクトルのパワーを基音、倍音のパワーとする。これにより、多少（半音の半分まで）ピッチが揺らいでも正確にパワー比を測定できるため、本発明の自動採譜装置は、トランペット等の安定したピッチで演奏することが難しい楽器にも対応できる。
【００４９】
音高が与えられたとき、その音高ＮＮ（Ｃ４：中央のド＝６０）から周波数Ｆｒｅｑ（Ｈｚ）への変換は、以下の数２式で行うことができる。
【００５０】
【数２】
0004672474.tif 000003
【００５１】
上記式の、４４０はＡ４の周波数である。これにより、例えばＣ３（ノートナンバー４８）の周波数は、１３０．８Ｈｚと計算される。
【００５２】
上記式を変形して、逆に周波数からＣｅｎｔは、下記式数３で計算できる。
【００５３】
【数３】
0004672474.tif 000004
【００５４】
従って、Ｃ３の上下５０セントの周波数は、１２７．０Ｈｚから１３４．６Ｈｚと計算できる。
【００５５】
これをＦＦＴのスペクトル間隔で割ることにより、Ｃ３の基音のパワーは、４７番目から５０番目のスペクトルのパワーから最大値を検索して求めることになる。
【００５６】
図３は、ある楽器（電子ピアノ）のノートナンバー４８の音を弾いた時の基音と倍音のパワーの時間変化を、また図４は、その音量の時間変化を、夫々表したグラフである。
【００５７】
パワー変化の図３のグラフの縦軸は、パワーで横軸は倍音の次数（Ｉが基音、ＩＩが２倍音、…）、奥行き方向が時間変化で、時間は手前から奥へと進む（数字はフレーム数）。このグラフのように打鍵後音量がピークになる６フレームまでの間（アタック区間）は、各倍音のパワーが大きく変化しており、この区間では基音に対する倍音のパワー比も安定していない。
【００５８】
その後、８フレーム辺りから各倍音のパワーは安定しているので、これ以降にパワー比を測定することが望ましい。なお、楽器によってはアタック区間を過ぎても倍音のパワーが安定しない場合もあるので、ある範囲で平均を取ってパワー比を求めた方がよい（図４参照）。
【００５９】
アタックを検出し、パワー比を何フレームか測定して平均し、その音階音のパワー比を倍音パワー比記憶部３に記憶させ、次の音階音に移る一連の流れをフローチャートにしたのが、図５である。
【００６０】
同図を用いてパワー比を測定する処理の流れを、以下説明する。まず、ステップＳ１０１で各変数に初期値を代入する。
【００６１】
各変数の意味は以下の通りである。
Note        基音の音高
Attack      アタック検出したかどうか
Record      パワー比を保存したかどうか
Silence     無音になったと判断したかどうか
AttackCt    アタック検出した回数
RecordCt    パワー比を測定した回数
SilenceTime 無音になったと判断した時刻
パワー比    ２倍音から８倍音までの倍音のパワー比
PASSNUM     アタック検出後、パワー比の測定を始めるまで読み飛ばすフレーム数
RECNUM      パワー比を測定するフレーム数
NOTEADD     パワー比を計算する音高の間隔
【００６２】
まず、Noteにパワー比を測定する最初の音高をセットする。後述する図６のような結果を得る場合には、最初の音高として４８をセットする。
【００６３】
Attack、Record、Silenceの各変数は、ブール変数で、true（＝１）とfalse（＝０）の２つの値を持つ変数である。各変数はこれらを検出していないことを示すfalseの値（＝０）をセットする。
【００６４】
AttackCt、RecordCt、SilenceTimeの変数も、初期値０をセットする。
【００６５】
パワー比は、図６では８倍音まで測定しているが、この場合、要素数７の配列となる。基音を基準（＝１）とした倍音のパワー比を測定しているので、基音のパワー比は必要ないため、８倍音まで測定する場合、要素数は７となる。これも、後に加算して平均を測定するため、初期値０をセットしておく。
【００６６】
上述のPASSNUM、RECNUM、NOTEADDは、予め値を決めておく固定値で、今回の例では、PASSNUM＝２、RECNUM＝８、NOTEADD＝４としている。
【００６７】
PASSNUMがこのように小さい値なのは、今回広い範囲の音域のパワー比を測定するため、特に高い音では音の立ち上がり・減衰が早いため、このような小さな値にしてある。
【００６８】
以上のように初期値がセットできたら、ステップＳ１０２に進む。ステップＳ１０２では、すでにアタックが検出されたかどうかを、Attack変数でチェックする。
【００６９】
まだアタックが検出されていない（ステップＳ１０２；Ｙｅｓ）ということは、本装置がまだ音の打鍵を検出していないということであるので、ユーザに現在設定されているNoteの音高の鍵盤を弾くように指示する（ステップＳ１０３）。該指示は、本装置の表示装置、または、コンピュータのディスプレイ等を用いて行う。
【００７０】
既にアタック検出している場合（ステップＳ１０２；Ｎｏ）は、この指示は出す必要はない。
【００７１】
次に、離鍵の指示を出すかどうかを、AttackとRecordの変数でチェックする（ステップＳ１０４）。既にアタック検出済みで、パワー比の保存も完了しているならば（ステップＳ１０４；Ｙｅｓ）、これ以上押鍵しておく必要はないので、離鍵の指示を出す（ステップＳ１０５）。
【００７２】
離鍵の指示も、本装置の表示装置、または、コンピュータのディスプレイ等を用いて行う。
【００７３】
次に、Ａ／Ｄ変換後の波形サンプルが、ＦＦＴの窓サイズ溜まるまで待つ（ステップＳ１０６）。溜まったら（ステップＳ１０６；Ｙｅｓ）、ＦＦＴ演算を行い、音量とパワー比を測定する（ステップＳ１０７）。音量、パワー比の測定方法は、先に述べた通りである。
【００７４】
次のステップＳ１０８では、求めた音量が閾値を上回っているかどうかをチェックする。閾値を上回っていない場合（ステップＳ１０８；Ｎｏ）は、ステップＳ１２１以降の無音の判断の処理にジャンプする。
【００７５】
ステップＳ１２１以降の無音の判断の処理は、パワー比を所定回数測定して、パワー比の平均が求まってから、次の音符に移る前に、完全に無音になっていることを判断するための処理である。
【００７６】
今は、まだアタックの検出も、パワー比の保存も行われていないので、ステップＳ１２１とステップＳ１２３は、どちらもＮｏの分岐に進み、ステップＳ１１１へと進む。無音の判断処理の詳細は、後ほど説明する。
【００７７】
アタックを検出していない、今の段階では、ステップＳ１１１もＮｏの分岐に進み（ステップＳ１１１；Ｎｏ）、ステップＳ１１８でもＮｏとなり、当然、まだ最終音ではないので、ステップＳ１２０から、ステップＳ１０２へと戻る。
【００７８】
このようにして、再びステップＳ１０６でＦＦＴの窓サイズまでデータが溜まるまで待ち、ステップＳ１０７で音量とパワー比を測定する。
【００７９】
そのうちに、ユーザが打鍵を行うので、音量が閾値を上回り、ステップＳ１０８がＹｅｓの分岐に進み、ステップＳ１０９が実行される。
【００８０】
ステップＳ１０９では、音量が閾値を上回ったので、アタック検出済みフラグAttackをtrueにセットする。
【００８１】
また、次のステップＳ１１０で、アタック検出したばかりなので、無音検出済みフラグもfalseにセットしておく。
【００８２】
ステップＳ１１１では、アタック検出後、パワー比の測定を開始するまでに読み飛ばす処理を行う。つまり、アタックを検出済みで、まだパワー比の保存は完了していないとき、アタック検出後の回数がPASSNUM（今の例では２）以下ではＮｏの分岐に進み（ステップＳ１１１；Ｎｏ）、ステップＳ１１８に進む。
【００８３】
ステップＳ１１８で、アタックは検出済みであるので、ステップＳ１１９で、アタック検出後の回数がインクリメントされる。
【００８４】
再びステップＳ１０２からのループが行われ、アタック検出後の回数AttackCtがPASSNUMを上回ったとき（ステップＳ１１１；Ｙｅｓ）、処理は、ステップＳ１１２へと進む。
【００８５】
ステップＳ１１２では、実際のパワー測定に入る。
【００８６】
始めのステップＳ１０１で０に初期化しておいたパワー比のバッファに各倍音（この例では２倍音から８倍音）の基音のパワーに対する比率を加算していく（ステップＳ１１２）。最初に０で初期化して加算していくのは、後に平均を計算するためである。
【００８７】
次のステップＳ１１３では、パワー比録音の回数をインクリメントする。
【００８８】
録音の回数が、RECNUM（今の例では８）以上になったら（ステップＳ１１４；Ｙｅｓ）、パワー比の平均を計算する（ステップＳ１１５）。
【００８９】
パワー比の平均は、先に述べたとおり、これまでのパワー比がパワー比のバッファに加算されているので、録音回数RECNUMで除算することにより平均が求まる。
【００９０】
平均されたパワー比を、上記倍音パワー比記憶部３に保存する（ステップＳ１１６）。
【００９１】
以上で、この音高に対するパワー比の測定が完了したので、録音済みフラグRecordをtrueにセットする（ステップＳ１１７）。
【００９２】
次に、ステップＳ１２１以降の録音後の無音の判断処理について説明する。
【００９３】
前の音が残っている状態で次の音の録音を始めてしまうと、次の音のパワースペクトルに前の音の成分も混在してしまうため、正しくパワー比を求めることができない。特にピアノのような楽器では、離鍵後もピアノの内部で残響音が残るため、十分に無音になったと判断してから、次の音の録音を始めなくてはならない。
【００９４】
この処理は、ステップＳ１２１からステップＳ１２４で行っている。録音が完了するとRecordフラグがtrueになる(ステップＳ１１７）ので、ステップＳ１０４でＹｅｓに進み、ステップＳ１０５で、離鍵の指示がされる。この指示を受けて、ユーザは離鍵する。
【００９５】
すると、そのうちに音量が下がり、ステップＳ１０８で音量が閾値以下になる。
【００９６】
音量が閾値以下になるまでの間は、ステップＳ１１０でSilenceがfalseにセットされ、録音済みなのでステップＳ１１１はＮｏに進み、ステップＳ１１９でアタック検出後の回数のみがインクリメントされる。
【００９７】
なお、この例では、アタック検出と無音判断のための音量閾値が同じ値にしてあるが、これらを別にするようにしてもよい。
【００９８】
ステップＳ１０８で、音量が閾値以下になったら、ステップＳ１２１に進む。ステップＳ１２１では、まず、アタック検出済みかどうかがチェックされ、一度でも無音と判断したかどうか（Silenceフラグ）がチェックされる。Attackフラグのチェックは、打鍵前の無音状態でもこのステップが実行されるために入れてある。
【００９９】
無音の判断Silenceがfalseの場合（ステップＳ１２１；Ｙｅｓ）は、ここでtrueにセットし、今の時刻をSilenceTime変数にミリ秒の単位で保存しておく（ステップＳ１２２）。
【０１００】
次に、ステップＳ１２３で１秒間以上無音が続いていることをチェックする。アタック検出済みで、録音が完了していて、一度以上無音と判断していて、最初の無音の判断から１０００ミリ秒、つまり１秒が経過していたら(ステップＳ１２３；Ｙｅｓ）、ステップＳ１２４に進む。
【０１０１】
ステップＳ１２４に進んだ場合は、この音高に対するすべての処理の完了を意味し、音高に次の音をセットし、他のすべての変数を初期化する。
【０１０２】
無音の判断中、一度でも音量が閾値を上回ると、ステップＳ１０８は、Ｙｅｓに分岐し、ステップＳ１１０で、Silenceがfalseに戻されてしまう。
【０１０３】
すると、次に音量が閾値を下回ったときに、ステップＳ１２２に入り、無音の判断開始時間が再設定される。
【０１０４】
これで、音量が閾値を下回る状態が１秒以上続くことを判断でき、完全に無音となったことが判断できる。
【０１０５】
このように、連続して１秒以上無音になることを判断するのは、ピアノ等の楽器では、音量が上下しながら減衰していくため、一度閾値を下回っても、再び閾値以上になることがあるからである。
【０１０６】
最後に、ステップＳ１２０で音高が最終音を上回ったら、処理を終了する。
【０１０７】
このようにして、すべての測定する音階音についてのパワー比が求まったら、倍音パワー比記憶部３で外部の記憶装置（フレキシブルディスク等）にパワー比を保存しておく。
【０１０８】
これは、パワー比の測定は自動採譜の度に行う必要はなく、同一音のパワー比がそれほど変化しない限り、つまり、原則的にはある楽器については一度だけ行えばよいと考えられるからである。すなわち、倍音のパワー比は、自動採譜に先立って測定を行ってもよいし、以前測定して保存しておいたものから読み込んで使用してもよい。
【０１０９】
図６に、このようにして測定したある楽器（電子ピアノ）の倍音パワー比を示す。この例では、Ｃ３からＣ６の３オクターブの音域で、長３度（半音４個分）の音程差毎にパワー比を測定した。
【０１１０】
この図のように、倍音のパワー比は音の高さの変化と共に、ほぼ滑らかに変化しているので、測定を行わなかった、例えばノートナンバー４９から５１の音高のパワー比も、ノートナンバー４８や５２のパワー比に似た形になることが予想される。よって、この間のパワー比は、近い音高のパワー比を使うか、または、上下の音高のパワー比を使って、各倍音のパワー比がそれらの中間のパワー比になるように、比例計算したものを使うとよい。
【０１１１】
倍音のパワー比が準備できたら、自動採譜が可能になる。自動採譜の処理について次に説明する。
【０１１２】
Ａ／Ｄ変換部１１でディジタル信号化された楽器の演奏音は、音階音パワー検出部４で各音階音のパワーが測定される。
【０１１３】
音階音パワー検出部４での各音階音のパワー測定は、倍音パワー比検出部２で使った方法とまったく同じ方法で測定する。つまり、各音階音の基本周波数の上下５０セントの範囲におけるパワースペクトルのパワーの最大値を検出する。
【０１１４】
ただし、より広い音域で正確にパワーを測定するため、ＦＦＴポイント数は８１９２とし、窓のオーバーラップは１５／１６とする。このとき、周波数分解能は約１．３Ｈｚ、時間分解能（＝１フレームタイム）は約４６ｍｓとなる。これは、およそ４分音符＝１６３のテンポの曲の３２分音符の長さに相当する。
【０１１５】
検出する音階音の音域は、自動採譜する楽器の音域に合わせて設定する。もちろん、採譜する曲の音域によって、さらに限定してもよい。
【０１１６】
ここでは、仮に、Ｃ３からＣ６の３オクターブの範囲とする。つまり、各フレーム時間毎に上記パラメータで１度ＦＦＴ演算を行い、その結果から、Ｃ３からＣ６の各音階音（Ｃ３、Ｃ＃３、Ｄ３、…、Ｂ５、Ｃ６）のパワーを検出する。
【０１１７】
各音階音のパワー検出結果の例を図７に示す。図７の上段は波形で、下段が各音階音のパワーを濃淡で表したものである。
【０１１８】
各音階音のパワーが検出されたら、先に保存しておいたこの楽器の各音階音の基音に対する倍音のパワー比を使って、倍音成分を除去する。この手順を図８にフローチャートで示す。
【０１１９】
Ｎは採譜する音階音であり、今の場合Ｃ３（４８）からＣ６（８４）の範囲となる。ｈは倍音の次数で、２から８まで変化させる。ＨはＮのｈ倍音の音高で、ＨがＣ６を超えている場合は、以下の処理をしない。Ｐ（Ｎ）は、音階音Ｎのパワーで、Ｒ（Ｎ，ｈ）は、音階音Ｎのｈ倍音のパワー比である。
【０１２０】
まず、ステップＳ２０１で、変数Ｎに採譜する音域の最低音の音高をセットする。今の例では、Ｃ３からＣ６が採譜する音域なので、最低音の音高は４８である。
【０１２１】
次に、ステップＳ２０２で、変数ｈに２を代入する。変数ｈは、倍音を示す数で、今は２倍音から８倍音まで処理を行うため、まず、２をセットする。
【０１２２】
次に、ステップＳ２０３で、変数ＨにＮのｈ倍音の音階音をセットする。今は、４８の２倍音の音高、６０がセットされる。
【０１２３】
Ｎのｈ倍音の音高は、まず基準となるＮの音高を周波数に変換し、その周波数をｈ倍した周波数を求め、それをまた音高に変換することにより求める。
【０１２４】
Ｈが採譜する音域を超えている場合（ステップＳ２０４；Ｎｏ）は、その音階音のパワーは計算していないため、後の処理ができない。
【０１２５】
Ｈが採譜する音域内の場合にのみ倍音除去の処理を行う（ステップＳ２０４；Ｙｅｓ）。
【０１２６】
次のステップＳ２０５からステップＳ２１１が、実際の倍音除去の処理である。
【０１２７】
ステップＳ２０５では、まず、音高Ｎのパワーに、あらかじめ測定して保存してある、音高Ｎのｈ倍音のパワー比を掛け算する。これにより、基音Ｎのｈ倍音の想定される倍音のパワーが計算される。計算の結果を変数ＰＨに保存する（ステップＳ２０５）。
【０１２８】
次のステップＳ２０６で、後で使用するため、Ｎのｈ倍音であるＨの音高の現在のパワーを変数ＰＯに保存しておく（ステップＳ２０６）。
【０１２９】
次にステップＳ２０７で、Ｎのｈ倍音のＨのパワーからＰＨを減算する。ＰＨはｈ倍音の想定される倍音のパワーであり、これを引き算することで、倍音成分が除去される。
【０１３０】
ただし、パワーはマイナスの値になることはないので、ステップＳ２０８とステップＳ２０９で、マイナスになってしまった場合は、０にしておく。
【０１３１】
次に、ステップＳ２１０で、保存しておいた以前のＮのｈ倍音、ＨのパワーＰＯから、現在のＨのパワーＰ（Ｈ）を引く。これにより、実際に減算されたパワーの値がＰＤに保存される。
【０１３２】
このＰＤの値をＮのパワーに加算する（ステップＳ２１１）。これは、特にピアノの低音域のように、基音のパワーが倍音に比べて小さい音でも検出できるように、その倍音の成分を基音に加算してあげようという考えである。
【０１３３】
以上が倍音除去の処理であり、次の倍音に進めるために、ステップＳ２１２でｈをインクリメントする。
【０１３４】
ｈが８以下の時（ステップＳ２１３；Ｙｅｓ）は、ステップＳ２０３に戻って倍音除去の処理を繰返し、８を上回ったら（ステップＳ２１３；Ｎｏ）、ステップＳ２１４に進む。
【０１３５】
ステップＳ２１４では、次の音階音を処理するために、Ｎをインクリメントする。
【０１３６】
ステップＳ２１５では、Ｎが採譜する範囲かどうか調べ、まだ続ける場合（ステップＳ２１５；Ｙｅｓ）は、ステップＳ２０２に戻って、ｈを２に初期化する。
【０１３７】
Ｎが採譜する範囲を超えたら（ステップＳ２１５；Ｎｏ）、処理を終了する。  以上のように、音階音Ｎのパワーに、音階音Ｎのｈ倍音のパワー比をかけた値を、ｈ倍音のパワーＰ（Ｈ）から減算し、減算が行われた場合、その値だけ音階音ＮのパワーＰ（Ｎ）に加算している。
【０１３８】
このようにして、倍音を除去し、その分を基音に上乗せした各音階音のパワーを図９に示す。
【０１３９】
後は、この倍音除去後の各音階音のパワーから、ある閾値以上のパワーを持つ部分を抜き出し、これらから音符情報を生成し、出力する。
【０１４０】
閾値は、例えば、全音階音の全フレームにおけるパワーの最大値を検出し、これにある値、例えば０．３をかけた値とする。音符の検出具合に応じて、ユーザがこの比率を設定するようにしてもよい。
【０１４１】
音符検出処理のフローチャートを図１０に示す。
【０１４２】
まず、ステップＳ３０１では、全フレーム、全音階音のパワーの最大値が計算され、変数ＰＭに代入される。
【０１４３】
ＰＭに代入する値は、パワーの最大値ではなく、パワーの平均値としてもよい。この場合には、次のステップＳ３０２における係数０．３の値をより大きな適当な値にすべきである。
【０１４４】
ステップＳ３０２では、音符検出の閾値が決定される。閾値は、ＰＭにある係数（この例では０．３）を掛けた値で計算される。
【０１４５】
閾値が求まったら、音符の検出処理に入る。
【０１４６】
ステップＳ３０３で、まず、採譜する音高の初期値として、採譜する音域の最低音をセットする。
【０１４７】
次にステップＳ３０４で採譜処理に使う変数を初期化する。Ｏｎは、音符の鳴り始め（ノート・オン）を表すブール変数で、最初はfalseにセットする。ｐｍは、検出している音のパワーの最大値で、最初は０を代入する。
【０１４８】
ステップＳ３０５では、別の変数ｆを０に初期化する。ｆは、フレームの番号ある。
【０１４９】
次のステップＳ３０６で、採譜する音階音Ｎのｆ番目のフレームのパワーを変数Ｐに代入する。Ｐが閾値以上で、かつ、Ｏｎフラグがまだfalseの場合（ステップＳ３０７；Ｙｅｓ）、次のステップＳ３１４に進む。
【０１５０】
ステップＳ３１４では、Ｏｎフラグをtrueにし、音符検出の開始フレームを表す変数ＦＢに現在のフレーム番号ｆを代入し、この音符のパワーを表すｐｍに現在のパワーＰを代入する。
【０１５１】
ステップＳ３１５からステップＳ３１７は、ｐｍの更新処理であり、Ｏｎフラグがtrue、つまり音符を検出し始めたら（ステップＳ３１５；Ｙｅｓ）、現在のパワーＰがｐｍより大きいかどうかチェックし（ステップＳ３１６）、Ｐがｐｍより大きければｐｍをＰで更新する（ステップＳ３１７）。
【０１５２】
ステップＳ３１８で、現在のフレーム番号ｆをインクリメントし、ステップＳ３１９で、ｆが総フレーム数未満の時は（ステップＳ３１９；Ｙｅｓ）、ステップＳ３０６に戻り、繰り返す。ｆが総フレーム数以上の時は（ステップＳ３１９；Ｎｏ）、ステップＳ３２０に進み、検出する音階音Ｎをインクリメントする。
【０１５３】
ステップＳ３２１で、Ｎが採譜する音域内ならば（ステップＳ３２１；Ｙｅｓ）、ステップＳ３０４に戻って、各変数を初期化する。Ｎが音域外になったら（ステップＳ３２１；Ｎｏ）、処理を終了する。
【０１５４】
ステップＳ３０８からステップＳ３１３について説明する。
【０１５５】
一度音符を検出し始めると、ステップＳ３１４で、Ｏｎフラグがtrueになるので、ステップＳ３０７は、Ｎｏに分岐する。
【０１５６】
ステップＳ３０８では、ノートオフを検出する。つまり、パワーＰが閾値未満かどうかチェックし、閾値未満になったら（ステップＳ３０８；Ｙｅｓ）、ステップＳ３０９に進む。
【０１５７】
ステップＳ３０９では、Ｏｎフラグをfalseにする。
【０１５８】
ステップＳ３１０では、検出した音符の継続時間ＦＬを、（ｆ−ＦＢ）で計算する。
【０１５９】
ステップＳ３１１で、継続時間ＦＬが３フレーム未満の時は（ステップＳ３１１；Ｎｏ）、ステップＳ３１３にジャンプする。継続時間ＦＬが十分に長いときは（ステップＳ３１１；Ｙｅｓ）、検出音符の確定となり、音符検出終了フレームＦＥに現在のフレーム番号ｆをセットし、１２７×ｐｍ／ＰＭで、ベロシティーＶｅｌを計算し、検出音高Ｎ、検出開始フレームＦＢ、検出終了フレームＦＥ、ベロシティＶｅｌを、検出音符情報として、バッファに保存する（ステップＳ３１２）。
【０１６０】
ステップＳ３１３は、検出した音符の継続時間が短すぎた場合の処理で、Ｏｎフラグをfalseに初期化し、パワーの最大値ｐｍも０に初期化して、次の音符検出に備える。
【０１６１】
以上のようにして、各音階音毎に、開始フレームから終了フレームまで、閾値以上で、ある程度の長さを持った音符が検出されていく。
【０１６２】
以上のように、すべての音階音Ｎについて、先頭のフレームから最後のフレームまで、そのフレームｆにおけるパワーＰ（Ｎ，ｆ）が閾値以上かどうかチェックし、閾値以上になったところ（ＦＢ）から閾値未満になったところ（ＦＥ）までを音符の継続時間として、その長さが３フレームに満たない短いデータは削除し、それ以上のものを検出音符として保存する。ｐｍは音符継続時間中の最大のパワーであり、これと全音階音の全フレームにおけるパワーの最大値ＰＭから音符のベロシティ（音の強さ）を計算する。
【０１６３】
図１０の例では、パワーの最大値からベロシティを決定しているが、パワーの平均値からベロシティを計算するようにしてもよい。
【０１６４】
上記図９の枠で囲まれている部分が、このようにして検出された音符である。検出した音符情報は、検出結果出力部７で発音時間順に並べ替えられ、ＳＭＦ（スタンダード・ミディ・ファイル）等の形式でファイルに出力される。または、この採譜装置で演奏できるようにしてもよい。
【０１６５】
以上詳述した本実施例構成では、予め自動採譜の対象となる演奏に使われている楽器の基音に対する倍音のパワー比率を幾つかの音階音について用意し、そのパワー比が存在しない音階音については、その音階音の上または下、もしくは上下両方の音階音でパワー比が存在する音階音のパワー比を使って補間生成し、入力した音響信号から各音階音のパワーを検出し、これら各音階音について、それぞれが基音であると仮定した場合の倍音の音階音のパワーから、基音のパワーに基音の音階音に対する各倍音のパワー比をかけた値を減算し、さらに実際に減算されたパワーを基音のパワーに加算し、以上を音の低い音階音から順にすべての音階音について実行した後に、閾値以上のパワーを持つ音階音を抽出することにより音符情報を検出している。
【０１６６】
従って、単音演奏のみでなく、同時に複数の音が演奏される複音演奏の場合であっても、単一楽器によって演奏された音響信号から、楽譜を自動採譜することができるようになる。
【０１６７】
尚、本発明の自動採譜装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１６８】
本発明の自動採譜装置及びそれらを実現できるプログラムは、自動採譜装置、音楽データベース作成、音楽構造等の研究、自動伴奏システム、セッションシステム、音楽レッスンシステムなど、種々の分野で利用可能である。
【図面の簡単な説明】
【０１６９】
【図１】本発明の自動採譜装置の、ある実施例における全体のブロック図である。
【図２】倍音パワー比検出部２の構成を示すブロック図である。
【図３】電子ピアノのノートナンバー４８の音を弾いた時の基音と倍音のパワーの時間変化を表したグラフである。
【図４】その音量の時間変化を表したグラフである。
【図５】アタックを検出し、パワー比を何フレームか測定して平均し、その音階音のパワー比を記憶させ、次の音階音に移る一連の流れを示すフローチャートである。
【図６】電子ピアノの倍音パワー比を示すグラフである。
【図７】各音階音のパワー検出結果の例を示すグラフである。
【図８】倍音成分の除去の手順を示すフローチャートである。
【図９】倍音除去後、その分を基音に上乗せした各音階音のパワーを示すグラフである。
【図１０】音符検出処理の手順を示すフローチャートである。
【符号の説明】
【０１７０】
１      入力部
２      倍音パワー比検出部
３      倍音パワー比記憶部
４      音階音パワー検出部
５      倍音除去部
６      音符情報検出部
７      検出結果出力部
１０      音響信号受信部
１１      Ａ／Ｄ変換部
２０      音量検出部
２１      パワー比検出部
【図１】
0004672474.tif 000005
【図２】
0004672474.tif 000006
【図３】
0004672474.tif 000007
【図４】
0004672474.tif 000008
【図５】
0004672474.tif 000009
【図６】
0004672474.tif 000010
【図７】
0004672474.tif 000011
【図８】
0004672474.tif 000012
【図９】
0004672474.tif 000013
【図１０】
0004672474.tif 000014