← もどってあそぶ

たいこのめいじん の しくみ

流れている曲の“音そのもの”を耳で聴いて、リズムに合う譜面をその場で作っています。

おとなむけ・技術解説
「たいこのめいじん」は、スピーカーから流れている曲をマイクでリアルタイムに聴き取り、リズムを解析して、 曲に合った譜面をその場で生成しています。楽曲ファイルそのものは一切あつかわず、保存もしません。 だから Apple Music など手持ちのどんな曲でも、私的利用の範囲で遊べます。

1 まず「音」を取り込む

Apple Music などの楽曲データは DRM で保護されていて、アプリから中身を直接読むことはできません。 そこで本アプリは、ファイルではなく“鳴っている音”を聴くという方法を採っています。

2 リズムを解析する

取り込んだ音は、次の流れで「テンポ」と「拍の位置」に変換されます。Web Audio API の周波数解析を 25ms ごとに回し続けています。

音を聴く(マイク / デモきょく) スピーカーの音をそのまま取り込む ① オンセット検出 音の“立ち上がり”をスペクトラルフラックスで検出 ② テンポ推定 立ち上がりの間隔をヒストグラム集計 → BPM ③ ビートグリッド確立 どこが“拍”か(位相)を推定して格子を固定 ④ 譜面を生成 2〜4秒先の拍にノーツを先回りで配置 ⑤ プレイ・判定 ドン / カッのタイミングを判定・スコア・コンボ テンポ揺れを追従補正(PLL)

図1:音の取り込みから譜面生成・プレイまで。金色の点線は、再生中のテンポの揺れにグリッドを合わせ続ける補正ループ。

3 未来の拍を予測して置く

グリッドが決まると、「次の拍が来る時刻」を計算できます。ノーツは画面を数秒かけて流れてくるので、 2〜4秒先の拍に先回りして配置します。だから曲にぴったり合ったタイミングで届きます。

きこえた拍 いま 予測した拍 この範囲にノーツを置く

図2:確立したグリッドを未来へ延長し、先回りでノーツを配置する。

ノーツは「何秒に置く」ではなく「何拍目か(beatIndex」で管理しています。こうすると、テンポや位相の 補正でグリッドがずれても、全ノーツが自動でついてくるため、置き直しが要りません。

4 難易度と“盛り上がり”

譜面は小節(4拍)単位のパターンで組み立てます。さらに、直近の音量が曲の平均よりどれだけ大きいかで 密度を変えるので、サビはにぎやかに、静かな場面はまばらになります。

5 曲の終わりを見分ける

むずかしいのが「曲が終わった」判定です。曲が止まっても、残ったノーツを叩き続けると、その太鼓の音がマイクに回り込み、 「まだ鳴っている」と誤解しがちでした。そこで発想を変え、“静かな瞬間(谷)の深さ”を見ています。

曲がある 無音の基準 谷が浅い → まだ曲がある 曲がおわった+叩いている 谷が深い → 曲はもう無い

図3:曲は音が途切れず谷が浅い。叩く音・声は瞬間的で、合間に必ず深い谷ができる。この谷を見れば、叩き続けていても曲の終わりがわかる。

6 効果音と、著作権への配慮

🥁 もどってあそぶ

つくったひと:やなぎさわ