【文献】
後藤 真孝,音楽音響信号を対象としたリアルタイムビートトラッキング,人工知能学会研究会資料 AIチャレンジ研究会,日本,社団法人人工知能学会,1998年11月 7日,SIG-Challenge-9801-2,pp. 7-14
(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、前記特許文献1に記載の技術とは逆に、検出された拍位置から小節頭を特定する場合、楽曲データのブレーク明けのバスドラムの立ち上がりを検出し、その拍位置を小節頭と判定してしまうことがあり、実際の楽曲データの小節の1拍目とは異なる拍位置を小節頭として誤検出してしまうという課題がある。
【0005】
本発明の目的は、小節頭を誤検出することのない楽曲解析装置および楽曲解析プログラムを提供することにある。
【課題を解決するための手段】
【0006】
本発明の楽曲解析装置は、
楽曲データの拍位置を検出、または外部機器で検出した拍位置を取得する拍位置取得部と、
前記楽曲データのスネアドラムの発音位置を検出、または外部機器で検出した前記スネアドラムの発音位置を取得するスネアドラム検出部と、
前記楽曲データのバスドラムの発音位置を検出、または外部機器で検出した前記バスドラムの発音位置を取得するバスドラム検出部と、
前記スネアドラムの発音位置の1拍前位置にある前記バスドラムの発音位置を検出する検出部と、
前記楽曲データの開始位置より所定の閾値以上の音響パワーである前記バスドラムの発音位置を小節頭とする小節頭設定部と、
を備えていることを特徴とする。
【0007】
本発明の楽曲解析装置は、
楽曲データの拍位置を検出、または外部機器で検出した拍位置を取得する拍位置取得部と、
前記楽曲データのスネアドラムの発音位置を検出、または外部機器で検出した前記スネアドラムの発音位置を取得するスネアドラム検出部と、
前記楽曲データから、バスドラムの発音位置を検出、または外部機器で検出した前記バスドラムの発音位置を取得するバスドラム検出部と、
前記スネアドラム検出部により検出された前記スネアドラムの発音位置に基づいて、前記楽曲データの小節頭が、1拍シフトしているか否かを判定する1拍シフト判定部と、
前記バスドラム検出部により検出された前記バスドラムの発音位置に基づいて、前記楽曲データの小節頭が、2拍シフトしているか否かを判定する2拍シフト判定部と、
1拍シフト判定部および前記2拍シフト判定部の判定結果に基づいて、前記楽曲データの小節頭を設定する小節頭設定部と、
を備えていることを特徴とする。
【0008】
本発明の楽曲解析プログラムは、
コンピュータを、
楽曲データの拍位置を検出、または外部機器で検出した拍位置を取得する拍位置取得部と、
前記楽曲データから、スネアドラムの発音位置を検出、または外部機器で検出した前記スネアドラムの発音位置を取得するスネアドラム検出部と、
前記楽曲データから、バスドラムの発音位置を検出、または外部機器で検出した前記バスドラムの発音位置を取得するバスドラム検出部と、
前記スネアドラム検出部により検出された前記スネアドラムの発音位置に基づいて、前記楽曲データの小節頭が、1拍シフトしているか否かを判定する1拍シフト判定部と、
前記バスドラム検出部により検出された前記バスドラムの発音位置に基づいて、前記楽曲データの小節頭が、2拍シフトしているか否かを判定する2拍シフト判定部と、
1拍シフト判定部および前記2拍シフト判定部の判定結果に基づいて、前記楽曲データの小節頭を設定する小節頭設定部と、
として機能させることを特徴とする。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態を図面に基づいて説明する。
[1]本発明の考え方
図1には、従来の小節頭の検出の方法が示されている。従来、小節頭の検出は、バスドラムの発音位置に基づいて行われており、曲頭やブレーク明けの小節頭を検出する際、その前の無音部分からバスドラム音の強度が大きくなる初めての位置を小節頭として検出してしまうことがある。
しかしながら、実際には、ブレーク部分の後のバスドラム音の大きくなる位置が小節頭であるとは必ずしもいえず、これを補正する必要がある。
【0011】
そこで、本発明では、スネアドラムの発音位置が2拍目、4拍目にあることが多いこと、曲の最初のバスドラムの発音位置が1拍目である傾向が強いことを利用して、小節頭の設定を行うこととした。
具体的には、たとえば、
図2に示す4つ打ちのリズムパターンでは、スネアドラムの発音位置は、2拍目と4拍目にあり、バスドラムの最初の発音位置は、1拍目にある。また、
図3に示すPOP系のリズムでも、スネアドラムの発音位置は2拍目と4拍目にあり、バスドラムの最初の発音位置は1拍目にある。さらに、Rock系のリズムでも、スネアドラムの発音位置は2拍目と4拍目にあり、バスドラムの最初の発音位置は1拍目にある。本実施形態は、これらのリズムに共通な特性を利用して、楽曲データSD(
図5参照)の小節頭を設定するものである。
【0012】
[2]楽曲解析装置1の構成
図5には、本発明の第1実施形態に係る楽曲解析装置1が示されている。楽曲解析装置1は、CPU2およびハードディスク等の記憶装置3を備えたコンピュータとして構成される。
楽曲解析装置1は、入力される楽曲データSDの拍位置に基づいて、楽曲データSDの小節位置を解析し、解析された小節位置を楽曲データSDに書き込んで、記憶装置3に保存する。
【0013】
楽曲データSDは、WAV、MP3等のデジタルデータから構成され、FFT解析等により楽曲の拍位置が解析されている。楽曲データSDは、CDプレーヤ、DVDプレーヤ等の楽曲再生装置で再生された楽曲データを、USBケーブル等により、楽曲解析装置1に取り込んだものでもよいし、記憶装置3に保存されたデジタル楽曲データを再生したものでもよい。
【0014】
楽曲解析装置1は、CPU2上で実行される楽曲解析プログラムとしての拍位置取得部20、スネアドラム検出部21、バスドラム検出部22、1拍シフト判定部23、2拍シフト判定部24、および小節頭設定部25を備える。
拍位置取得部20は、楽曲データSDで解析された拍位置を取得する。本実施形態では、予め解析された拍位置を有する楽曲データSDから拍位置を取得しているが、拍位置取得部20自身が、FFT解析等により拍位置を検出するように構成してもよい。拍位置取得部20は、取得した楽曲データSDの拍位置を、1拍シフト判定部23および2拍シフト判定部24に出力する。
スネアドラム検出部21は、楽曲データSD中のスネアドラムの発音位置を検出する。具体的には、スネアドラム検出部21は、入力された楽曲データSDのカットオフ周波数2.5kHzのLPF処理を行う。次に、スネアドラム検出部21は、カットオフ周波数300HzのHPF(High Pass Filter)処理を行い、低音域のバスドラム音を除去して、中音域のスネアドラムの音を検出する。
【0015】
スネアドラム検出部21は、検出データを微分して、変化の大きなデータをスネアドラムの発音位置として検出する。
なお、本実施形態では、スネアドラム検出部21は、楽曲データSDから直接スネアドラムの発音位置を検出しているが、外部機器で検出されたスネアドラムの発音位置を取得するように、スネアドラム検出部21を構成してもよい。
スネアドラム検出部21は、検出されたスネアドラムの発音位置を1拍シフト判定部23に出力する。
【0016】
バスドラム検出部22は、楽曲データSD中のバスドラムの発音位置を検出する。具体的には、バスドラム検出部22は、入力された楽曲データSDのカットオフ周波数2.5kHzのLPF処理を行う。次に、バスドラム検出部22は、カットオフ周波数240HzのLPF(Low Pass Filter)処理を行い、所定の周波数以下の低音域のバスドラムの音を検出する。
【0017】
バスドラム検出部22は、検出データを微分して、変化の大きなデータをバスドラムの発音位置として検出する。
なお、本実施形態では、バスドラム検出部22は、楽曲データSDから直接バスドラムの発音位置を検出しているが、外部機器で検出されたバスドラムの発音位置を取得するように、バスドラム検出部22を構成してもよい。
バスドラム検出部22は、検出されたバスドラムの発音位置を2拍シフト判定部24に出力する。
【0018】
なお、本実施形態では、スネアドラム検出部21およびバスドラム検出部22は、スネアドラムのアタック音、バスドラムのアタック音を検出しているが、これに限られない。たとえば、スネアドラムの代わりにクラップのアタック音を検出してもよいし、バスドラムの代わりにベースのスラップのアタック音を検出してもよい。
【0019】
1拍シフト判定部23は、拍位置取得部20で取得した楽曲データSDの拍位置に基づいて、1番最初の拍位置から見たスネアドラムの発音位置が、2拍目および4拍目であるか、または1拍目および3拍目であるかを判定する。
具体的には、1拍シフト判定部23は、
図6に示すように、スネアドラムの発音位置が、拍位置に設定された閾値以内であるか否かによって、スネアドラムの拍位置を検出し、2拍目および4拍目であるか否かの判定をする。
【0020】
1拍シフト判定部23は、スネアドラムの発音位置を、2拍分のサンプル数で除して、その剰余に基づいて、2拍目および4拍目であるか否かの判定を行う。
剰余がほぼ0拍分のサンプル数であれば、そのスネアドラムの発音位置は、偶数拍であると判定する。
剰余がほぼ1拍分のサンプル数であれば、そのスネアドラムの発音位置は、奇数拍であると判定する。
剰余が閾値から外れている場合は、スネアドラムの発音位置から除外する。
【0021】
1拍シフト判定部23は、楽曲データSD中のすべてのスネアドラムの発音位置について、剰余の判定を行い、判定結果のうち、奇数拍であると判定されたスネアドラムの発音位置の率を算出する。
1拍シフト判定部23は、奇数拍であると判定されたスネアドラムの発音位置が所定の閾値を超えていたら、楽曲データSDの1拍シフト判定の結果を1拍シフトしていると判定する。1拍シフト判定部23は、1拍シフトしていると判定された場合、判定結果として”1”のフラグを小節頭設定部25に出力し、1拍シフトしていないと判定された場合、判定結果として”0”のフラグを小節頭設定部25に出力する。
【0022】
2拍シフト判定部24は、拍位置取得部20で取得した楽曲データSDの拍位置に基づいて、バスドラムの発音位置が、1拍目または3拍目であるかを判定する。
具体的には、まず、2拍シフト判定部24は、
図7に示すように、強度が所定の閾値を超える最初のバスドラムの発音位置を検出する。この際、2拍シフト判定部24は、楽曲データSDの曲頭から16分音符間隔の精度でバスドラムの発音位置を検出する。なお、ここでは上記の通り、1拍目か3拍目かを判定すればよいので、弱起等に現れる裏拍や4拍目のバスドラムのアタック音は無視できる。
【0023】
2拍シフト判定部24は、(楽曲データSDの最初に顕著に立ち上がったバスドラムの発音位置−1)/16の剰余に1を加えた値に基づいて、そのバスドラムの発音位置が1拍目なのか3拍目なのかを判定する。なお、除算の16は、1小節を16分音符間隔で分割したことを意味する。また、バスドラムの発音位置から1を引いているのは、0から15のデータに変換し、剰余に1を加えているのは、1から16のデータに戻すためである。
【0024】
剰余に1を加えた値が9付近である場合は、3拍目に近い位置にあるので、バスドラムの発音位置が、2拍シフトした3拍目であると判定する。
剰余に1を加えた値がそれ以外である場合は、2拍シフトしていないと判定し、バスドラムの発音位置が、1拍目であると判定する。
2拍シフト判定部24は、2拍シフトしていると判定された場合、判定結果として”1”のフラグを小節頭設定部25に出力し、2拍シフトしていないと判定された場合判定結果として、”0”のフラグを小節頭設定部25に出力する。
【0025】
小節頭設定部25は、1拍シフト判定部23および2拍シフト判定部24の判定結果に基づいて、楽曲データSDの小節頭を設定する。
具体的には、小節頭設定部25は、1拍シフト判定部23から出力された”0”または”1”のフラグ、2拍シフト判定部24から出力された”0”または”1”のフラグを、シフト総合量として算出する。算出は、1拍シフト判定結果+2拍シフト判定結果×2により行う。
【0026】
小節頭設定部25は、楽曲データSDの最初の拍位置に総合シフト量を加え、小節頭を設定する。総合シフト量は、0、1、2、3のいずれかの値を取るので、小節頭設定部25は、0の場合は最初の拍位置を小節頭として設定し、1の場合は次の拍位置を小節頭として設定し、2の場合は3拍目の拍位置を小節頭と設定し、3の場合は4拍目の拍位置を小節頭として設定する。
小節頭設定部25は、設定された小節頭位置を楽曲データSDに書き込んで、記憶装置3に保存する。
【0027】
[3]実施形態の作用および効果
次に、本実施形態の作用を
図8および
図9に示されるフローチャートに基づいて説明する。
拍位置取得部20は、楽曲データSD中の拍位置を検出する(手順S1)。
スネアドラム検出部21は、楽曲データSD中のスネアドラムの発音位置を検出する(手順S2)。
1拍シフト判定部23は、スネアドラムの発音位置を、2拍分のサンプリング時間で除して、その剰余を演算する(手順S3)。
【0028】
1拍シフト判定部23は、剰余が0拍分であるか否かを判定する(手順S4)。
剰余が0拍分である場合、1拍シフト判定部23は、そのスネアドラムの発音位置を偶数拍と判定する(手順S5)。
剰余が0拍分でない場合、1拍シフト判定部23は、そのスネアドラムの発音位置を奇数拍と判定する(手順S6)。
【0029】
1拍シフト判定部23は、楽曲データSD中のすべてのスネアドラムの発音位置について、1拍シフトの判定が終了しているか否かを判定する(手順S7)。
終了していない場合、次のスネアドラムの発音位置について、手順S4から実行する。
終了している場合、1拍シフト判定部23は、奇数拍の割合を算出する(手順S8)。
1拍シフト判定部23は、奇数拍の割合が所定の閾値を超えているか否かを判定する(手順S9)。
閾値を超えている場合、1拍シフト判定部23は、フラグを”1”に設定する(手順S10)。
閾値を超えていない場合、1拍シフト判定部23は、フラグを”0”に設定する(手順S11)。
1拍シフト判定部23は、判定結果を小節頭設定部25に出力する(手順S12)。
【0030】
バスドラム検出部22は、バスドラムの発音位置を検出する(手順S13)。
2拍シフト判定部24は、最初に検出された閾値を超えるバスドラムの発音位置が、2拍シフトしているか否かを判定する(手順S14)。
2拍シフトしていると判定された場合、フラグ”1”を設定する(手順S15)。
2拍シフトしていないと判定された場合、フラグ”0”を設定する(手順S16)。
2拍シフト判定部24は、判定結果を小節頭設定部25に出力する(手順S17)。
【0031】
小節頭設定部25は、1拍シフト判定部23および2拍シフト判定部24から出力された判定結果から総合シフト量を算出する(手順S18)。
小節頭設定部25は、算出された総合シフト量に基づいて、楽曲データSDの小節頭を設定する(手順S19)。
小節頭設定部25は、設定された小節頭のデータを楽曲データSDに書き込む(手順S20)。
小節頭設定部25は、小節頭が書き込まれた楽曲データSDを記憶装置3に保存する(手順S21)。
【0032】
このような本実施形態によれば、1拍シフト判定部23は、楽曲データSD中のスネアドラムの発音位置と、拍位置取得部20により取得された拍位置とに基づいて、最初の拍位置が、1拍シフトしているか否かを判定し、2拍シフト判定部24は、楽曲データSD中のバスドラムの発音位置と、拍位置取得部20により取得された拍位置とに基づいて、最初の拍位置が、2拍シフトしているか否かを判定している。したがって、小節頭設定部25による小節頭の設定を高精度に行うことができる。
【0033】
[4]第2実施形態
次に、本発明の第2実施形態を説明する。なお、以下の説明では、既に説明した部分と同一の部分については、同一符号を付して説明を省略する。
前述した第1実施形態では、楽曲解析装置1は、1拍シフト判定部23および2拍シフト判定部24を備え、小節頭設定部25は、1拍シフト判定部23および2拍シフト判定部24の判定結果に基づいて、楽曲データSDの小節頭の設定を行っていた。
これに対して、本実施形態では、
図10に示すように、楽曲解析装置1Aは、条件付バスドラム検出部26を備え、小節頭設定部27は、条件付バスドラム検出部26の検出結果に基づいて、小節頭の設定を行っている点が相違する。
【0034】
検出部としての条件付バスドラム検出部26は、拍位置取得部20で取得した楽曲データSDの拍位置に基づいて、スネアドラム検出部21により検出されたスネアドラムの発音位置の1拍前位置のバスドラムの発音位置を検出する。条件付バスドラム検出部26は、条件付きのバスドラムの発音位置を、小節頭設定部27に出力する。
小節頭設定部27は、楽曲データSDの開始位置より、所定の閾値以上の音響パワーである最初のバスドラムの発音位置を、小節頭として設定する。
【0035】
本実施形態の作用は、
図11のフローチャートに示すように、拍位置取得部20が楽曲データSDの拍位置を取得し(手順S1)、スネアドラム検出部21が、スネアドラムの発音位置を検出する(手順S2)。その後、バスドラム検出部22が、バスドラムの発音位置を検出する(手順S13)。
条件付バスドラム検出部26は、検出されたスネアドラムの発音位置に基づいて、検出されたバスドラムの発音位置が、スネアドラムの発音位置の1拍前の位置にあるか否かを判定する(手順S22)。
【0036】
条件付バスドラム検出部26は、条件を満足した場合、バスドラムの発音位置として保存し(手順S23)、条件を満足しない場合、バスドラムの発音位置を破棄する(手順S24)。
条件付バスドラム検出部26は、楽曲データSDのすべてデータのバスドラムの発音位置の判定を継続し(手順S25)、すべてのデータの判定が終了したら、保存したバスドラムの発音位置を小節頭設定部27に出力する。
【0037】
小節頭設定部27は、楽曲データSDの開始位置より所定の閾値以上の音響パワーとなる最初のバスドラムの発音位置を検出し(手順S26)、検出された最初のバスドラムの発音位置を小節頭に設定する(手順S19)。
小節頭設定部25は、設定された小節頭のデータを楽曲データSDに書き込む(手順S20)。
小節頭設定部25は、小節頭が書き込まれた楽曲データSDを記憶装置3に保存する(手順S21)。
このような本実施形態によっても、前述した作用および効果と同様の作用および効果を享受できる。