Created
July 5, 2025 17:57
-
-
Save shivaduke28/b7d7b0225b08dbf8bb339bf3c0ec6f1b to your computer and use it in GitHub Desktop.
claudeにBPM検知を実装させたときのログ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# BPM Detector プロトタイピング実装レポート | |
## 概要 | |
RectorプロジェクトにおけるリアルタイムBPM検出機能のプロトタイプ実装を行った。当初は単純な低周波数レベル検出を使用していたが、スペクトラムフラックスベースのアプローチに移行し、より正確なBPM検出を実現した。 | |
## 実装の経緯 | |
### 1. 初期実装の問題点 | |
- `audioInput.LevelLow`(時間領域の低周波数フィルタ)を使用 | |
- BPMが150付近で張り付く問題が発生 | |
- ダブルビート検出(実際のBPMの2倍を検出)が頻発 | |
### 2. スペクトラムフラックスベースへの移行 | |
- `audioInput.LogSpectrum`を使用した周波数領域での分析に変更 | |
- 前フレームとのスペクトラム差分(フラックス)を計算 | |
- 低周波数帯域(2-48ビン)に絞ってキックドラムを検出 | |
### 3. パラメータ調整 | |
- **クールダウン時間**: 0.1秒 → 0.4秒(ダブルビート防止) | |
- **閾値倍率**: 1.3 → 2.0(誤検出を減少) | |
- **BPM範囲**: 80-160 → 60-180(より広いジャンルに対応) | |
- **IOIバッファサイズ**: 32 → 64(統計的安定性向上) | |
### 4. BPM安定化の実装 | |
- 信頼度ベースの更新ロジック | |
- BPM変化率のチェック(5%以上の変化で更新) | |
- 近接BPM(±2)を含めた信頼度計算 | |
## 技術的知見 | |
### 成功した点 | |
1. **スペクトラムフラックス**は時間領域のレベル検出より正確 | |
2. **低周波数帯域に絞る**ことでキックドラムを効果的に検出 | |
3. **適切なクールダウン時間**(0.4秒)でダブルビート問題を解決 | |
4. **信頼度ベースの更新**でBPMの急激な変動を防止 | |
### 課題と限界 | |
1. **ジャンル依存性** | |
- 4つ打ちのハウス/テクノは良好 | |
- 2-step、Drum'n'bassなど不規則なキックパターンは苦手 | |
2. **パラメータの固定値** | |
- 閾値倍率、クールダウン時間が固定 | |
- 楽曲によって最適値が異なる可能性 | |
3. **単一帯域分析の限界** | |
- キックドラムのみに依存 | |
- スネア、ハイハットの情報を活用していない | |
## 今後の改善提案 | |
### 1. マルチバンド分析 | |
``` | |
- 低域(< 200Hz): キックドラム | |
- 中域(200-2000Hz): スネア、クラップ | |
- 高域(> 2000Hz): ハイハット、シンバル | |
``` | |
各帯域で独立してオンセットを検出し、統合することでより頑健なビート検出が可能。 | |
### 2. オートコリレーション | |
- 現在のIOIクラスタリングより数学的に堅牢 | |
- 周期的パターンの検出に優れる | |
- 不規則なキックパターンにも対応可能 | |
### 3. 適応的パラメータ | |
- 楽曲の特性に応じて閾値を動的に調整 | |
- ジャンル検出による最適パラメータの選択 | |
### 4. ビート位相の改善 | |
- 現在は最後のオンセットからの経過時間で計算 | |
- ビートグリッドの概念を導入してより正確な位相計算 | |
## 実装上の注意点 | |
1. **Unity特有の制約** | |
- `NativeArray`の使用によるメモリ効率 | |
- 毎フレームのスペクトラム取得はパフォーマンスに影響 | |
- LASPライブラリの特性を理解する必要 | |
2. **リアルタイム性の確保** | |
- 計算量とレイテンシのトレードオフ | |
- バッファサイズと応答性のバランス | |
3. **デバッグとチューニング** | |
- Debug.Logによるリアルタイムモニタリングが有効 | |
- 実際の楽曲での検証が必須 | |
## まとめ | |
プロトタイプ実装により、スペクトラムフラックスベースのBPM検出の有効性を確認できた。一般的な4つ打ち楽曲では良好な結果を得られたが、より多様なジャンルに対応するにはマルチバンド分析やオートコリレーションなどの高度な手法の導入が必要。 | |
今回の実装は基礎として十分機能するため、用途に応じて段階的に改善していくことを推奨する。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment