Chord Editor

https://github.com/Take-613/hackz-megalo

Python

どうやってコーディングしてますか? 私はギターで

take

とまと

推しアイデア

波→ギター→コード(Chord)→コード(Code)

作った背景

ハッカソンでギター弾いてみたい!?

推し技術

俺のギター技術!!

プロジェクト詳細

Chord Editor

概要

コード(Chord)を使って、コード(Code)を作るためのエディター

このエディターではリアルタイムでギターからの入力をChordに変換し、さらに変換されたChordを入力としてCodeに変換することで、Codeをかけるようにします。

機能

1.リアルタイム・コード解析

マイクやMIDIから入力されたギターの和音を瞬時に解析します。 独自のアルゴリズムにより、単なる文字入力ではなく「Pythonの構文」として意味のあるコードを生成します。

2.階層型コマンド・ツリー

JSONベースの高度なマッピングシステムを搭載しています。 メジャーやマイナーといったコードの響きの違いを、変数、演算子、制御構文(if/elif/else)などのカテゴリに対応させています。

{ "C Major": { "_message": "🔢 [数字] 0(C), 1(D), 2(E), 3(F), 4(G)", "C Major": "0", "D Major": "1", "E Major": "2", "F Major": "3", "G Major": "4" }, "D Major": { "_message": "🔤 [変数] a~e(C~G) / x(A), y(B), z(C#)", "C Major": "a", "D Major": "b", "E Major": "c", "F Major": "d", "G Major": "e", "A Major": "x", "B Major": "y", "C Minor": "z" }, "E Major": { "_message": "🧮 [演算子] C(算術), F(代入=), G(比較==)", "C Major": { "_message": "🧮 [算術] C(+), D(-), E(*), F(/), G(%)", "C Major": " + ", "D Major": " - ", "E Major": " * ", "F Major": " / ", "G Major": " % " }, "F Major": { "_message": "🧮 [代入] C(=)", "C Major": " = " }, "G Major": { "_message": "🧮 [比較] C(==)", "C Major": " == " } }, "F Major": { "_message": "📚 [定型句セット] C(import random), F(random.randint(0,2))", "C Major": "import random", "F Major": "random.randint(0, 2)" }, "G Major": { "_message": "🔀 [制御・関数] C(if系), F(print), G(int(input()))", "C Major": { "_message": "🔀 [if関連] C(if), D(elif), E(else:), F(:)", "C Major": "if ", "D Major": "elif ", "E Major": "else:", "F Major": ":" }, "F Major": "print(", "G Major": "int(input())" }, "A Major": { "_message": "📦 [記号] C(左括弧), D(コンマ)", "C Major": "(", "D Major": ", " }, "B Major": { "_message": "⚡ [アクション] C(閉じる), D(タブ), F(確定/改行), G(1行削除), A(終了/Ctrl+C)", "C Major": "_CMD_CLOSE", "D Major": " ", "F Major": "_CMD_NEWLINE", "G Major": "_CMD_DELETE", "A Major": "_CMD_EXIT" } }

3.ライブ用ナビゲーション・メッセージ

初心者でも迷わず演奏できるよう、メッセージパネルに「次に何を弾くべきか」のガイドを表示します。 階層を潜るたびにリアルタイムでヒントが更新されるため、複雑なアルゴリズムもリズムに乗って構築可能です。

4.高速コーディング用「定型句セット」

import random や int(input()) といった、タイピングが面倒な定型句を1ストロークで入力できるスニペット機能を搭載しています。 汎用的な開発から、じゃんけんゲームのようなロジック構築まで対応できます。

使用技術

ライブラリ

  • GUI表示:tkinter
  • 音声I/O:sounddevice
  • Chord推論:basic-pitch(ONNX推論)
  • ストローク検出:librosa
  • ライブラリ管理:uv

使用デバイス

  • ギター: Fender Telecaster Mexico
  • オーディオインターフェース:Steinberg UR22C

そして、演奏者!!

開発してて困ったこと

音声取り込み編

開発環境がそれぞれwindowsとmacだったので、普通ならdockerを使って開発したい ここで問題発生!! dockerはOSの接続されたデバイスに干渉できない😢 解決策としてはPulse Audioを使ってサーバーを立てて、ネットワーク経由で音声データを送る方法があります。 しかし、ユーザー体験をよくしたいなら遅延を避けるべきです! しかし、今回の開発ではDockerなしで作成しました。

basic-pitch編

basic-pitchに使われているライブラリがintel macに対応していない! それによってライブラリ自体がインストールできず、困りました〜 結局は、そのライブライ自体をダウングレードしても問題なく動きました〜

オーディオインターフェース編

僕のオーディオインターフェースには2つのchannelがあります。今回の開発ではギター用のチャンネルを指定しなければいけなかったのですが、それに気づかず、ずっと音声が出ない...

演奏者編

皆さんはChdrd弾けますか? このプロダクトはChordが弾けないと最終的なテストができないので、弾ける人の手が空いていないとテストができないということが起きて、大変でした〜

take

@ee3e6f1788e64fc5