chord の code

Python の wave モジュール例の殴り書き」を書きつつ思ってたことなんだけれども。

Python の wave モジュール例の殴り書き」では scale (音階) の表はこうした:

1 _SCALES = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
2 _SCALES = {s: i for i, s in enumerate(_SCALES)}

無論これは「C# == Db」(シー シャープ ト デー フラット ハ オンナジ)てことをわかってやっておる。けど

 1 _SCALES = {
 2     "C": 0, # "B#": 0,
 3     "C#": 1, "Db": 1,
 4     "D": 2,
 5     "D#": 3, "Eb": 3,
 6     "E": 4,
 7     "F": 5,
 8     "F#": 6, "Gb": 6,
 9     "G": 7,
10     "G#": 8, "Ab": 8,
11     "A": 9,
12     "A#": 10, "Bb": 10,
13     "B": 11, "Cb": 11
14     #"B#": 12
15 }

くらいにやれば一応「正しい」のだろう。けど「コンピュータによる機械処理」にとってはこんなのただの「表記揺れ」にしかなんなくて、迷惑ちゃぁ迷惑な話で。scale の code 化の二重化、てわけだ。

ちなみにここまで読んで察しがつくと思うけど、今回のネタのタイトルはゴマカシがある。scale の code 化のハナシだけれど語呂が chord の code の方がおもろかったんで。まぁ scale の code 化に困れば結果 chord の code にも困るんで話は一緒。

それはそうと、「なんでこんな面倒くさいことをしたんだろう?」って思ったことあります?

アタシはおぼろげに「多分そういうことであろうな」と察しはつけてたけれど、真剣に調べたりしようとしたこともなく、「そうに決まってる」とも思ってたので調べて確証を得てないからと言って気持ちが悪いと思うことも一度としてなかった。

一言では「実用上の理由でしょ」、も少し詳しく言えば「前後の文脈から使いやすい方を使ってるんでしょ」。演奏者(or 作曲者)目線で「便利」なのであろうなと。これがワタシがしてた想像。合ってるみたいね