(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-18
(45)【発行日】2024-03-27
(54)【発明の名称】ビート音発生タイミング生成装置、ビート音発生タイミング生成方法、及びプログラム
(51)【国際特許分類】
G10G 3/04 20060101AFI20240319BHJP
【FI】
G10G3/04
(21)【出願番号】P 2022524798
(86)(22)【出願日】2020-05-21
(86)【国際出願番号】 JP2020020101
(87)【国際公開番号】W WO2021234902
(87)【国際公開日】2021-11-25
【審査請求日】2022-08-15
(73)【特許権者】
【識別番号】000116068
【氏名又は名称】ローランド株式会社
(74)【代理人】
【識別番号】110002860
【氏名又は名称】弁理士法人秀和特許事務所
(72)【発明者】
【氏名】日下部 智
(72)【発明者】
【氏名】村井 崇浩
(72)【発明者】
【氏名】小松 純二郎
【審査官】菊池 智紀
(56)【参考文献】
【文献】国際公開第2019/224990(WO,A1)
【文献】米国特許出願公開第2010/0282045(US,A1)
【文献】特開2007-033851(JP,A)
【文献】特開2011-141555(JP,A)
【文献】特開2015-200803(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10G 1/00-7/02
G10H 1/00-7/12
G10L 25/00-25/93
(57)【特許請求の範囲】
【請求項1】
入力された楽曲のデータから、夫々が前記楽曲のビートを司るタイミングと、前記タイミングにおけるパワーとを示す複数の強度データであって、所定の時間区間における複数の強度データを生成する生成部と、
前記時間区間毎に、前記複数の強度データを用いて前記楽曲のビートの周期及び位相を算出する算出部と、
前記楽曲のビートの周期及び位相に基づいて、ビート音の発生タイミングを検出する検出部と、
前記時間区間毎の前記ビートの周期及び位相の算出に用いるBPM(Beats Per Minute)の
数値範囲として、広い範囲と、前記広い範囲より狭
く、前記広い範囲内に収まる、又は一部重複する狭い範囲との一方を設定する制御部とを含み
、
前記狭い範囲が、
(1)前記広い範囲内で、予め決められた範囲、
(2)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたときのBPM値を中心とした所定の範囲、又は
(3)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたとき以降の前記ビートの周期及び位相の算出に用いられるBPM値を中心とした所定の範囲
であるビート音発生タイミング生成装置。
【請求項2】
前記算出部は、前記狭い範囲を選択する設定が維持されている間、前記時間区間毎の前記ビートの周期及び位相の算出を、前記狭い範囲を用いて行う
請求項
1に記載のビート音発生タイミング生成装置。
【請求項3】
前記制御部は、前記BPMの範囲を切り替えるボタンが長押しされている間、前記BPMの範囲を前記広い範囲に設定し、前記ボタンの長押しが解除された場合に、前記BPMの範囲を前記狭い範囲に変更する
請求項1
又は2に記載のビート音発生タイミング生成装置。
【請求項4】
前記算出部は、前記複数の強度データが示す前記タイミングに基づいて前記複数の強度データについてのBPMを定め、前記BPMの一周期を前記ビートの周期として算出するともに、前記BPMを示す正弦波における前記ビート音の発生タイミングの相対位置を前
記ビートの位相として算出し、
前記検出部は、前記ビートの周期及び前記ビートの位相を示すカウント値を求め、サンプリングレートの1サンプル毎にインクリメントを行うカウンタを用いて前記カウント値の計時を行い、前記カウンタの値が前記カウント値に達したタイミングを前記ビート音の発生タイミングとして検出する
請求項1から
3のいずれか一項に記載のビート音発生タイミング生成装置。
【請求項5】
前記算出部は、前記複数の強度データの夫々と複数個のBPMの夫々について行うフーリエ変換によって得られたフーリエ変換データの値が最大となるときのBPMの一周期を前記ビートの周期として算出する
請求項
4に記載のビート音発生タイミング生成装置。
【請求項6】
情報処理装置が、入力された楽曲のデータから、夫々が前記楽曲のビートを司るタイミングと、前記タイミングにおけるパワーとを示す複数の強度データであって、所定の時間区間における複数の強度データを生成することと、
前記情報処理装置が、前記時間区間毎に、前記複数の強度データを用いて前記楽曲のビートの周期及び位相を算出することと、
前記情報処理装置が、前記楽曲のビートの周期及び位相に基づいて、ビート音の発生タイミングを検出することと、
前記情報処理装置が、前記時間区間毎の前記ビートの周期及び位相の算出に用いるBPM(Beats Per Minute)の
数値範囲として、広い範囲と、前記広い範囲より狭い範囲との一方を設定することと
を含
み、
前記狭い範囲が、
(1)前記広い範囲内で、予め決められた範囲、
(2)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたときのBPM値を中心とした所定の範囲、又は
(3)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたとき以降の前記ビートの周期及び位相の算出に用いられるBPM値を中心とした所定の範囲
である
ビート音発生タイミング生成方法。
【請求項7】
前記情報処理装置は、前記狭い範囲を選択する設定が維持されている間、前記時間区間毎の前記ビートの周期及び位相の算出を、前記狭い範囲を用いて行う
請求項
6に記載のビート音発生タイミング生成方法。
【請求項8】
前記情報処理装置は、前記BPMの範囲を切り替えるボタンが長押しされている間、前記BPMの範囲を前記広い範囲に設定し、前記ボタンの長押しが解除された場合に、前記BPMの範囲を前記狭い範囲に変更する
請求項
6又は7に記載のビート音発生タイミング生成方法。
【請求項9】
入力された楽曲のデータから、夫々が前記楽曲のビートを司るタイミングと、前記タイミングにおけるパワーとを示す複数の強度データであって、所定の時間区間における複数の強度データを生成する処理と、
前記時間区間毎に、前記複数の強度データを用いて前記楽曲のビートの周期及び位相を算出する処理と、
前記楽曲のビートの周期及び位相に基づいて、ビート音の発生タイミングを検出する処理と、
前記時間区間毎の前記ビートの周期及び位相の算出に用いるBPM(Beats Per Minute)の
数値範囲として、広い範囲と、前記広い範囲より狭い範囲との一方を設定する処理と
をコンピュータに実行させるプログラム
であって、
前記狭い範囲が、
(1)前記広い範囲内で、予め決められた範囲、
(2)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたときのBPM値を中心とした所定の範囲、又は
(3)前記BPMの数値範囲が前記広い範囲から前記狭い範囲に変更されたとき以降の前記ビートの周期及び位相の算出に用いられるBPM値を中心とした所定の範囲
であるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ビート音発生タイミング生成装置、ビート音発生タイミング生成方法、及びプログラムに関する。
【背景技術】
【0002】
従来、楽曲の信号から、ビート音の発生タイミングを生成する技術がある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
楽曲には、音楽的にテンポがほぼ一定であるにも関わらず、幾つかの内在的なビートが同時に存在している場合が少なくない。例えば、楽曲を楽譜上の四分音符に合わせて刻むこともできれば、二拍三連に合わせて刻むこともできる場合がある。従来技術では、楽曲の進行において、ある時間区間では四分音符に合わせたビートを検出し、ある時間区間では二拍三連に合わせたビートを検出するといった、不安定なビート音の発生タイミングを生成することがあった。
【0005】
本開示は、ビート音の発生タイミングを安定させることのできるビート音発生タイミング生成装置、ビート音発生タイミング生成方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本開示の一側面は、入力された楽曲のデータから、夫々が前記楽曲のビートを司るタイミングと、前記タイミングにおけるパワーとを示す複数の強度データであって、所定の時間区間における複数の強度データを生成する生成部と、
前記時間区間毎に、前記複数の強度データを用いて前記楽曲のビートの周期及び位相を算出する算出部と、
前記楽曲のビートの周期及び位相に基づいて、ビート音の発生タイミングを検出する検出部と、
前記時間区間毎の前記ビートの周期及び位相の算出に用いるBPM(Beats Per Minute)の範囲として、広い範囲と、前記広い範囲より狭い範囲との一方を設定する制御部と
を含むビート音発生タイミング生成装置である。
【0007】
本開示の一態様は、上記したビート音発生タイミング生成装置と同様の特徴を有する、ビート音発生タイミング生成方法、プログラム、プログラムを記録した記録媒体などであってもよい。
【図面の簡単な説明】
【0008】
【
図1】
図1は、ビート音出力タイミング発生装置の構成例を示す。
【
図3】
図3は、生成部の処理例を示すフローチャートである。
【
図4】
図4Aは、生成部に入力される12秒分の楽曲のディジタル信号(楽曲信号ともいう)の例を示し、
図4Bは、
図4Aの楽曲信号から生成されたSpxデータの例を示す。
【
図5】
図5は、算出部の処理例を示すフローチャートである。
【
図6】
図6は、Spxデータとフーリエ変換に用いるBPMの正弦波の例を示す図である。
【
図7】
図7は、BPMを示す余弦波とビートの発生タイミングとの関係を図示する。
【
図8】
図8は、検出部104によるビート発生タイミングの検出処理の例を示すフローチャートである。
【
図9】
図9Aは、楽曲の信号から検出したビート位置(ビート音の発生タイミング)を縦線で示した図である。
図9Bは、
図9Aに示した例に該当するBPM値の時間経過を示す。
【
図10】
図10は、楽曲のある瞬間におけるスペクトル強度データを示す。
【
図11】
図11は、BPMの範囲を設定する第1の方法を示す処理例を示すフローチャートである。
【
図13】
図13は、BPMの範囲を設定する第2の方法を示す処理例を示すフローチャートである。
【
図14】
図14は、BPMの範囲を設定する第3の方法を示す処理例を示すフローチャートである。
【
図15】
図15は、BPMの範囲を設定する第3の方法を示す処理例を示すフローチャートである。
【
図16】
図16は、
図9Aで示した楽曲の信号に関して、第2及び第3の方法を実施した場合に検出されるビートを縦線で表したものである。
【発明を実施するための形態】
【0009】
演奏又は再生される楽曲に合わせて対してビートを刻む場合、そのビートには多様性がある。多様性とは、「音楽的に良好なビートの刻み方」は、必ずしも一通りではないということである。通常、楽曲には、音楽的にテンポがほぼ一定であるにも関わらず、いくつかの内在的なビートが存在する。「良好なビート」は、楽譜上の四分音符に合わせて刻まれるビートであるかも知れない。或いは、二拍三連に合わせて刻まれるビートであるかもしれない。
【0010】
従来技術におけるビート検出(ビート音の発生タイミング生成)のアルゴリズムは、しばしばこれらのビートを時間的に混在して検出し、ビートに合わせた音(ハンドクラップ音など)を出力する。すなわち、或る時間区間では四分音符に合わせて音が出力され、別の時間区間では二拍三連に合わせて音が出力される。ビートをBMP値で表したとき、これらは時間区間毎の不連続な値として現れる。
【0011】
図9Aは、楽曲の信号から検出したビート位置(ビート音の発生タイミング)を縦線で示した図である。
図9Aに示す例では、楽曲の進行の途中でビート音の発生タイミングの周期が断続的に変化している。
図9Bは、
図9Aに示した例に該当するBPM値の時間経過を示す。このような、ビート音の発生タイミングの周期が断続的に変化する現象は、各瞬間に楽曲の進行が変化しているために起こる訳ではない。すなわち、楽曲において常に二つのビート(例えば、四分音符と二拍三連)が内在的に共存している状態において、アルゴリズムがある瞬間は一方のビートを選択し、またある瞬間は他方のビートを選択してしまうことから起こる。もっとも、ビートの多様性からいずれか一方のビートが正しく、他方が誤っているとは判断できない。
【0012】
内在的に複数存在するビートを選択する際に考慮されるスペクトル強度データは、
図10に示すように、幾つかのピークを有し、ピークの夫々は、内在的なビートの存在をあらわしている。従来技術では、複数のピーク中の最大のピークを各瞬間のビートとして選択する。このため、結果的に断続的にBPMが変化することになる。
【0013】
このような、断続的なBPMの変化に従ったビート音の発生タイミングに従って音を発することは、好適でない場合がある。例えば、或る瞬間で四分音符に従ったビートを検出している場合には、恒常的に四分音符でビートを検出し続けるのが好ましい。実施形態に係るビート音発生タイミング生成装置(ビート検出装置)は、上記のような、不安定なビート音の発生タイミングが生成される問題を解決するためになされたものである。
【0014】
実施形態に係るビート音発生タイミング生成装置は、以下の構成を有する。
(1)入力された楽曲のデータから、夫々が楽曲のビートを司るタイミングと、タイミングにおけるパワーとを示す複数の強度データであって、所定の時間区間における複数の強度データを生成する生成部。
(2)時間区間毎に、複数の強度データを用いて楽曲のビートの周期及び位相を算出する算出部。
(3)楽曲のビートの周期及び位相に基づいて、ビート音の発生タイミングを検出する検出部。
(4)時間区間毎のビートの周期及び位相の算出に用いるBPM(Beats Per Minute)の範囲として、広い範囲と、前記広い範囲より狭い範囲との一方を設定する制御部。
【0015】
ビート音発生タイミング生成装置において、以下の構成を採用してもよい。すなわち、 狭い範囲のBPMの範囲が、現在の時間区間においてビートの周期及び位相の算出に用いられるBPM値を中心とした所定の数値範囲である。このようにすれば、現在の時間区間におけるBPM値を中心としたBPMの範囲で、ビートの周期及び位相を算出することができ、所望のビートを安定的に検出可能となる。
【0016】
ビート音発生タイミング生成装置において、以下の構成を採用してもよい。すなわち、算出部は、狭い範囲を選択する設定が維持されている間、時間区間毎のビートの周期及び位相の算出を、狭い範囲を用いて行う。このようにすれば、楽曲のビートの変化に応じてBPMの範囲を追従させることができる。
【0017】
ビート音発生タイミング生成装置において、以下の構成を採用してもよい。すなわち、 制御部は、BPMの範囲を切り替えるボタンが長押しされている間、BPMの範囲を広い範囲に設定し、ボタンの長押しが解除された場合に、BPMの範囲を狭い範囲に変更する。このようにすれば、一つのボタンを用いて広い範囲と狭い範囲との切替を行うことができる。
【0018】
ビート音発生タイミング生成装置において、以下の構成を採用してもよい。すなわち、 算出部は、複数の強度データが示すタイミングに基づいて複数の強度データについてのBPMを定め、BPMの一周期をビートの周期として算出するともに、BPMを示す正弦波におけるビート音の発生タイミングの相対位置をビートの位相として算出する。検出部は、ビートの周期及びビートの位相を示すカウント値を求め、サンプリングレートの1サンプル毎にインクリメントを行うカウンタを用いてカウント値の計時を行い、カウンタの値がカウント値に達したタイミングをビート音の発生タイミングとして検出する。
【0019】
ビート音発生タイミング生成装置において、以下の構成を採用してもよい。すなわち、算出部は、複数の強度データの夫々と複数個のBPMの夫々について行うフーリエ変換によって得られたフーリエ変換データの値が最大となるときのBPMの一周期をビートの周期として算出する。
【0020】
〔実施形態〕
以下、図面を参照して、実施形態に係るビート音発生タイミング生成装置、ビート音発生タイミング生成方法、及びプログラムについて説明する。実施形態の構成は例示である。実施形態の構成に限定されない。
【0021】
図1は、ビート音発生タイミング生成装置の構成例を示す。ビート音発生タイミング生成装置は、単独の装置として構成される場合もあれば、カラオケ機器、或いは電子楽器に組み込まれる場合もある。
図1において、ビート音発生タイミング生成装置1は、バス3に接続された、CPU10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、ハードディスクドライブ(HDD)13と、入力装置14と、表示装置15と、通信インタフェース(通信I/F)16とを含む。ビート音発生タイミング生成装置1は、さらに、バス3に接続された、ディジタルアナログ変換器(D/A)17と、アナログディジタル変換器(A/D)20とを含む。D/A17にはアンプ(AMP)18が接続され、AMP18にはスピーカ19が接続されている。A/D20には、マイクロフォン(MIC)21が接続されている。
【0022】
ROM11は、CPU10によって実行される様々なプログラムやプログラムの実行に際して使用されるデータを記憶している。RAM12は、プログラムの展開領域、CPU10の作業領域、データの記憶領域などとして使用される。HDD13は、プログラムやプログラムの実行に際して使用されるデータ、楽曲データなどを記憶する。楽曲データは、例えばMP3やWAVE形式などの所定の音声ファイルのフォーマットを有する音データである。音声ファイルのフォーマット形式は、MP3やWAVE形式以外でもよい。ROM11及びRAM12は、主記憶装置の一例であり、HDD13は補助記憶装置の一例である。主記憶装置及び補助記憶装置は、記憶装置又は記憶媒体の一例である。
【0023】
入力装置14は、キー、ボタン、タッチパネル、つまみ、スイッチなどであり、情報(指示や命令を含む)の入力、或いは楽音の生成や再生に関するパラメータの設定に使用される。表示装置15は、情報の表示に使用される。通信I/F16は、ネットワーク2に接続されており、通信に係る処理を司る。CPU10は、例えば入力装置14から入力された指示に応じて、ネットワーク2から所望の楽曲データ(楽曲信号)をダウンロードし、HDD13に記憶することができる。
【0024】
CPU10は、プログラムの実行によって、様々な処理を行う。処理は、上記した楽曲ダウンロードに係る処理の他、楽曲の再生に係る処理、楽曲のビート音発生タイミングを生成する処理、ビート音発生タイミングに合わせてビート音(例えば、クラップ音、特にハンドクラップ音など)を出力する処理などを含む。
【0025】
例えば、CPU10は、楽曲データを再生する場合、プログラムの実行によって、HDD13からRAM12に読み出した楽曲データから楽曲の音を表すディジタルデータ(ディジタル信号)を生成し、D/A17に供給する。D/A17は、音を表すディジタルデータをディジタルアナログ変換によってアナログ信号に変換し、AMP18に出力する。AMP18によって振幅が調整されたアナログ信号はスピーカ19から出力される。
【0026】
MIC21は、例えば、スピーカ19から出力される楽曲の音を伴奏(カラオケ)とする歌唱音などを集音する。MIC21で集音されたアナログの音声信号は、AMP18で振幅を増幅され、スピーカ19から増幅される。このとき、歌唱音は楽曲音とミキシングされても、それぞれ別個のスピーカから出力されてもよい。
【0027】
また、MIC21は、楽器を用いた演奏(いわゆる生演奏)による音声や外部機器からの楽曲の再生音声を集音して音を拡大(スピーカ19から出力)したり、録音したりする場合にも使用される。例えば、MIC21で集音された演奏音の信号は、A/D20によってディジタル信号に変換され、CPU10に渡される。CPU10は、演奏音の信号を音声ファイルのフォーマットに従った形式に変換して音声ファイルを生成し、HDD13に記憶する。MIC21で集音される楽曲の音信号について、ビート音発生タイミングの生成処理が行われてもよい。
【0028】
なお、ビート音発生タイミング生成装置1がコンパクトディスク(CD)などのディスク型記録媒体のドライブ装置(図示せず)を含んでもよい。この場合、ドライブ装置を用いてディスク型記録媒体から読み出された楽曲の音を表すディジタル信号がD/A17に供給され、楽曲音が再生されてもよい。この場合、ディスク型記録媒体から読み出された楽曲の音信号について、ビート音発生タイミングの生成処理が行われてもよい。
【0029】
図2は、制御部100の構成例を示す。CPU10は、プログラムの実行によって、
図2に示すような、時間スパースデータ(「Spxデータ」と表記:強度データに相当)の生成部101、バッファ102、周期データ及び位相データの算出部103、ビートの発生タイミングの検出部104、及びビート音の再生処理部105などを含んだ制御部100として動作する。バッファ102は、例えば、RAM12やHDD13の所定の記憶領域に設けられる。
【0030】
Spxデータの生成部101は、楽曲の音を表すディジタルデータを用いて、Spxデータを生成して出力する。バッファ102は、少なくとも所定時間分のSpxデータ(複数の強度データに相当)を蓄積する。本実施形態では、所定時間(時間区間)の長さとして6秒を例示するが、所定時間は6秒より長くても短くてもよい。算出部103は、バッファ102に蓄積された所定時間分のSpxデータの集合を用いて、ビートの周期データ及び位相データを算出する。発生タイミングの検出部104は、周期データ及び位相データを用いてビート音の発生タイミングを検出する。再生処理部105は、発生タイミングに合わせたビート音の再生処理を行う。
【0031】
以下、制御部100をなす各部における処理の詳細を説明する。
<Spxデータの生成>
生成部101によるSpxデータの生成について説明する。生成部101には、再生に係る楽曲データ(音声出力のためにD/A17に送られたデータ)の音を表すディジタル信号が入力される。音を表すディジタル信号(楽曲信号)は、HDD13に記憶された楽曲データの再生処理によるものでも、MIC20で集音された音声信号のA/D変換によって得られたものでもよい。
【0032】
音を表すディジタルデータは、RAM12に記憶され、生成部101の処理に使用される。音を表すディジタルデータは、アナログ信号から所定のサンプリングレートに従って採取されたサンプル(標本)データ(通常、アナログ信号の電圧値)の集合である。本実施形態では、一例として、サンプリングレートは44100Hzであるとする。但し、サンプリングレートは、所望のFFT解像度が得られる限りにおいて適宜変更可能である。
【0033】
図3は、生成部101の処理例を示すフローチャートである。生成部101には、楽音出力(再生)のためにD/A17へ送られた、楽曲の音を表すディジタルデータ(ディジタル信号)が入力される。生成部101は、入力されたディジタルデータから、所定個数のサンプル(「フレーム」と呼ぶ)を取得する(S01)。所定個数は、本実施形態では1024であるがこれより多くても少なくてもよい。サンプルの取得は、所定間隔で行われる。所定間隔は、例えば5msであるが、これより多くても少なくてもよい。
【0034】
S02では、生成部101は、間引き処理を行う。すなわち、生成部101は、1024個のサンプルに対する1/4間引きを行って、256個のサンプルを得る。間引きは1/4間引き以外でもよい。S03では、生成部101は、256個のサンプルに対して高速フーリエ変換(FFT)を施し、FFTの結果(周波数バンド幅毎のパワー)から、フレーム単位でのパワー(スペクトル強度)の大きさを示すデータ(パワーデータという)を得る(S04)。なお、パワーは振幅の2乗で表されることから、「パワー」との概念には振幅も含まれる。
【0035】
パワーデータは、例えば、256個のサンプルに対するFFTの実施によって得られるパワーの総和である。但し、今回のフレームの各周波数バンド幅のパワーから前回のフレームにおける、対応するバンド幅のパワーを差し引き、その値が正である(パワーが増加している)場合にはそのパワーの値を総和計算のために残し、そうでない(差し引いた値が負である(パワーが減少している))値は無視してもよい。パワーの増加分が大きいところがビートである可能性が高いからである。
【0036】
また、他のフレームとの比較対象が同じである限りにおいて、総和の算出に用いる値は、今回のフレームのパワーの総和であっても、今回のフレームのパワーから前回のフレームのパワーを引いた値が正の値のパワーの総和であっても、今回のフレームのパワーから前回のフレームのパワーを差し引いた差分であってもよい。また、FFTの実施によって得られるパワースペクトルにおいて、所定の周波数より低い周波数についてのみ、上記した差分の算出が行われてもよい。所定の周波数以上の周波数については、ローパスフィルタを用いてカットしてもよい。
【0037】
パワーデータは、フレーム単位で、RAM12やHDD13に記憶される。生成部101は、フレーム単位のパワーデータが作成される毎に、パワーの総和(ピーク値)の大きさを比較して大きい方を残し、小さい方は破棄する(S05)。生成部101は、S05で残した総和より大きい総和が所定時間出現していないか否かを判定する(S06)。所定時間は例えば100msであるが、100msより大きくても小さくてもよい。より大きい総和を示すデータが出現していない状態が所定時間続いた場合に、生成部101は、そのパワーの総和を示すデータ(すなわち、所定時間の時間区間における最大のピーク)をSpxデータとして抽出し、バッファ102に記憶(保存)する(S07)。このように、Spxデータは、楽音を示すディジタルデータのピーク値を100ms間隔で抽出したデータであり、楽曲のビートを司るタイミングを示す情報(タイミング情報)と、そのタイミングにおけるパワーとを示すデータである。Spxデータは、バッファ102に複数個蓄積される。生成部101は、S01からS06までの処理を繰り返し行う。
【0038】
図4Aは、生成部101に入力される12秒分の楽曲のディジタル信号であり、
図4Bは、
図4Aに示した楽曲のディジタル信号から生成されたSpxデータの例を示す。
図4Bに示すグラフの横軸は時間で、縦軸はパワーである。このグラフにおいて、上端に黒丸のついた縦線が、
図4Aに示した楽曲のディジタル信号から得られた個々のSpxデータを示し、横軸(時間軸)の位置がタイミングを示し、縦線の長さがパワーを示す。Spxデータは、100ms間隔で生成される場合、1秒間に10個程度生成される。
【0039】
<周期データ及び位相データの算出>
図5は、算出部103の処理例を示すフローチャートである。S10において、生成部101にて生成された新たなSpxデータがバッファ102に到来し、蓄積される。S11において、バッファ102に蓄積されたSpxデータのうち所定時間分のSpxデータ(複数の強度データに相当)がバッファ102から取得される。所定時間は、例えば6秒間であるが、ビートの周期及び位相を得られる限りにおいて6秒より長くても短くてもよい。以降のS12~S16の処理は、S11で取得した6秒分のSpxデータを用いて行われる処理である。S12では、6秒分のSpxデータについて、所定個数(例えば20個)のBPM(Beats Per Minute:テンポ(リズムの速さ)を示す)に対応したフーリエ変換を施し、ビートの周期(BPMの一周期)とビートの位相(ビート音の発生タイミングとを算出する。
【0040】
具体的に説明すると、6秒分のSpxデータについて所定のBPM範囲における所定個数のBPM、例えばBPM86~168に対応する20個、のBPMに対応する周波数(BPM周波数)f = {86,90,94,…,168}/60 について、Exp(2πjft)(BPM周波数で振動する正弦波、振動数に関係無く振幅は同じ)に対する積和をとる。すなわちフーリエ変換を行う。フーリエ変換の結果をフーリエ変換データc(i) (i=0,1, 2, 3,…,19)とする。
【0041】
図6は、Spxデータとフーリエ変換に用いるBPM周波数を有する正弦波の例を示す図である。
図6の例では、BPM72の正弦波(実線で示す)と、BPM88の正弦波(破線で示す)と、BPM104の正弦波(一点鎖線で示す)とが例示されている。フーリエ変換データc(i)の値は以下の式1により求められる。なお、BPMの値及びその個数は適宜変更することができる。
【数1】
【0042】
ここに、式1におけるt(k)は、Spxデータの存在する過去6秒のうちの時間位置であり、単位は秒である。kはそのSpxデータのインデックスであり、k=1,...,Mである(MはSpxデータの個数)。また、x(t(k))は、その瞬間のSpxデータの値(ピーク値の大きさ)を示す。jは虚数単位(j2=-1)である。f(i)はBPM周波数であり、例えばBPM120は2.0Hzである。
【0043】
算出部103は、c(i)=(c0, 1, c2, c3, ... ,c19)のうち、その絶対値が最大値に対応するBPMをSpxデータ(ビート)のBPMに決定する(S13)。また、その位相値(Phase)φ= Arg(c(i))[rad] を、6秒間分のSpxデータについてのビートタイミングとする。 ビートタイミングは、周期的に到来するビートの発生タイミングに対する相対的な位置を示す。
【0044】
位相値φは複素数の偏角であり、c=c
re+jc
im(c
reは実部でc
imは虚部)とした場合に、以下の式2により得られる。
【数2】
【0045】
位相値φの算出によって、BPMの正弦波に対するビートの発生タイミングの相対位置、すなわち、BPMの一周期に対してビート発生タイミングがどのくらい遅れているかがわかる。
【0046】
図7は、BPMを示す余弦波(EXP(2πjft)の実部)と、ビートの発生タイミングとの関係を図示する。
図7に示す例では、Spxデータの個数が4であり、そのBPMが72である。
図7に示すSpxデータの夫々は、式2を用いて求められるc(i)の値(位相)であり、ビートの発生タイミングを示す。Spxデータ間がビート発生タイミングの間隔をなす。
図7に示す例では、位相値φの計算によって得られる、BPM周波数を有する余弦波からπ/2遅れたタイミングがビートの発生タイミングとなる。算出部103は、BPMの一周期のサンプル数を周期データとする(S15)。
【0047】
例えば、BPMが104であり、サンプリングレートが44100Hzの場合では、周期データ(サンプル数)は、44100[個]/(104/60)=25442[個]となる。また、周期データが25442[個]の場合において、位相値φが0.34[rad]であった場合、位相データ(サンプル数)は、25442[個]×0.34[rad]/2π[rad]=1377[個]となる。そして、算出部103は、周期データ及び位相データを出力する(S16)。なお、算出部103は、6秒分のSpxデータが蓄積されるごとに、S11~S16の処理を繰り返し行う。これにより、楽曲のリズムの変更に追従することができる。
【0048】
<ビート発生タイミングの検出>
図8は、検出部104によるビート発生タイミングの検出処理の例を示すフローチャートである。S21において、検出部104は、新しい周期データ及び位相データが算出部103から提供されたかを判定する。新しい周期データ及び位相データが提供された場合には、処理がS22に進み、そうでない場合には、処理がS23に進む。
【0049】
S22では、検出部104は、新しい周期データ及び位相データをビート発生タイミングの検出に採用し、古い周期データ及び位相データは破棄する。このとき、Spxデータの作成時に、Spxデータをなすフレームのサンプルは、100ms遅延が与えられた状態となっているため、ここで、演奏又は再生中の楽曲とリズムと、後述するハンドクラップ音とが一致するように時間調整(位相調整)が行われる。その後、処理がS23に進む。
【0050】
S23では、周期データのサンプル数及び位相データのサンプル数を用いたカウンタの設定を行う。例えば、検出部104は、サンプリングレートの1サンプル(サンプリングレートに従ったアナログ信号の電圧チェックの間隔)毎にカウントアップ(インクリメント)を行うカウンタを有し、当該カウンタのカウント値を1サンプル毎にインクリメントする。これによってカウント値が零から所定値(位相データのサンプル数(カウント値)及び周期データのサンプル数(カウント値)の和を示す値)以上になるのを待つ(S24)。
【0051】
カウンタのカウント値が所定値以上になると、検出部104は、予測に基づく、ビート音の発生タイミングを検出し、ビート音の出力指示を出力する(S25)。再生処理部105は、出力指示に応じて、ROM11又はHDD13に予め記憶していたビート音(例えば、ハンドクラップ音)のディジタルデータをD/A17へ送る。ディジタルデータはD/A17でアナログ信号に変換され、AMP18で振幅増幅された後、スピーカ19から出力される。これによって、再生又は演奏中の楽曲に重ねてハンドクラップ音が出力される。
【0052】
<BPMの範囲設定>
上記した例では、所定のBPMの範囲(86~168)から選ばれた所定個数(20個)BPMに関して、フーリエ変換値の絶対値が最大となるBPMをビート音発生タイミングのBPMに決定する(
図5のステップS13及びS14)。実施形態に係るビート音発生タイミング生成装置1では、入力装置14の操作によって、BPMの範囲を「広い範囲」と「狭い範囲」との2段階に変更することができる。
【0053】
(第1の方法)
図11は、BPMの範囲を設定する第1の方法を示す処理例を示すフローチャートである。
図11のフローは、CPU10がプログラムを実行することによって行われる。ステップS101では、CPU10は、入力装置14の操作によって、BPMの範囲を変更する命令が入力されたか否かを判定する。
【0054】
ステップS101において、BPMの範囲を広い範囲に変更する命令が入力された(広い範囲が指定された)と判定される場合には、CPU10は、BPMの範囲を広い範囲に設定する(ステップS102)。広い範囲の一例として、CPU10は、BPMの最小値を100に設定するとともに、BPMの最大値を240に設定する。
【0055】
これに対し、BPMの範囲を狭い範囲に変更する命令が入力された(狭い範囲が指定された)と判定される場合には、CPU10は、BPMの範囲を狭い範囲に設定する(ステップS103)。狭い範囲の一例として、CPU10は、BPMの最小値を120に設定するとともに、BPMの最大値を160に設定する。なお、変更なしと判定される場合には、CPU10は特に処理を行わず、現在のBPMの範囲の設定が維持される。なお、広い範囲及び狭い範囲の夫々におけるBPMの最小値及び最大値は例示であり、適宜の値を設定可能である。これは、後述する第2及び第3の方法においても同様である。
【0056】
図11に示す処理は、例えば、入力装置14に含まれる一つのボタンの操作によって行われる。すなわち、CPU10は、周期的に、ボタンの状態を監視する。
図12は、ボタンの状態を示す表である。ボタンの直前の状態が押していない状態で、現在の状態も押されていない状態であれば、「変更なし」として、CPU10は、BPMの範囲を変更する処理を行わない。これに対し、ボタンが長押しされた場合、すなわち、2以上の状態の検出タイミングにおいて、押されている状態が継続している場合には、その操作をCPU10は変更命令の入力と判定し、BPMの範囲を広い範囲に変更する処理を行う(S101)。また、長押しの状態からボタンの押圧が解除された場合には、その操作をCPU10は変更命令の入力と判定し、BPMの範囲を狭い範囲に変更する処理を行う。
【0057】
上記した構成の代わりに、CPU10は、ボタンが押される毎に、BPMの範囲を変更するようにしてもよい。また、ボタンの代わりに、広い範囲及び狭い範囲の二つの範囲に対応するレンジを有するつまみが用いられてもよい。
【0058】
(第2の方法)
図13は、BPMの範囲を設定する第2の方法を示す処理例を示すフローチャートである。
図13のフローは、CPU10がプログラムを実行することによって行われる。ステップS201では、CPU10は、入力装置14の操作によって、BPMの範囲を変更する命令が入力されたか否かを判定する。
【0059】
ステップS201において、BPMの範囲を広い範囲に変更する命令が入力された(広い範囲が指定された)と判定される場合には、CPU10は、ステップS102と同様に、BPMの範囲を広い範囲に設定する(ステップS202)。
【0060】
これに対し、BPMの範囲を狭い範囲に変更する命令が入力された(狭い範囲が指定された)と判定される場合には、CPU10は、現在のBPM値mを取得し、BPMの範囲を、mの値から所定のパーセンテージだけ離れた範囲に設定する。
図12に示す例では、mの値から上下7%離れた値の夫々がBPMの最小値及び最大値に設定されている。所定のパーセンテージは、例えば2~15%であり、さらに好ましくは5~10%である。
【0061】
(第3の方法)
図14及び15は、BPMの範囲を設定する第3の方法を示す処理例を示すフローチャートである。
図14及び15のフローは、CPU10がプログラムを実行することによって行われる。ステップS301では、CPU10は、入力装置14の操作によって、BPMの範囲を変更する命令が入力されたか否かを判定する。
【0062】
ステップS301において、BPMの範囲を広い範囲に変更する命令が入力された(広い範囲が指定された)と判定される場合には、CPU10は、ステップS102と同様に、BPMの範囲を広い範囲に設定する。また、範囲が広いか狭いかを示すフラグの値を「広い」(値:0又は1)に設定する(ステップS302)。これに対し、BPMの範囲を狭い範囲に変更する命令が入力された(狭い範囲が指定された)と判定される場合には、CPU10は、フラグの値を「狭い」(値:1又は0)に設定する(ステップS303)。
【0063】
図15に示すように、第3の方法では、
図5のステップS13において、フーリエ変換のデータの絶対値の最大値に対応するBPM値mが算出される。ステップS311にてCPU10がフラグの値を確認し、フラグの値が「狭い」である場合には、CPU10は、ステップS202と同様に、BPMの範囲を、BPM値mの上下7%の範囲に狭める。その後、処理がステップS14に進む。これに対し、フラグの値が「広い」である場合には、広いBPMの範囲でステップS14の処理が実行される。
【0064】
なお、第2及び第3の方法のS201及びS301の夫々においても、「変更なし」の場合には、CPU10は特に処理を行わない。また、第2及び第3の方法におけるBPMの範囲、最大値及び最小値の値は、第1の方法と同様に任意の値を採ることができる。また、
図12の処理に係る入力装置14の操作として、第1の方法において説明したボタンやつまみの操作を適用することができる。
【0065】
<実施形態の効果>
実施形態に係るビート音発生タイミング生成装置1に係る第1~第3の方法では、通常はBPMの範囲を「広い範囲」に設定しておく。そして、ビート音の発生タイミングの生成(ビートの検出)が進行している際に、より安定的なビートの検出が望まれる場合に、入力装置14(操作子)の操作によって、ビートを検出するためのBPMの範囲を「狭い範囲」に切り替える。
【0066】
通常、楽曲の内在的ビートは整数比であるところの2/3、又は4/3などである。これより、「狭い範囲」を広い範囲より数%~数十%狭いBPMの範囲に限定する。これによって、二つのビートのうちの一方が、最大のBPMを検出するためのBPMの範囲から外れることによって、該当のビートに基づくビート音の発生タイミングが生成されなくなる。これによって、恒常的にほぼ一定のビート音の発生タイミングを生成することが可能となる。
【0067】
また、第2の方法では、入力装置14(操作子)の操作の瞬間、例えば、ボタンの長押し(「広い範囲」の選択)からボタンの押圧を解除したときに、現在のBPM値を取得し、取得したBPM値の上下数パーセントを「狭い範囲」として設定し、ビートを検出するためのBPMの範囲を「狭い範囲」に切り替える。
【0068】
ビート音発生タイミング生成装置1の使用者は、操作子を操作する際、使用者が希望するビートが検出されている瞬間を選んで操作する(ボタンの長押し解除など)ことにより、使用者の希望するビートのBPMを含んだBPMの狭い範囲を設定することができる。これにより、使用者の望むビートについてのビート音の発生タイミングを生成でき、交錯のない、恒常的にほぼ一定のビート音の発生タイミングが生成されるようになる。
【0069】
さらに、第3の方法では、入力装置14(操作子)の操作の瞬間にBPM値mを取得し、BPM値mの上下数パーセントを「狭い範囲」として設定し、「狭い範囲」(フラグ=狭い)が指定されている間は、常に直前に検出したBPM値mの上下数パーセントを「狭い範囲」として設定し続ける。これにより、安定したビートの検出を続けながらも、楽曲の変化に自然な形で追従するビート検出が実現できる。
【0070】
図16は、
図9Aで示した楽曲の信号に関して、第2及び第3の方法を実施した場合に検出されるビート(ビート音の発生タイミング)を縦線で表したものであり、BPMの変化が9Bに示したように発生するものであっても、ビート音の発生タイミングを安定的に生成(検出)していることがわかる。
【0071】
なお、制御部100が行う処理は、複数のCPU(プロセッサ)によって行うのでも、マルチコア構成のCPUによって行うのでもよい。また、制御部100が行う処理は、CPU10以外のプロセッサ(DSPやGPUなど)、プロセッサ以外の集積回路(ASICやFPGAなど)、或いはプロセッサと集積回路との組み合わせ(MPU、SoCなど)によって実行されてもよい。
【符号の説明】
【0072】
1・・・ビート音発生タイミング生成装置
2・・・ネットワーク
10・・・CPU
11・・・ROM
12・・・RAM
13・・・HDD
14・・・入力装置
15・・・表示装置
16・・・通信インタフェース
17・・・ディジタルアナログ変換器
18・・・アンプ
19・・・スピーカ
20・・・アナログディジタル変換器
21・・・マイクロフォン
100・・・制御部
101・・・生成部
102・・・バッファ
103・・・算出部
104・・・検出部
105・・・再生処理部