概要
xenharmlib は、従来の12平均律以外の音楽理論を扱うPythonライブラリ。 西洋音楽 からマイクロトーナル、マクロトーナルまで幅広い調律や記譜法に対応。 作曲家・研究者 向けで、スコア作成ツールやシーケンサーではない。 関数型設計 を重視し、オブジェクトは不変、メソッドは新しいオブジェクトを返す。 拡張性・直感的操作 が特徴で、科学的な調性探究に最適。
xenharmonic(ゼンハーモニック)とは
- 12平均律 によらない、独自の響きを持つ音楽の形容詞
- Ivor Darreg による定義
- 西洋音楽以外 やマイクロトーナル音楽への応用
- 新しい音楽表現 の追求
xenharmlibの概要
- 従来の西洋音楽理論 から非西洋ハーモニー、マイクロ・マクロトーナル調律に対応
- ダイアトニック や ポストトーナルセット理論、非標準記譜法もサポート
- 直感的で拡張性の高い API設計
- Python で簡単に利用・拡張可能
主な機能例
- Equal division tunings (例:Western、Modern Arabic、Turkish Makam、Bohlen-Pierce、Gamma Scale)
- 西洋記譜法 (インターバル命名含む)
- Up/Down Notation (西洋記譜法の上位互換)
- インターバルやスケールの解析、相互関係の分析
- 群論的解析 (整数ピッチ、ピッチクラス等)
- インターバル列パターンマッチング
- 任意転調のモジュレーション提案
- 基本的なポストトーナル分析 (normal/prime form, 反転等)
サンプルコード
-
スケール間の転調トライアド探索
from xenharmlib import WesternNotation from xenharmlib.periodic import mod_connectors n = WesternNotation() d_minor = n.pc_scale(['D', 'E', 'F', 'G', 'A', 'Bb', 'C']) g_major = n.pc_scale(['G', 'A', 'B', 'C', 'D', 'E', 'F#']) for c in mod_connectors(d_minor, g_major, (0, 2, 4)): print(c)- I-III-Vトライアド による dマイナーとgメジャー 間のモジュレーション
- WesternNoteScale で結果表示
-
31音平均律でのコード生成・再生
from xenharmlib import EDOTuning, play, UpDownNotation edo31 = EDOTuning(31) n_edo31 = UpDownNotation(edo31) d_down = n_edo31.note('vD', 4) SM3 = n_edo31.shorthand_interval('^M', 3) P5 = n_edo31.shorthand_interval('P', 5) m7 = n_edo31.shorthand_interval('m', 7) chord = n_edo31.scale([ d_down, d_down.transpose(SM3), d_down.transpose(P5), d_down.transpose(m7), ]) print(chord) play(chord, duration=1, play_as_chord=True)- 31-EDO で supermajor7コード 作成・再生
- UpDownNoteScale で表記
-
Bohlen-Pierce調律の群論的分析
from xenharmlib import EDTuning, FrequencyRatio bp = EDTuning(13, FrequencyRatio(3)) p1 = bp.pitch(4) p2 = bp.pitch(18) i1 = bp.interval(p1, p2) print(p1.pc_index) print(p2.pc_index) print(i1.frequency_ratio) dist = i1.get_generator_distance(bp.pitch(7)) print(dist)- Bohlen-Pierce 調律のピッチ、インターバル、発生器距離の算出
対象ユーザー・設計思想
- Pythonの基礎知識 を持つ作曲家・研究者が対象
- スコア作成ツールやシーケンサー は目指さない
- 科学的なハーモニー探究 のためのツールセット提供
- オブジェクト指向 だが、 関数型設計 重視
- オブジェクトは不変
- メソッドは新しいオブジェクトを返す
主なサポート機能
- 多様な平均分割調律 (西洋・中東・現代等)
- 拡張記譜法 (Up/Down Notation等)
- インターバル・スケール・群論的解析
- モジュレーション・パターンマッチング
- ポストトーナル理論 の基本分析
今後の開発予定(ロードマップ)
- 西洋音楽テンプレート
- スコアレンダリング用プラグインインターフェース
- 高度なポストトーナル分析 (インターバルベクター、z-Relation等)
- Rothenberg propriety・インターバル行列
- MOSスケール生成
- 純正律・素数制限調律
- 拡張Helmholtz-Ellis JI記譜法
- Odd Limit調律
- Arel-Ezgi-Uzdilek記譜法
ライセンス・サポート
- GNU Public License v3 で公開
- Gitlab.com でソース管理
- Xenharmonic Alliance Discord で開発者と交流可能
- バグ報告・機能要望 はGitlab Issueページへ
コントリビューションガイド
- Pull Request歓迎
- conventional commits によるコミットメッセージ
- black によるコードフォーマット(string normalization無効、最大行長79)
- シングルクオート :データ、 ダブルクオート :人間向け情報、 トリプルダブルクオート :ドックストリング
- pytest でテスト必須(分岐網羅)
- 型アノテーション 推奨(例外あり)
- 関数型設計 遵守(初期化以外で内部状態を変えない)
ドキュメント・ユーザーガイド内容
- クイックスタート
- インストール方法
- 調律・ピッチ・インターバル・スケール
- 記譜法・ノート・ノートインターバル
- 再生・エクスポート機能
- 高度なスケール操作・正規化・反転・セット演算
- パターンマッチング・モジュレーション
- APIドキュメント (コアAPI・エクスポートAPI・記譜法API・periodicパッケージ等)
- 変更履歴・インデックス・検索ページ
まとめ
- xenharmlib は、 非標準ハーモニー や マイクロトーナル音楽 の探究に最適なPythonライブラリ
- 関数型設計 と 拡張性 で、先進的な音楽理論の研究・作曲に役立つ
- 幅広い記譜法・調律理論 をカバーし、今後も機能拡張予定