@onjmin/dtm
    Preparing search index...

    Type Alias ComposeScale

    type ComposeScale = {
        center?: TonicCenter;
        core: number[];
        description: string;
        id: ComposeScaleId;
        label: string;
        parent?: ScaleDegree[];
        strict: boolean;
        tonic: TonicDegree;
    }
    Index

    Properties

    center?: TonicCenter

    進行プールの上書き。省略時は主音の位置から TONIC_CENTERS を引き、 それも無ければ(主音がド/ラ)従来の長調・短調のプールを使う。

    音程集合を差し替える音階(ComposeScale.parent)では必須。 ハ長調の 和音をそのまま当てると、音階に無い音が伴奏から鳴って音階が壊れる。

    主音が同じでも音階が違えば使える和音が違うので、親が同じでもここが要る。琉球音階は 主音がドだが Am・Dm を使うとレとラが前に出てしまうし、都節音階と フリジアンはどちらも主音がミだが、Am(ラ・ド・ミ)が中核に収まるのは 都節だけ。

    core: number[]

    旋律の柱にする5音(ダイアトニック度数)。主音から順に書く。 ここに無い2音は「音階の外」として、和音構成音か経過音のときだけ通す。

    description: string

    どんな曲になるかの説明。UI のヒントに出す。

    label: string

    表示名。

    parent?: ScaleDegree[]

    音程集合そのものの差し替え。省略時は MAJOR_SCALE(ハ長調の7音)。

    ここを差し替えると degreeToPitch の返す音が変わるので、旋律だけでなく 順次進行・跳躍の埋め・着地音まで全部が新しい音程集合の上に乗る。 長さは7でなくてよい(ブルースは6音)。

    strict: boolean

    中核音の外を厳しく締めるか。

    true にすると、和音の構成音であっても中核の外なら隣へ逃がし、変化音も減らし、 モチーフを必ず中核音の歩数で組み、ハモリも中核へ寄せる。

    締めるのは、中核の外が「音階に無い音」になる音階だけ。

    • 律・都節・琉球 … 本物の5音音階。中核から外れた2音は音階に無い。琉球音階の F と G はレとラを持っていて、そこを無条件に通すと**「レとラを抜く」という 音階の定義そのものが崩れる**(実測でレ8%・ラ6%が紛れ込んでいた)
    • ブルース … 中核外のソ♭は音階の中だが、伴奏の C7・F7・G7 が 音階に無い長3度を供給してくる。締めないと旋律がそちらへ引かれ、 短3度で歌う/長3度で鳴るというブルースの構図が消える

    締めないのは次の2つ。

    • 陽・民謡 … ファ・シを自由に使うのはJ-POPの実際の書法で、参考曲の実測値も そちら(compose.ts の applyPentatonic 参照)。締めると従来の曲が変わる
    • モード・和声的短音階・ヒジャーズ・ハンガリアン … 7音音階なので、中核の5音は 旋律の柱を選んだだけ。残りの2音も立派な音階の構成音で、締める理由が無い

    主音の度数(ComposeScale.parent の何番目か)。