bar_1

contents_map

2025年7月31日木曜日

music_set_theory.gem

Murphyによる Pythonのパッケージ `musictheory` を Ruby に移植した. `fiddle_fluidsynth.gem` と組み合わせて使いたいと思っている. 

(わたしの音楽理論の理解が浅いため, オリジナルのメソッド名や変数名がいまいちわかりにくい. この点, 今後大幅に変更する可能性があるかもしれない)

---

## Usage

`examples/` ディレクトリ以下にあるサンプルプログラムを見ると, わかりやすいと思う. いかに主要なメソッド, 定数について紹介しておく.

### 重要なテーブル

`MusicSetTheory::WestTemp` コード, スケール, モードなど全てを含むテーブル.ここに問い合わせをすることで, 必要な情報を得たり処理をしたりする. 現状, ノートの情報を得ることを想定している.

### スケール

`MusictSetThoery.{def_scale, undef_scale, scales}` を新たに用意した. 定義するには以下のようにする.

`def_scale 定数名, name: "スケール名称", tment: Temperament, note_pos: <半音での位置の定義> [, modes: <モード>]`

定義の例.
```ruby
include MusicSetTheory  # 必要に応じて.

def_scale :MajorScale, name: "Major", tment: 音律テーブル,
    note_pos: CHROM_NAT_NOTE_POS, modes: MAJOR_MODES
:
:
# Pentatonic scales.
def_scale :MajorPentaScale, name: "Major Pentatonic", tment: WestTemp,
    note_pos: MAJOR_PENTA_NOTE_POS
def_scale :MinorPentaScale, name: "Minor Pentatonic", tment: WestTemp,
    note_pos: MINOR_PENTA_NOTE_POS
def_scale :RyukyuPentaScale, name: "Ryukyu Pentatonic", tment: WestTemp,
    note_pos: RYUKYU_PENTA_NOTE_POS

# Hexatonic scales.
def_scale :BluesHexaScale, name: "Blues", tment: WestTemp,
    note_pos: BLUES_HEXA_NOTE_POS
```

モードについては, 省略可能である.

*note_pos* は, たとえば一番最後の6音音階のブルーススケールの場合, `[ 0, 3, 5,6,7, 11]` となっている. 半音個数の配列で, 最初の音を0(基準)としたとき, 次の音は基準から半音3つ上, 次の音は基準から5つ上, ... という風な意味の配列である.
これは最初の音がCであったら, [C, D#, F, F#, G, A, B] ということになる.



---

0 件のコメント:

コメントを投稿

何かありましたら、どうぞ: