(57)【要約】【課題】  コード検出を行いながらも、音響信号と検出されたコード演奏との聴き比べのために、１回の操作で両方の音量が調整できる構成を提供する。【解決手段】  入力部１から入力された音響信号から、最終的にベース音・コード名などまで検出し、表示部９に表示させ、さらに演奏部１０により、入力音響信号と検出されたコードが演奏されると共に、調整部１１により、両出力につき、一回操作するだけで、全体の音量を変化させずに、その音量バランスが調整できるようにし、検出結果が正しいか否かが、即判定できようにする。【選択図】  図１０
2010025972.tif 000002
【特許請求の範囲】
【請求項１】
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたコード名乃至コード構成音、及び／又はベース音を表示する表示手段と、
入力音響信号及び決定された上記コードを演奏する演奏手段と、
該演奏手段の両出力の音量バランスを調整する調整手段と、
上記コード名乃至コード構成音を変更する変更手段と、
上記変更手段によるコード名乃至コード構成音の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、少なくとも表示手段にコード名乃至コード構成音を再表示させる再設定手段と
を有することを特徴とするコード名検出装置。
【請求項２】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたコード名乃至コード構成音、及び／又はベース音を表示する表示手段と、
入力音響信号及び決定された上記コードを演奏する演奏手段と、
該演奏手段の両出力の音量バランスを調整する調整手段と、
上記コード名乃至コード構成音を変更する変更手段と、
上記変更手段によるコード名乃至コード構成音の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、少なくとも表示手段にコード名乃至コード構成音を再表示させる再設定手段と
して機能させることを特徴とするコード名検出用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード名検出装置及びコード名検出用プログラムに関する。
【背景技術】
【０００２】
ポピュラー系の音楽においてコードは非常に重要な要素であり、このようなジャンルの音楽を小編成のバンドで演奏する場合には、演奏する個々の音符が書かれた楽譜は使用しないで、コード譜またはリードシートと呼ばれるメロディとコード進行のみが書かれた楽譜を使用することが通常である。従って市販のＣＤ等の曲をバンドで演奏するためには曲のコード進行を採譜する必要があるが、この作業は特別な音楽的知識を有する専門家のみが可能であり、一般の人には不可能であった。そこで、市販のパーソナルコンピュータなどを使用して、演奏音が収録された音楽ＣＤ等の音源から出力される音楽音響信号に基づいて、コード名を検出する自動採譜装置が求められていた。
【０００３】
このような音楽音響信号からコードを検出する装置として、下記特許文献１の構成がある。同文献の構成では、パワー・スペクトルの計算結果から基本周波数候補を抽出し、この基本周波数候補から倍音と思われるものを除去して音符情報を検出し、この音符情報から和音を検出している。
【０００４】
同様に音楽音響信号からコードを検出する装置として、後述する特許文献２の構成がある。該特許文献２の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行い、各音階音のレベルを検出し、検出したレベルのうちオクターブ内で同じ音階関係にあるレベル同士を積算して、その積算レベルのうち値が大きい所定数を使って和音検出をしている。この方法では音響信号に含まれる個々の音符情報を検出しないので、後述する特許文献１にあげるような問題は発生しない。
【特許文献１】特許第２８７６８６１号
【特許文献２】特許第３１５６２９９号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、該特許文献１に示す構成では、上記倍音を除去する作業は、楽器の種類による倍音構造の違い、打鍵強さによる倍音の出方の違い、時間による倍音のパワー変化、同じ周波数を倍音成分として持つ音同士の位相干渉の問題などから非常に困難であることが知られている。即ち、この音符情報を検出するという工程が、多くの楽器や歌唱などが混じった一般の音楽ＣＤなどの音源で必ずしも正しく機能するとは考えられない。
【０００６】
他方、音楽音響信号からコードを検出する上記特許文献２に示す構成では、各音階音のレベルをオクターブ内で同じ音階関係にあるもの同士、つまり１２の音名毎に積算してしまっているので、同じ構成音からなる複数の和音、例えばラ、ド、ミ、ソからなるＡｍ７とド、ミ、ソ、ラからなるＣ６という２つのコードを判別することができない。
【０００７】
また、この特許文献２の和音検出装置には、テンポや小節の検出機能はなく、和音検出は所定のタイミング毎に行うとなっている。つまり、あらかじめ曲のテンポを設定してそのテンポで発音するメトロノームに合わせて演奏するようなケースを想定しており、音楽ＣＤ等のような演奏後の音響信号に適用した場合、一定時間間隔毎のコード名は検出できるが、テンポや小節を検出していないので、コード譜またはリードシートと呼ばれているような各小節のコード名が書かれた楽譜のような形式に出力することはできない。
【０００８】
仮に曲のテンポを与えたとしても、一般的に音楽ＣＤに収録されている演奏のテンポは一定ではなく多少揺らぐため、正しく小節毎のコードを検出することはできない。
【０００９】
また、一定のテンポで発音されるメトロノームなどに合わせて正確なテンポで演奏することは初心者の演奏者にとっては非常に困難であり、一般的には演奏のテンポは揺らいでしまうのが通常である。
【００１０】
さらに、特許文献２の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行う構成が採用されているが、この構成の採用理由として、ＦＦＴ演算では低域で周波数分解が悪いことをあげている。しかし、入力音響信号をダウンサンプリングしてＦＦＴを行うことで低域でもある程度の周波数分解能を得ることは可能であるし、ディジタルフィルタリング処理では、フィルタ出力信号のレベルを求めるためにエンベロープ抽出部が必要になってしまうのに対し、ＦＦＴでは、ＦＦＴ後のパワーそのものが各周波数でのレベルを表しているためそのようなものは必要なく、ＦＦＴポイント数とシフト量のパラメータを適宜選ぶことで周波数分解能や時間分解能を自由に設定できるメリットもある。
【００１１】
仮に和音が検出できたとしても、検出された和音中に、７ｔｈ、９ｔｈなどの音程があると、実際には、３和音で良いのに、４和音のコードとして検出される可能性がある。また特徴的な音程の強度が比較的小さく、所望のコードが候補に入らないこともある。従って自動採譜ができるようになったとしても、採譜された結果にある程度ユーザ側で自由な設定ができる必要がある。
【００１２】
特別な音楽的知識を有する専門家でなくても、音楽ＣＤ等の複数の楽器音の混ざり、しかも演奏テンポに揺らぎのある音楽音響信号（オーディオ信号）から、個々の音符情報を検出することなしに、全体の響きから、コード名（和音名）を検出することができるコード名検出装置を提供すると共に、その結果においてユーザ側で自由に採譜結果に手を加えることができるようにする構成が望まれる。
【００１３】
また、そのような構成が提供された場合でも、実際には、検出したコードの演奏音と元の音響信号を同時に聴き比べ、検出されたコードやベース音が合っているかどうかを確認する必要がある。仮に上記の様なコード検出装置が提供されたとしても、音響信号と検出されたコード演奏を別々に聴き比べるか、せいぜい同時に鳴らしたとしても、音響信号とコード演奏の夫々の音量は別個に調整され、検出されたベース音やコードが正しいものか判別するのに、その音量調整にさえも手間を割いてしまい、簡単に聴き比べを行うことが困難であった。
【００１４】
本発明は、以上のような問題に鑑み創案されたもので、コード検出を行いながらも、音響信号と検出されたコード演奏との聴き比べのために、１回の操作で両方の音量が調整できる構成を提案し、併せて、これらの構成をコンピュータ上に実現できるコンピュータ・プログラムについても、提供する。
【課題を解決するための手段】
【００１５】
そのため本発明に係るコード名検出装置の構成は、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められる（ベース検出期間におけるベース検出音域の各音階音のレベルの平均的なレベルを計算することによって求められる）ベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められる（コード検出期間における各音階音の平均的なレベルを計算することによって求められる）コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたコード名乃至コード構成音、及び／又はベース音を表示する表示手段と、
入力音響信号及び決定された上記コードを演奏する演奏手段と、
該演奏手段の両出力の音量バランスを調整する調整手段と、
上記コード名乃至コード構成音を変更する変更手段と、
上記変更手段によるコード名乃至コード構成音の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、少なくとも表示手段にコード名乃至コード構成音を再表示させる再設定手段と
を有することを基本的特徴としている。
【００１６】
上記構成によれば、入力手段に入力された音響信号から所定の時間毎の各音階音のレベルを音階音レベル検出手段によって求め、上記ビート検出手段によって、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、同じくビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置（１拍目の位置）を検出することになる。
【００１７】
すなわち、入力された音響信号から所定の時間毎の各音階音のレベルを求め、この所定の時間毎の各音階音のレベルの変化から平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次にこのビート毎の各音階音のレベルの変化から拍子と小節線位置（１拍目の位置）を検出することになる。
【００１８】
また上記ベース音検出手段において、ベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名を、ベース音と各コード検出範囲における各音階音のレベルから、決定するものとする。
【００１９】
上記構成によれば、入力手段から入力された入力音響信号に対し、第１の音階音レベル検出手段により、所定の時間間隔で、まずビート検出に適したパラメータでＦＦＴ演算を行い、これにより所定の時間毎の各音階音のレベルを求め、ビート検出手段により、この所定の時間毎の各音階音のレベルの変化から平均的なビート間隔と各ビートの位置を検出する。次に、小節検出手段により、このビート毎の各音階音のレベルの変化から拍子と小節線位置を検出する。さらに、本発明のコード名検出装置は、第２の音階音レベル検出手段により、入力音響信号に対し先のビート検出の時とは異なる別の所定の時間間隔で、今度はコード検出に適したパラメータでＦＦＴ演算を行い、これにより所定の時間毎の各音階音のレベルを求める。そしてベース音検出手段により、この各音階音のレベルの内、低域側の音階音のレベルから各小節のベース音を検出し、コード名決定手段により、検出したベース音と各音階音のレベルから各小節のコード名を決定することになる。
【００２０】
また上記のように、ベース音検出手段でこのベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名をベース音と各コード検出範囲における各音階音のレベルから決定することになる。
【００２１】
以上のように、本発明のコード名検出装置の構成では、簡単な構成のみでビート検出という時間分解能が必要な処理（謂わばテンポ検出装置の構成と言って良い）と、和音検出という周波数分解能が必要な処理（上記テンポ検出装置の構成を基にさらに和音を検出できる構成）を同時に行うことができるようになる。
【００２２】
さらに、検出されたコード毎に、上記コード情報記憶手段に、それらの、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名が記憶される。そして、上記表示手段に、上記コード名決定手段で決定されたコード名乃至コード構成音やベース音が表示される。
【００２３】
このコード名乃至コード構成音やベース音が表示されただけでは、実際にその検出結果が正しいか否かが判定できない。そのために、本発明装置では、上記演奏手段により、入力音響信号及び決定された上記コードが演奏される構成とした。
【００２４】
ただし、上記の様な調整手段により、該演奏手段の両出力につき、その音量バランスが調整できるようにしている。すなわち、たとえばスライド抵抗の様な、１つの操作子で操作し、一回操作するだけで、全体の音量を変化させずに、これらの音量調整ができる様にしている。
【００２５】
両方の音を適切な音量の調整ができた状態で聴いたユーザは、その結果においてコード名が適切でない、或いはコード進行を聞いた時に不自然、と感じて訂正を加えたい時は、上記変更手段を使用して、ユーザ側で、コード名乃至コード構成音の変更（コード構成音の数の変更もできる）をすることができる。例えばコード構成音の数の変更の１つの例として、採用個数を変える場合、３和音、４和音のコントロールをすることが可能となるなどである。
【００２６】
そのような変更が行われた場合、上記再設定手段により、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照させて、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、少なくとも表示手段にコード名乃至コード構成音を再表示させるようにすることになる。
【００２７】
コード構成音数を変更させる場合に、コード情報記憶手段に記憶されたコード音階音強度やコード構成音を参照するのは、たとえば、構成音とする音階音の強度に閾値が設けられており、その閾値を増減することで、そのコード音階音強度の高い順に、コード構成音数を簡単に増減できるようになるからである。そのコード構成音数の変更によっては、コード名も変わるようになる。
【００２８】
さらに、２つ目の本発明の構成は、第１の発明の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【００２９】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、第１の発明の構成として規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００３０】
第１の発明のより具体的構成は、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたコード名乃至コード構成音、及び／又はベース音を表示する表示手段と、
入力音響信号及び決定された上記コードを演奏する演奏手段と、
該演奏手段の両出力の音量バランスを調整する調整手段と、
上記コード名乃至コード構成音を変更する変更手段と、
上記変更手段によるコード名乃至コード構成音の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、少なくとも表示手段にコード名乃至コード構成音を再表示させる再設定手段と
して機能させることを特徴とするコード名検出用プログラムである。
【００３１】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【００３２】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【００３３】
尚、第２の発明の構成の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能（コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い）によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【００３４】
これは、第１の発明の構成として規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【００３５】
本発明に規定されたコード名検出装置及びプログラムによれば、特別な音楽的知識を有する専門家でなくても、音楽ＣＤ等の複数の楽器音の混ざり、しかも演奏テンポに揺らぎのある音楽音響信号（オーディオ信号）から、個々の音符情報を検出することなしに、全体の響きから、コード名（和音名）を検出することができるというだけでなく、その判定結果を確認する際に、コード名乃至コード構成音やベース音が表示されただけでは、実際にその検出結果が正しいか否かが判定できないので、本発明構成では、上記演奏手段により、入力音響信号及び決定された上記コードが演奏される構成とし、しかも上記調整手段により、該演奏手段の音響信号及びコード演奏出力につき、その音量バランスが調整できるようにし、一回操作するだけで、全体の音量を変化させずに、これらの音量調整ができる様になるという優れた効果を奏することになる。また、そのような出力を聴いて、検出結果に満足できない場合は、ユーザ側で自由に採譜結果に手を加えることができるようになるという効果も有している。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施の形態を図示例と共に説明する。
【００３７】
（前提例）
図１は、本発明の前提となるテンポ検出装置の全体ブロック図である。このテンポ検出装置の構成は、テンポ検出用プログラムが読み込まれて実行可能なコンピュータにより構成されており、該コンピュータをテンポ検出用機能ブロックとして分けた場合、図１に示すように、音響信号を入力する入力部１と、入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出部２と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部３と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部４とを有するもので構成される。
【００３８】
上記入力部１は、後述するように、コンピュータに接続されたマイクや、同じくコンピュータに接続されたＭＩＤＩインタフェースなどのＩ／Ｏインターフェースで構成されており、上述のように、音響信号を入力する機能を有している。
【００３９】
上記音階音レベル検出部２は、テンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのＣＰＵにより構成されている。そしてそれは、上述のように、入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める機能を有している。
【００４０】
上記ビート検出部３は、同じくテンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのＣＰＵにより構成されている。それは、上述のように、所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出する機能を有している。
【００４１】
上記小節検出部４は、同じくテンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのＣＰＵにより構成されている。それは、上述のように、上記ビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する機能を有している。
【００４２】
音楽音響信号を入力する上記入力部１は、テンポ検出をする対象の音楽音響信号を入力する部分である。マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器（図示無し）によりディジタル信号に変換しても良いし、音楽ＣＤなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み（リッピング）、これを指定して開くようにしても良い。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
【００４３】
このディジタル信号は、音階音レベル検出部２に入力される。この音階音レベル検出部は図２の各部から構成される。
【００４４】
そのうち波形前処理部２０は、音楽音響信号の上記入力部１からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
【００４５】
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
【００４６】
例えば検出する最高音をＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【００４７】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。
【００４８】
このようにダウンサンプリングの処理を行うのは、この後のＦＦＴ演算において、同じ周波数分解能を得るために必要なＦＦＴポイント数を下げることで、ＦＦＴの演算時間を減らすのが目的である。
【００４９】
なお、音楽ＣＤのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部１が、マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器によりディジタル信号に変換するような場合には、当然Ａ／Ｄ変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部を省くことが可能である。
【００５０】
このようにして波形前処理部２０によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号を、ＦＦＴ演算部２１によりＦＦＴ（高速フーリエ変換）する。
【００５１】
ＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性を考慮しなくてはならない（つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い）。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは０で埋めることによって、ＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワー（ここでパワーは、上記レベルと同意；以下同じ）も正しく検出するためには、ある程度の波形サンプル数は必要である。
【００５２】
以上のようなことを考慮し、本実施例では、ＦＦＴポイント数５１２、窓のシフトは３２サンプルで、０埋めなしという設定にした。このような設定でＦＦＴ演算を行うと、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚとなる。時間分解能約８．７ｍｓという値は、四分音符＝３００のテンポの曲で、３２分音符の長さが、２５ｍｓであることを考えると、十分な値であることがわかる。
【００５３】
このようにして、所定の時間間隔毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部２２に送られる。
【００５４】
レベル検出部２２では、ＦＦＴ演算部２１で計算されたパワー・スペクトルから、各音階音のレベルを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【００５５】
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔（先の例では３２サンプル）進めて、ＦＦＴ演算部２１とレベル検出部２２の処理を波形の終わりまで繰り返す。
【００５６】
以上により、音楽音響信号の入力部１に入力された音響信号の、所定時間毎の各音階音のレベルが、バッファ２３に保存される。
【００５７】
次に、図１のビート検出部３の構成について説明する。該ビート検出部３は、図３のような処理の流れで実行される。
【００５８】
ビート検出部３は、音階音レベル検出部が出力した所定時間（以下、この１所定時間を１フレームと呼ぶ）毎の各音階音のレベルの変化を元に平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出する。そのために、まずビート検出部３は、各音階音のレベル増分値の合計（前のフレームとのレベルの増分値をすべての音階音で合計したもの。前のフレームからレベルが減少している場合は０として加算する）を計算する（ステップＳ１００）。
【００５９】
つまり、フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とするとき、ｉ番目の音階音のレベル増分値Ｌａｄｄｉ（ｔ）は、下式数１に示すようになり、このＬａｄｄｉ（ｔ）を使って、フレーム時間ｔにおける各音階音のレベル増分値の合計Ｌ（ｔ）は、下式数２で計算できる。ここで、Ｔは音階音の総数である。
【００６０】
【数１】
2010025972.tif 000003
【００６１】
【数２】
2010025972.tif 000004
【００６２】
この合計Ｌ（ｔ）値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【００６３】
例として、図４に、ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のレベルを濃淡で表したもの（下が低い音、上が高い音。この図では、Ｃ１からＡ６の範囲）、下段がフレーム毎の各音階音のレベル増分値の合計を示している。この図の各音階音のレベルは、音階音レベル検出部から出力されたものであるので、周波数分解能が約７．２Ｈｚであり、Ｇ＃２以下の一部の音階音でレベルが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のレベルが測定できないのは、問題ない。
【００６４】
この図の下段に見られるように、各音階音のレベル増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【００６５】
ビートの位置を求めるために、ビート検出部３では、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のレベル増分値の合計の自己相関から計算できる（図３；ステップＳ１０２）。
【００６６】
あるフレーム時間ｔにおける各音階音のレベル増分値の合計をＬ（ｔ）とすると、この自己相関φ（τ）は、以下の式数３で計算される。
【００６７】
【数３】
2010025972.tif 000005
ここで、Ｎは総フレーム数、τは時間遅れである。
【００６８】
自己相関計算の概念図を、図５に示す。この図のように、時間遅れτがＬ（ｔ）のピークの周期の整数倍の時に、φ（τ）は大きな値となる。よって、ある範囲のτについてφ（τ）の最大値を求めれば、曲のテンポを求めることができる。
【００６９】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符＝３０から３００の範囲を計算するならば、自己相関を計算する範囲は、０．２秒から２秒となる。時間（秒）からフレームへの変換式は、以下の数４式に示す通りとなる。
【００７０】
【数４】
2010025972.tif 000006
【００７１】
この範囲の自己相関φ（τ）が最大となるτをビート間隔としても良いが、必ずしもすべての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め（図３；ステップＳ１０４）、これら複数の候補からユーザにビート間隔を決定させるのが良い（図３；ステップＳ１０６）。
【００７２】
このようにしてビート間隔が決定したら（決定したビート間隔をτｍａｘとする）、まず最初に先頭のビート位置を決定する。
【００７３】
先頭のビート位置の決定方法を、図６を用いて説明する。図６の上段はフレーム時間ｔにおける各音階音のレベル増分値の合計Ｌ（ｔ）で、下段Ｍ（ｔ）は決定したビート間隔τｍａｘの周期で値を持つ関数である。式で表すと、下式数５に示すようになる。
【００７４】
【数５】
2010025972.tif 000007
【００７５】
この関数Ｍ（ｔ）を、０からτｍａｘ−１の範囲でずらしながら、Ｌ（ｔ）とＭ（ｔ）の相互相関を計算する。
【００７６】
相互相関ｒ（ｓ）は、上記Ｍ（ｔ）の特性から、下式数６で計算できる。
【００７７】
【数６】
2010025972.tif 000008
【００７８】
この場合のｎは、最初の無音部分の長さに応じて適当に決めれば良い（図６の例では、ｎ＝１０）。
【００７９】
ｒ（ｓ）をｓが０からτｍａｘ−１の範囲で求め、ｒ（ｓ）が最大となるｓを求めれば、このｓのフレームが最初のビート位置である。
【００８０】
最初のビート位置が決まったら、それ以降のビートの位置を１つずつ決定していく（図３；ステップＳ１０８）。
【００８１】
その方法を、図７を用いて説明する。図７の三角印の位置に先頭のビートが見つかったとする。２番目のビート位置は、この先頭のビート位置からビート間隔τｍａｘだけ離れた位置を仮のビート位置とし、その近辺でＬ（ｔ）とＭ（ｔ）が最も相関が取れる位置から決定する。つまり、先頭のビート位置をｂ０とするとき、以下の式のｒ（ｓ）が最大となるようなｓの値を求める。この式のｓは仮のビート位置からのずれで、以下の式数７の範囲の整数とする。Ｆは揺らぎのパラメータで０．１程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。ｎは５程度でよい。
【００８２】
ｋは、ｓの値に応じて変える係数で、例えば図８のような正規分布とする。
【００８３】
【数７】
2010025972.tif 000009
【００８４】
ｒ（ｓ）が最大となるようなｓの値が求まれば、２番目のビート位置ｂ１は、下式数８で計算される。
【００８５】
【数８】
2010025972.tif 000010
【００８６】
以降、同じようにして３番目以降のビート位置も求めることができる。
【００８７】
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができる。
【００８８】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ３０に保存すると共に、検出した結果を表示する。
【００８９】
次に、拍子および小節の検出について説明する。
【００９０】
これまでの処理で、ビートの位置が確定しているので、今度は、ビート毎の音の変化度合いを求める。ビート毎の音の変化度合いは、音階音レベル検出部が出力した、フレーム毎の各音階音のレベルから計算する。
【００９１】
ｊ番目のビートのフレーム数をｂｊとし、その前後のビートのフレームをｂｊ−１、ｂｊ＋１とする時、ｊ番目のビートのビート毎の音の変化度合いは、フレームｂｊ−１からｂｊ−１までのフレームの各音階音のレベルの平均とフレームｂｊからｂｊ＋１−１までのフレームの各音階音のレベルの平均を計算し、その増分値から各音階音のビート毎の音の変化度合いを求め、それらをすべての音階音で合計して計算することができる。
【００９２】
つまり、フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とするとき、ｊ番目のビートのｉ番目の音階音のレベルの平均Ｌａｖｇｉ（ｊ）は、下式数９であるから、ｊ番目のビートのｉ番目の音階音のビート毎の音の変化度合いＢａｄｄｉ（ｊ）は、下式数１０に示すようになる。
【００９３】
【数９】
2010025972.tif 000011
【００９４】
【数１０】
2010025972.tif 000012
【００９５】
よって、ｊ番目のビートのビート毎の音の変化度合いＢ（ｊ）は、下式数１１に示すようになる。ここで、Ｔは音階音の総数である。
【００９６】
【数１１】
2010025972.tif 000013
【００９７】
図９の最下段は、このビート毎の音の変化度合いである。このビート毎の音の変化度合いから拍子と１拍目の位置を求める。
【００９８】
拍子は、ビート毎の音の変化度合いの自己相関から求める。一般的に音楽は１拍目で音が変わることが多いと考えられるので、このビート毎の音の変化度合いの自己相関から拍子を求めることができる。例えば、下式数１２に示す自己相関φ（τ）を求める式から、ビート毎の音の変化度合いＢ（ｊ）の自己相関φ（τ）を遅れτが、２から４の範囲で求め、自己相関φ（τ）が最大となる遅れτを拍子の数とする。
【００９９】
【数１２】
2010025972.tif 000014
【０１００】
Ｎは、総ビート数、τ＝２〜４の範囲でφ（τ）を計算し、φ（τ）が最大となるτを拍子の数とする。
【０１０１】
次に１拍目を求めるが、これは、ビート毎の音の変化度合いＢ（ｊ）がもっとも大きい箇所を１拍目とする。つまり、φ（τ）が最大となるτをτｍａｘ、下式数１３のＸ（ｋ）が最大となるｋをｋｍａｘとするとき、ｋｍａｘ番目のビートが最初の１拍目の位置となり、以降、τｍａｘを足したビート位置が１拍目となる。
【０１０２】
【数１３】
2010025972.tif 000015
ｎｍａｘは、τｍａｘ・ｎ＋ｋ＜Ｎの条件で最大となるｎ
【０１０３】
以上のようにして、拍子及び１拍目の位置（小節線の位置）が決定したら、この結果をバッファ４０に保存する。もちろん、検出した結果を画面表示しても良い。
【０１０４】
以上の前提例構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート（拍）の位置、さらに曲の拍子と１拍目の位置を検出することが可能となる。
【実施例１】
【０１０５】
図１０は、本発明のコード名検出装置の全体ブロック図である。同図において、ビート検出及び小節検出の構成は、前提例構成と基本的に同じであり、同一構成において、テンポ検出用とコード検出用の構成について、上記前提例構成の場合と異なるものもあるので、数式等を除き、同じ説明が重なるが、以下に示す。
【０１０６】
同図によれば、本コード名検出装置の構成は、音響信号を入力する入力部１と、入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求めるビート検出用音階音レベル検出部２と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部３と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部４と、上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求めるコード検出用音階音レベル検出部５と、検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出部６と、検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定部７と、検出した全てのコード毎に、コード位置、ベース域音階音強度、ベース音、コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶部８と、上記コード名決定部７で決定されたコード名乃至コード構成音、及び／又はベース音を表示する表示部９と、入力音響信号及び決定された上記コードを演奏する演奏部１０と、該演奏部１０の両出力の音量バランスを調整する調整部１１と、コード名乃至コード構成音を変更する変更部１２と、該変更部１１によるコード名乃至コード構成音の変更に基づき、コード情報記憶部８に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定部７に変更させ、その変更情報を上記コード情報記憶部８に再記憶させると共に、表示部９にコード名乃至コード構成音を再表示させる再設定部１３とを有している。なお、同図では入力部１に入力された音響信号は、別にバッファ１０ａにも格納され、後の演奏部１０による演奏に用いられることになる。
【０１０７】
上記コード情報記憶部８は、コンピュータの内部又は外部記憶装置で構成されており、上述のように、検出した全てのコード毎に、コード位置、ベース域音階音強度、ベース音、コード音階音強度、コード構成音、コード構成音数、コード名を記憶する機能を有している。
【０１０８】
上記表示部９は、コンピュータのディスプレイで構成されており、上述のように、上記コード名決定部７で決定されたコード名乃至コード構成音、及び／又はベース音を表示する機能を有している。
【０１０９】
上記演奏部１０は、コンピュータのオーディオ出力部（或いは該コンピュータにつながれたＭＩＤＩインターフェースから外部の楽音出力部）で構成されており、上述の様に、入力部１で入力されバッファ１０に格納された音響信号と、コード名決定部７で決定されたコードとを一緒に外部に音声として出力する機能を有している。
【０１１０】
上記調整部１１は、同じくコンピュータ上で稼働するプログラムによってディスプレイ上に表示されたスライダのある操作子（後述する図１５を参照）と該コンピュータに接続されたポインティングデバイスで構成されており、演奏部１０の入力音響信号とコードの両出力の音量バランスを調整する機能（後述する図１７を参照）を有している。
【０１１１】
上記変更部１２は、同じくコンピュータのディスプレイに表示されたカーソルと該コンピュータに接続されたポインティングデバイスで構成されており、上述のように、表示部９で表示されたコード名乃至コード構成音を変更（多くは構成音の数を変更）する構成である。
【０１１２】
上記再設定部１３は、コード名検出用プログラムが読み込まれて実行され、次に説明する処理を行うコンピュータのＣＰＵにより構成されており、上述のように、変更部１２によるコード名乃至コード構成音の変更に基づき、コード情報記憶部８に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定部７に変更させ、その変更情報を上記コード情報記憶部８に再記憶させると共に、少なくとも表示部９にコード名乃至コード構成音を再表示させる機能を有している。その他にも、上記演奏部１０でもう一度音響信号とコードとを演奏させても良い。
【０１１３】
音楽音響信号を入力する上記入力部１は、コード検出をする対象の音楽音響信号を入力する部分であるが、基本的構成は上記実施例１の入力部１と同じであるので、その詳細な説明は省略する。ただし、通常センタに定位されるボーカルが後のコード検出でじゃまになる場合は、右チャンネルの波形と左チャンネルの波形を引き算することでボーカルキャンセルするようにしても良い。
【０１１４】
このディジタル信号は、ビート検出用音階音レベル検出部２とコード検出用音階音レベル検出部５とに入力される。これらの音階音レベル検出部は、どちらも上記図２の各部から構成され、構成はまったく同じなので、同じものをパラメータだけを変えて再利用できる。
【０１１５】
そしてその構成として使用される波形前処理部２０は、上記と同様な構成であり、音楽音響信号の上記入力部１からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする。ただし、ダウンサンプリング後のサンプリング周波数、つまり、ダウンサンプリングレートは、ビート検出用とコード検出用で変えるようにしても良いし、ダウンサンプリングする時間を節約するために同じにしても良い。
【０１１６】
ビート検出用の場合は、ビート検出に使う音域によってダウンサンプリングレートを決定する。シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、以下のコード検出時と同じダウンサンプリングレートで構わない。
【０１１７】
コード検出用の波形前処理部のダウンサンプリングレートは、コード検出音域によって変える。コード検出音域とは、コード名決定部でコード検出するときに使う音域のことである。例えばコード検出音域をＣ３からＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数はナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【０１１８】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。これについては、前提例構成に説明したことと同じ理由による。
【０１１９】
このようにして波形前処理部２０によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号をＦＦＴ演算部２１により、ＦＦＴ（高速フーリエ変換）する。
【０１２０】
ＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出時とコード検出時で異なる値とする。これは、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性によるものである（つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い）。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし、残りは０で埋めることによってＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、本実施例のケースでは、低音側のパワーも正しく検出するためにある程度の波形サンプル数は必要である。
【０１２１】
以上のようなことを考慮し、本実施例では、ビート検出時はＦＦＴポイント数５１２、窓のシフトは３２サンプルで、０埋めなし、コード検出時はＦＦＴポイント数８１９２、窓のシフトは１２８サンプルで、波形サンプルは一度のＦＦＴで１０２４サンプル使うようにした。このような設定でＦＦＴ演算を行うと、ビート検出時は、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚ、コード検出時は、時間分解能約３５ｍｓ、周波数分解能約０．４Ｈｚとなる。今レベルを求めようとしている音階音は、Ｃ１からＡ６の範囲であるので、コード検出時の周波数分解能約０．４Ｈｚは、最も周波数差の小さいＣ１とＣ＃１の基本周波数の差、約１．９Ｈｚにも対応できる。また、四分音符＝３００のテンポの曲で３２分音符の長さが２５ｍｓであることを考えると、ビート検出時の時間分解能約８．７ｍｓは、十分な値であることがわかる。
【０１２２】
このようにして、所定の時間間隔毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部２２に送られる。
【０１２３】
レベル検出部２２では、ＦＦＴ演算部２１で計算されたパワー・スペクトルから、各音階音のレベルを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、前提例構成と同様な処理を行う。すなわち、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【０１２４】
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔（先の例ではビート検出時は３２サンプル、コード検出時は１２８サンプル）進めて、ＦＦＴ演算部２１とレベル検出部２２の処理を波形の終わりまで繰り返す。
【０１２５】
以上により、音楽音響信号の入力部１に入力された音響信号の、所定時間毎の各音階音のレベルが、ビート検出用とコード検出用の２種類のバッファ２３及び５０に保存される。
【０１２６】
次に、図１０のビート検出部３及び小節検出部４の構成については、前提例構成のビート検出部３及び小節検出部４と同じ構成なので、その詳細な説明は、ここでは、省略する。
【０１２７】
前提例構成と同様な構成と手順で、小節線の位置（各小節のフレーム番号）が確定したので、今度は各小節のベース音を検出する。
【０１２８】
ベース音は、コード検出用音階音レベル検出部５が出力した各フレームの音階音のレベルから検出する。
【０１２９】
図１１に前提例構成の図４と同じ曲の同じ部分のコード検出用音階音レベル検出部５が出力した各フレームの音階音のレベルを示す。この図のように、コード検出用音階音レベル検出部５での周波数分解能は、約０．４Ｈｚであるので、Ｃ１からＡ６のすべての音階音のレベルが抽出されている。
【０１３０】
ベース音は、小節の前半と後半で異なる可能性があるので、ベース音検出部６により、各小節の前半と後半でそれぞれ検出する。前半と後半のベース音が同じ音のときは、小節のベース音としてこれを確定し、コードも小節全体で検出する。前半と後半で別の音のベース音が検出されたときは、コードも前半と後半に分けて検出する。場合によっては、分割する範囲を更に半分にまで（小節の４分の１まで）狭めてもよい。
【０１３１】
ベース音は、ベース検出期間におけるベース検出音域の音階音のレベルの平均的な強さから求める。すなわちこれがベース音の強度である。
【０１３２】
フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とすると、フレームｆｓからｆｅのｉ番目の音階音の平均的なレベルＬａｖｇｉ（ｆｓ，ｆｅ）は、下式数１４で計算できる。
【０１３３】
【数１４】
2010025972.tif 000016
【０１３４】
この平均的なレベルをベース検出音域、例えばＣ２からＢ３の範囲で計算し、平均的なレベルが最も大きな音階音をベース音として、ベース音検出部６は、決定する。ベース検出音域に音が含まれない曲や無音部分で間違ってベース音を検出しないために、適当な閾値を設定し、検出したベース音の平均的なレベルが、この閾値以下の場合は、ベース音を検出しないようにしてもよい。また、後のコード検出でベース音を重要視する場合には、検出したベース音がベース検出期間中継続してあるレベル以上を保っているかどうかをチェックするようにして、より確実なものだけをベース音として検出するようにしてもよい。さらに、ベース検出音域中、平均的なレベルが最も大きい音階音をベース音として決定するのではなく、この各音名の平均的なレベルを１２の音名毎に平均し、この音名毎のレベルが最も大きな音名をベース音名として決定し、その音名を持つベース検出音域の中の音階音で、平均的なレベルが最も大きい音階音をベース音として決定するようにしてもよい。
【０１３５】
ベース音が決定したら、この結果をバッファ６０に保存すると共に、ベース検出結果を画面表示して、間違っている場合にはユーザに修正させるようにしてもよい。また、曲によってベース音域が変わることも考えられるので、ユーザがベース検出音域を変更できるようにしてもよい。
【０１３６】
図１２に、ベース音検出部６によるベース検出結果の表示例を示す。
【０１３７】
次にコード名決定部７によるコード検出処理であるが、該コード検出処理も、同じようにコード検出期間における各音階音の平均的なレベルを計算することによって決定する。すなわちこれがコードの強度である。
【０１３８】
本実施例では、コード検出期間とベース検出期間は同一としている。コード検出音域、例えばＣ３からＡ６の各音階音のコード検出期間における平均的なレベルを計算し、これが大きな値を持つ音階音から順に数個の音名を検出し、これとベース音の音名からコード名候補を抽出する。
【０１３９】
上記コード情報記憶部８は、検出した上記データを記憶する構成であり、上記コンピュータの内部又は外部記憶装置で構成される。
【０１４０】
該コード情報記憶部８には、コード名検出の過程において、コード位置にはベース音検出期間の最初のフレーム番号（コード１、コード２、……）が記憶され、ベース域音階音強度には、ベース音域内であって、ベース音検出期間のＣ〜Ｂまでの各１２音の強度の区間平均が記憶される。フレーム番号はサンプルにも変換できるのでサンプル番号で記憶しても良い。また、ベース音には、ベース音検出期間において検出されたベース音の音階番号が記憶される。コード音階音強度には、ベース検出期間のＣ〜Ｂまでの各１２音の強度の区間平均が記憶され、コード構成音には、ベース検出期間において抽出されたコード構成音が記憶される。そしてコード名には、決定されたコード名（或いはそれに対応した番号でも良い）が記憶される。
【０１４１】
コード名決定部７は、コード情報記憶部８を参照してコード名を決定する。コード名決定部７はコードのタイプ（ｍ、Ｍ７等）とコード構成音のルート音からの音程を保存したコード名データベースから、１つのコード名とそのコード構成音を検索する。そのコード構成音の平均強度を、コード情報記憶部８のコード音階音強度より算出する。全てのコードのコード構成音平均強度が最も大きいコード名を、その区間のコード名と決定する。このとき、コードのルート音（根音）や５度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であれば、そのままで良いし、異なる音名の場合は分数コードとする。また、コード構成音平均強度が比較的大きなものを複数表示して、ユーザーに選択させるようにしても良い。
【０１４２】
上記方法では、抽出されるコード名候補が多すぎるという場合には、ベース音による限定を行ってもよい。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
【０１４３】
さらに、このコード構成音平均強度の計算に音楽的な知識を導入してもよい。例えば、各音階音のレベルを全フレームで平均し、それを１２の音名毎に平均して各音名の強さを計算し、その強さの分布から曲の調を検出する。そして、調のダイアトニックコードにはコード構成音平均強度が大きくなるようにある定数を掛ける、あるいは、調のダイアトニックスケール上の音から外れた音を構成音に含むコードはその外れた音の数に応じてコード構成音平均強度が小さくなるようにする等が、考えられる。さらにコード進行のよくあるパターンをデータベースとして記憶しておき、それと比較することで、コード候補の中からよく使われる進行になるようなものはコード構成音平均強度が大きくなるようにある定数を掛けるようにしてもよい。
【０１４４】
いずれにしても、コード名決定部７により、コード名が決定したら、この結果（変更情報）をバッファ７０を介して、上記コード情報記憶部８に再記憶させる。
【０１４５】
本実施例では、入力音響信号は、サンプリング周波数４４．１ｋＨｚの信号とする。そして、本実施例では拍子＝４／４、小節位置は、図１３のように検出されたものとする。同図の小節線位置の単位は、Ｓａｍｐｌｅとする。
【０１４６】
この時、小節線位置、拍子、サンプリング周波数から曲のテンポは次のように計算できる。なお、テンポは１分間の四分音符の数であらわされる。
【０１４７】
【数１５】
2010025972.tif 000017
【０１４８】
上記式数１５のＢａｒｎはｎ番目の小節線位置、Ｂｅａｔは拍子の分子、ｆｓはサンプリング周波数である。上記数１５より、本実施例では、Ｔｅｍｐｏは１２０となる。
【０１４９】
また、コード名を決定した結果を、図１４に示す。同図は、本実施例におけるコード情報記憶部８の一部を示したものである。Ｂａｓｓ、コード構成音の数字は、音名Ｃ〜Ｂまでを、０〜１１で表したものである。−１は、コード構成音が存在しないことを意味する。コード構成音は最大７音までとする。またコード位置の単位は、Ｓａｍｐｌｅとする。
【０１５０】
コード名の検出が終わると、表示部９は、入力音響信号、レベル増分値、ビート位置、小節位置、コードを、図１５のように、表示する。
【０１５１】
またコード名決定部７は、検出されたコードに応じたコード演奏情報を作成し、バッファ７０に記憶させる。
【０１５２】
次に演奏情報の作成について説明する。
【０１５３】
演奏情報のデータ構造を、図１６に示す。これはＳＭＦ（スタンダードＭＩＤＩファイル）に準じており、その説明は省略する。同図において、ヘッダデータには、ヘッダデータを示す識別子と、トラック数と、四分音符分解能を含む。
【０１５４】
また、トラックヘッダデータには、トラックヘッダデータを示す識別子と、データサイズと、イベントデータを含んでいる。このイベントデータはイベントタイム、ステータス、データから成る。
【０１５５】
データの数はステータスに応じて異なる。例えば、発音の場合、ステータス＝０×９０、データ１は音程、データ２は発音の強さ（音量）を表す。０×９０の０はＭＩＤＩチャネル、９は発音を表す。さらに発音停止の場合は、ステータス＝０×８０、データ１は音程、データ２は発音停止の強さとなる。（発音停止の強さとは、鍵盤楽器において、押下した鍵盤が戻るときの速さを表す。）
【０１５６】
イベントタイムは、演奏開始からの経過時間を表す。単位はＴｉｃｋで、ヘッダデータで定義した四分音符分解能を用いる。イベントタイムの代わりにステップタイム（直前イベントからの経過時間）を用いても良い。
【０１５７】
まずコード開始位置、コード終了位置をＳａｍｐｌｅからＴｉｃｋへ下式数１６で変換する。
【０１５８】
【数１６】
2010025972.tif 000018
【０１５９】
Ｃｈｏｒｄｎは、ｎ番目のコードのコード開始または終了位置を、ｆｓはサンプリング周波数を、Ｔｅｍｐｏは曲のテンポを、Ｄｉｖは四分音符分解能を、各示す。
【０１６０】
各コードの開始位置は、夫々０、１９２０、３８４０、５７６０、７６８０、９６００Ｔｉｃｋに変換される。該Ｔｉｃｋは整数である必要があるので、小数点以下を四捨五入すると、各コードの終了位置は、夫々１９２０、３８４０、５７６０、７６８０、９６００、１１５２０となる。
【０１６１】
コードＣのイベントデータには、音程６０（中央ド）、６４（ミ）、６７（ソ）の各発音イベントと、各発音停止イベントを、書き込む。
【０１６２】
各発音イベントのイベントタイムは、上記数１６より求められる、Ｔｉｃｋに変換したコード開始位置となる。
【０１６３】
また各発音イベントのステータスは、ＭＩＤＩに準じて、０×９０とする。
【０１６４】
各発音イベントのデータ１は、音程を表すので、夫々、０×３Ｃ、０×４０、０×４８となる。
【０１６５】
各発音イベントのデータ２は、発音強さなので、任意の値とする。
【０１６６】
発音停止イベントのイベントタイムは、発音時間がコード開始から終了までの９割程度になるようにする。これは、下式数１７で求める。
【０１６７】
【数１７】
2010025972.tif 000019
【０１６８】
ＣｈｏｒｄＳｎは、ｎ番目のコードの開始位置、ＣｈｏｒｄＥｎは、ｎ番目のコードの終了位置を示す。初停止イベントタイムもＴｉｃｋなので、小数点以下を四捨五入する。すると、各発音停止イベントのイベントタイムは１７２８となる。各発音停止イベントのステータスはＭＩＤＩに準じて０×８０とする。そして各発音停止イベントのデータ１は音程を表すので、夫々、０×３Ｃ、０×４０、０×４８となる。また各発音イベントのデータ２は、発音停止強さなので、任意の値とする。
【０１６９】
上記の要領で全てのコードの演奏データを作成する。
【０１７０】
以上の様な動作で演奏情報が作成された後、表示部９、演奏部１０、調整部１１、変更部１２及び再設定部１３により、これまでのコード検出が正しく行われたかをユーザに確かめさせ、必要な場合には、その変更を行わせる。
【０１７１】
検出後にユーザが、図１５に示される演奏開始ボタン１００を押すと、上記演奏部１０によって、バッファ１０ａを経て入力される入力音響信号、及びコード情報記憶部８から読み出されるコードが、楽音として出力される。その際コードは、図１５の小節番号２の小節音響信号内のＳで示された演奏開始位置から、小節番号６の小節音響信号内のＥで示された演奏終了位置までの範囲を、演奏する。これらは、マウスで小節番号表示領域をクリックすることで、任意の位置に移動できる。
【０１７２】
演奏開始ボタン１００を押すと、入力音響信号及びコードの演奏が開始され、演奏が演奏終了位置に至るか、演奏終了ボタン１０２が押されるか、することで、演奏が終了する。
【０１７３】
コード情報記憶部８、演奏部１０及び調整部１１の機能ブロック図を、図１７に示す。
【０１７４】
演奏開始ボタン１００が押されて、演奏が開始されると、演奏進行に伴い、図１０の入力音響信号が格納されているバッファ１０ａから、演奏部１０により、入力音響信号が読み出される。それに伴い、コード演奏情報記憶部８から、演奏部１０のコード読出部１０４により、コード演奏情報が読み出され、音源部１０６からの楽音信号の読み出しがなされ、コード読出部１０４は、それに応じたコード演奏音響信号を生成し、それを出力する。
【０１７５】
読み出された入力音響信号は、入力音響信号ボリューム１１２で振幅を調整される。同様にコード演奏音響信号もコード演奏音響信号ボリューム１１０で振幅を調整される。上述の調整部１１は、これらのコード演奏音響信号ボリューム１１０と入力音響信号ボリューム１１２とで構成されることになる。
【０１７６】
振幅調整された入力音響信号とコード演奏音響信号は、加算器１１４で加算されて、再生音響信号バッファ１０８に書き込まれる。
【０１７７】
再生音響信号は、コンピュータシステムの音響出力手段により音楽音響信号が、Ｄ／Ａ変換され、スピーカ等から外部に発音されて、再生される。
【０１７８】
上記調整部１１は、コード演奏音響信号ボリューム１１０と入力音響信号ボリューム１１２よりなることは上述の通りであるが、より詳細には、コード演奏音響信号ボリューム１１０及び入力音響信号ボリューム１１２に夫々連動しており、表示部９に表示される調整部１１の操作子（スライダ）を操作することで、コード演奏音響信号ボリューム１１０及び入力音響信号ボリューム１１２の双方の値が変化することになる。
【０１７９】
これらの両方の音を聴き比べることで、コードが間違って検出されていないか、ユーザは確かめることができる。
【０１８０】
ユーザが何度も聴き比べてコードが間違っていると判断した場合、上記変更部１２により、コンピュータの表示部９上に表示されたコード表示位置に、カーソルを合わせ、そこで表示されたコード名乃至コード構成音を変更する。
【０１８１】
上記再設定部１３は、変更部１２によるコード名乃至コード構成音の変更に基づき、コード情報記憶部８に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定部７に変更させ、その変更情報を上記コード情報記憶部８に再記憶させると共に、少なくとも表示部９にコード名乃至コード構成音を再表示させる機能を有している。またユーザの求めに応じて、上記演奏部１０でもう一度音響信号とコードとを演奏させることもできる。
【０１８２】
このように検出されたコード名を画面表示するだけであれば、表示されたコード名乃至コード構成音を見ただけで正しいかどうかは判断できないが、入力音響信号と検出されたコードとを再生し、且つその際、両音をユーザが判断し易いように、調整部１１により、出力調整をしているので、コード検出の確認には非常に有効である。
【０１８３】
以上説明した本実施例構成によれば、簡単な構成のみでビート検出という時間分解能が必要な処理（上記前提例のテンポ検出装置の構成と同じ）と、コード検出という周波数分解能が必要な処理（上記テンポ検出装置の構成を基にさらにコード名を検出できる構成）を同時に行うことができるようになって、特別な音楽的知識を有する専門家でなくても、音楽ＣＤ等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに全体の響きから、コード名を検出でき、その際に構成音が同じ和音でも判別可能であるだけでなく、その検出結果を演奏部１０により聴いたユーザが、コード進行上不自然なコード音であり、その検出結果に訂正を加えたい時は、上記変更部１２を使用して、ユーザ側で、コード名やコード構成音を変更することができ、適切なコード名の決定ができるようになる。或いはコード進行を聴いた時に自然と感じるように、ユーザによる訂正ができるようになる。また、そのような入力音響信号と検出されたコードとの再生の聴き取りの際に、両音をユーザが判断し易いように、調整部１１により、出力調整が簡単にできるようになる。
【０１８４】
尚、本発明のコード名検出装置及びそれを実現できるプログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１８５】
本発明のコード名検出装置及びコード名検出用プログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
【図面の簡単な説明】
【０１８６】
【図１】本発明の前提となるテンポ検出装置の全体ブロック図である。
【図２】音階音レベル検出部２の構成のブロック図である。
【図３】ビート検出部３の処理の流れを示すフローチャートである。
【図４】ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示すグラフである。
【図５】自己相関計算の概念を示す説明図である。
【図６】先頭のビート位置の決定方法を説明する説明図である。
【図７】最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
【図８】ｓの値に応じて変えられる係数ｋの分布状態を示すグラフである。
【図９】小節検出結果の確認画面の例を示す画面表示図である。
【図１０】実施例１に係る本発明のコード名検出装置の全体ブロック図である。
【図１１】曲の同じ部分のコード検出用音階音レベル検出部５が出力した各フレームの音階音のレベルを示すグラフである。
【図１２】ベース音検出部６によるベース検出結果の表示例を示すグラフである。
【図１３】本実施例で検出された小節線位置の一例を示す説明図である。
【図１４】本実施例でコード名が決定された状態を示すデータ格納状態を示す説明図である。
【図１５】検出結果の表示と演奏操作を行う画面表示例を示す説明図である。
【図１６】演奏情報のデータ構造を示す説明図である。
【図１７】演奏部１０及び調整部１１の機能ブロックを示す説明図である。
【符号の説明】
【０１８７】
１                                入力部
２                                ビート検出用音階音レベル検出部
３                                ビート検出部
４                                小節検出部
５                                コード検出用音階音レベル検出部
６                                ベース音検出部
７                                コード名決定部
８                                コード情報記憶部
９                                表示部
１０                                演奏部
１１                                調整部
１２                                変更部
１３                                再設定部
２０                                波形前処理部
２１                                ＦＦＴ演算部
２２                                レベル検出部
１０ａ、２３、３０、４０、５０、６０、７０、１０８  バッファ
１００                                演奏開始ボタン
１０２                                演奏終了ボタン
１１０                                コード演奏音響信号ボリューム
１１２                                入力音響信号ボリューム
１１４                                加算器
【図１】
2010025972.tif 000020
【図２】
2010025972.tif 000021
【図３】
2010025972.tif 000022
【図４】
2010025972.tif 000023
【図５】
2010025972.tif 000024
【図６】
2010025972.tif 000025
【図７】
2010025972.tif 000026
【図８】
2010025972.tif 000027
【図９】
2010025972.tif 000028
【図１０】
2010025972.tif 000029
【図１１】
2010025972.tif 000030
【図１２】
2010025972.tif 000031
【図１３】
2010025972.tif 000032
【図１４】
2010025972.tif 000033
【図１５】
2010025972.tif 000034
【図１６】
2010025972.tif 000035
【図１７】
2010025972.tif 000036