前回は、音声入力とリアルタイム音程/和音解析を実装した。
今回は、メトロノームを実装する。
メトロノームのクリック音
CubaseのSteinberg Clickに近い音を再現する。
Steinberg Clickの技術仕様は公開されていないが、GeminiでDeepResearchを行ったところ、以下のような特徴を持つことが分かった。
音響特性
- アクセント音(Hi):999 Hz
- サブ音(Lo):849 Hz
- 999Hzとの比率は音楽的インターバルに一致しない。
- 約283セント差で旋律的に認識されにくい。
- 音楽的文脈から切り離された設計。
波形と音色設計
- 基本波形は純粋なサイン波。
- 倍音をほぼ持たないため:
- 「無機質」「sterile」と表現される。
- 人工的で注意を引く。
エンベロープ設計(クリック感の本質)
クリック感は波形ではなく振幅の時間変化で決まる。
- 推定パラメータ
- Attack:0.5〜1ms
- 完全瞬時立ち上がりはクリックノイズを発生させるため回避。
- 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: メトロノーム再生サンプルプログラム
