たいこのめいじん の しくみ
流れている曲の“音そのもの”を耳で聴いて、リズムに合う譜面をその場で作っています。
おとなむけ・技術解説1 まず「音」を取り込む
Apple Music などの楽曲データは DRM で保護されていて、アプリから中身を直接読むことはできません。 そこで本アプリは、ファイルではなく“鳴っている音”を聴くという方法を採っています。
- マイク:スピーカーから出る音を拾います。エコーキャンセルやノイズ抑制などの通話向け加工はすべて切り、生の音を解析にまわします。
- デモきょく:内蔵の和太鼓アンサンブル曲。マイクなしですぐ遊べます。
- 取り込んだ音はその瞬間の解析だけに使い、録音・保存は一切しません。
2 リズムを解析する
取り込んだ音は、次の流れで「テンポ」と「拍の位置」に変換されます。Web Audio API の周波数解析を
25ms ごとに回し続けています。
図1:音の取り込みから譜面生成・プレイまで。金色の点線は、再生中のテンポの揺れにグリッドを合わせ続ける補正ループ。
- オンセット検出:周波数成分がどれだけ増えたか(スペクトラルフラックス)を見て、打楽器的な“アタック”の瞬間を拾います。
- テンポ推定:オンセット同士の間隔を集計し、いちばん多い間隔から BPM を割り出します(60〜180 BPM に折りたたみ)。
- 位相・グリッド:拍がどの時刻に来るかを円形ヒストグラムで推定し、「拍の格子」を確立します。
- 追従補正:生演奏はテンポが揺れるので、拍が来るたびにグリッドを少しずつ引き寄せます(位相同期ループ=PLL の考え方)。
3 未来の拍を予測して置く
グリッドが決まると、「次の拍が来る時刻」を計算できます。ノーツは画面を数秒かけて流れてくるので、 2〜4秒先の拍に先回りして配置します。だから曲にぴったり合ったタイミングで届きます。
図2:確立したグリッドを未来へ延長し、先回りでノーツを配置する。
ノーツは「何秒に置く」ではなく「何拍目か(beatIndex)」で管理しています。こうすると、テンポや位相の
補正でグリッドがずれても、全ノーツが自動でついてくるため、置き直しが要りません。
4 難易度と“盛り上がり”
譜面は小節(4拍)単位のパターンで組み立てます。さらに、直近の音量が曲の平均よりどれだけ大きいかで 密度を変えるので、サビはにぎやかに、静かな場面はまばらになります。
- かんたん(4歳〜):ドンが中心で、カッはたまに。ゆっくり流れ、判定もやさしめ。
- ふつう(6歳〜):カッが2割ほどに増え、少し速く流れます。
- 大きいドン:左右(F と J)を両手で同時に叩くと「ドカッ!!」のボーナス演出。片手でも減点はありません。
5 曲の終わりを見分ける
むずかしいのが「曲が終わった」判定です。曲が止まっても、残ったノーツを叩き続けると、その太鼓の音がマイクに回り込み、 「まだ鳴っている」と誤解しがちでした。そこで発想を変え、“静かな瞬間(谷)の深さ”を見ています。
図3:曲は音が途切れず谷が浅い。叩く音・声は瞬間的で、合間に必ず深い谷ができる。この谷を見れば、叩き続けていても曲の終わりがわかる。
- 直近1.5秒の音量のうち下位12%点(谷)が無音の基準を下回ったら「1曲おわり」。
- 叩く音・声はピークなので谷(下位側)には表れません。だから叩き音を打ち消す必要がありません。
- 曲が止まると新しいノーツを止め、画面外の先のノーツも消すので、自然に静かになって終了します。
6 効果音と、著作権への配慮
- 効果音は合成:ドン・カッの音は Web Audio でその場で合成しています(音源ファイルなし)。
- 楽曲は保存しない:再生中の音をその瞬間だけ解析します。録音・複製・送信は一切しません。
- オリジナル:キャラクター・デザインはオリジナル。デモ曲は CC-BY の和太鼓曲を収録し、設定画面と README にクレジットを表記しています。