🎸 #YinChroma は、PythonとFletで構築された、エンジニア視点の高精度ギターチューニングツールです。
従来のFFT(高速フーリエ変換)よりも低域の精度に優れた YINアルゴリズム を採用し、リアルタイムでのピッチ検出と、お手本音源のループ再生、さらに自由なカスタムチューニング登録機能を統合しています。
- 高精度ピッチ検出: 音楽信号処理で定評のある YINアルゴリズム を採用。ギターの低音域(7弦ギターのB1など)でも非常に安定した判定が可能です。
- 洗練されたアナログメーター: セント単位のズレを視覚化する針インジケーターと、±5セントの「OKゾーン」を可視化した直感的なデザインを提供します。
- カスタムチューニング管理: 「ドロップD」や「半音下げ」など、独自のチューニングをいくつでも登録可能。各弦に周波数とWAV音源を紐付けられます。
- モジュール分割された堅牢な設計: UI(Views)、ロジック(PitchHandler)、ユーティリティ(Utils)を明確に分離し、長期的な保守性と拡張性を確保しています。
- インテリジェントなログ管理: 保存イベントやエラーを追跡しつつ、1MB単位の自動ローテーション機能によりログの肥大化を防ぎます。
- ヘッドセットモード: 再生音とマイク入力を同時に扱う際、再生音を判定から除外するか切り替え可能な実戦的機能を搭載。
#YinChroma/
├ main.py # エントリーポイント
├ main_controller.py # 全体制御(Controller)
├ config.ini # 設定ファイル
├ icon.ico # アプリアイコン
├ requirements.txt # 依存ライブラリ一覧
│
├ views/ # UIコンポーネント (View)
│ ├ main_view.py # メイン画面レイアウト
│ ├ settings_view.py # 設定画面
│ └ tuning_editor.py # チューニング編集画面
│
├ pitchhandler/ # 音響処理・ロジック (Model)
│ ├ pitchdetector.py # ピッチ検出エンジン (YIN Algorithm)
│ ├ pitch_analyzer.py # ピッチ解析ロジック
│ ├ yin_processor.py # YINアルゴリズム詳細処理
│ ├ note_stabilizer.py # 音程安定化フィルタ
│ └ soundhandler.py # 音声再生管理
│
├ utils/ # 汎用ユーティリティ
│ ├ config_manager.py # 設定管理
│ └ logger_manager.py # ログ管理
│
├ log/ # 実行ログ出力先
└ sound/ # お手本WAVファイル格納先
リポジトリ直下で以下のコマンドを実行し、必要なパッケージを一括インストールしてください。
pip install -r requirements.txt主要な依存関係:
- flet: UIフレームワーク
- pyaudio: リアルタイム音声入力
- numpy: 数値演算(信号処理)
- pygame: 音声再生(ミキサー)
flet run main.py
- アプリを起動するとマイク入力を開始します。
- 弦を弾くと、中央に「一致する弦名」と「ズレ(cent)」、そしてアナログメーターが動きます。
- 針が中央のグリーンゾーン (±5.0 cent) に収まるまでペグを調整してください。
- 部屋のノイズを拾いすぎる場合は、設定(歯車アイコン)から「振幅閾値」を調整してください。
- 中央のドロップダウンからチューニングセットを選択します。
- 表示された弦ボタンを押すと、その音のループ再生が始まります。
- 画面下部の ループ再生/停止 ボタンで一括操作が可能です。
- 「+」ボタンから、自分好みの周波数と音源を組み合わせた新しいチューニングをいつでも作成できます。
- v4.2: ディレクトリ構成を刷新(Views, PitchHandler, Utilsへの分離)し、保守性を向上
- v4.1: MVC構造へのリファクタリング、ストリーム開始バグの修正。
- v3.5: 閾値変更時のログ氾濫を抑えるイベント最適化。
- v3.2: アナログメーターのデザイン刷新(目盛り・セーフゾーン追加)。
- v2.0: カスタムチューニング登録画面・音源アップロード機能の実装。
- v1.0: Fletへの完全移行。YINアルゴリズムの導入。
このソフトウェアは、個人のギター練習や調整を支援するためのツールです。環境(マイク性能や周囲のノイズ)により判定結果に誤差が生じる場合があります。