TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【バイブコーディング】ギターの音ゲーを作る(メトロノーム)

前回は、音声入力とリアルタイム音程/和音解析を実装した。

今回は、メトロノームを実装する。

メトロノーム

録音時と、再生時にメトロノームを鳴らす。

録音の開始時は、1小節分メトロノームを鳴らしてから開始するカウントインオプションを設ける。

メトロノームのクリック音

CubaseSteinberg Clickに近い音を再現する。

Steinberg Clickの技術仕様は公開されていないが、GeminiでDeepResearchを行ったところ、以下のような特徴を持つことが分かった。

音響特性
  • アクセント音(Hi):999 Hz
    • 1kHz付近は人間の聴覚感度が最も高い帯域(等ラウドネス曲線)。
    • ミックス内でも小音量で抜ける。
    • 音楽的音階から意図的にズラしている
      • B5やC6と完全一致しない。
      • 楽曲キーと協和しないことで「時間参照信号」として独立性を保つ。
    • 微妙なデチューンにより「音楽ではない機械的信号」として認識されやすい。
  • サブ音(Lo):849 Hz
    • 999Hzとの比率は音楽的インターバルに一致しない。
    • 約283セント差で旋律的に認識されにくい。
    • 音楽的文脈から切り離された設計。
波形と音色設計
  • 基本波形は純粋なサイン波。
  • 倍音をほぼ持たないため:
    • 「無機質」「sterile」と表現される。
    • 人工的で注意を引く。
エンベロープ設計(クリック感の本質)

クリック感は波形ではなく振幅の時間変化で決まる。

  • 推定パラメータ
    • Attack:0.5〜1ms
      • 完全瞬時立ち上がりはクリックノイズを発生させるため回避。
  • Decay:50〜100ms
    • サステインなし。
    • 急峻な減衰(指数関数または線形)。
  • Release:なし(ワンショット)
トランジェント強化技術
  • 微細な**ピッチエンベロープ(チャープ)**の可能性:
    • 開始1050Hz → 999Hzへ2msで下降
  • 聴覚的トランジェントを強調。
  • 「コツッ」という芯のある質感を付与。

クリック音の再現プログラム

DeepResarchの結果を基に、クリック音を再現するプログラムを作成した。

メトロノームアプリを実装してください。

# 条件
- WASAPI 共有モード、イベント駆動でクリック音を再生
- テンポはコマンドライン引数で与える

# クリック音の仕様
(DeepResearchの結果をペースト)

アクセントの音が少し異なるが、サブ音はSteinberg Clickに近い音で鳴るものができた。

検討事項

  • 小節の途中の拍の位置以外から録音開始した場合、カウントインが不自然にならないようにする必要がある

実装

メトロノームのサンプルプログラムを参考に与えて、以下のプロンプトで生成した。

はじめアクセントが鳴らなかったが、1回の修正指示で正しく動作するようになった。

Gp5TablatureフォルダにあるC++/WinRT(WinUI3)のプロジェクトでは、タブ譜、ピアノロールの表示、録音、再生を実装している。
録音中、再生中にメトロノームを鳴らす処理を実装してください。

### 条件
- UIでメトロノームをオン/オフできる
- 録音開始時にカウントインするオプションを設ける(再生開始時はカウントインは不要)
- メトロノームの再生方法は下記サンプルプログラムを参考にする
- 拍の位置でクリック音を鳴らす
- 各小節の1拍目にアクセントがある
- カーソル位置が1拍目の先頭にあるとき以外にも、カーソル位置から録音(カウントイン対応)、再生してメトロノームが拍の位置で正しく鳴ること
- カウントインはカーソル位置の拍子の1小節分とする
- オーディオクロック(フレーム数)を基準に鳴らすタイミングをピアノロールの拍の位置と正確に合わせること
- 初期バッファによりタイミングがずれないように注意すること
- メンテナンス性を考慮してメトロノーム処理のソースファイルは独立する

### 参考
- samples/MetronomeTest.cpp: メトロノーム再生サンプルプログラム


まとめ

音声入力とリアルタイム解析に続き、録音・再生時に動作するメトロノーム機能を実装した。
CubaseSteinberg Clickを分析し、999Hz/849Hzのサイン波と高速エンベロープ設計に基づくクリック音を再現した。

次は、再生速度の変更を実装するつもりである。

音ゲーにするには、タブ譜に合わせて曲の再生も必要なので、そちらも別途検討する。