axentax-compiler
Version:
Compile Axentax syntax in JavaScript and generate MIDI output for guitar phrasing.
179 lines (178 loc) • 6.13 kB
TypeScript
/**
* ユーティリティインターフェース
*
* 音楽記譜法のコンパイル処理で使用される基本的な型定義とインターフェースを提供する
* 音名、スケール、調性、フレット番号などの音楽理論に基づく型定義を含む
*
* このモジュールは、音楽記譜法のコンパイル処理において、
* 型安全性を保ちながら音楽理論的な概念を表現するための基盤となる
*/
/**
* 深い部分的な型定義
*
* オブジェクトのネストされたプロパティも部分的にオプショナルにする型
* 設定オブジェクトのデフォルト値とのマージなどで使用される
*
* @template T 対象となるオブジェクト型
*/
export type DeepPartial<T> = {
[K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K];
};
/**
* 構文位置情報インターフェース
*
* 記譜法の構文解析時に使用される位置情報を管理する
* エラー位置の特定やビューでのカーソル位置検知に使用される
*/
export interface SyntaxLocation {
row?: string;
line: number;
linePos: number;
endLine?: number;
endPos?: number;
}
/**
* 拍子記号型
*
* 音楽の拍子記号を表現する型
* [分子, 分母]の形式で拍子を表現する
*
* @example
* [4, 4] // 4分の4拍子
* [3, 4] // 4分の3拍子
* [6, 8] // 8分の6拍子
*/
export type UntilNext = [number, number];
/**
* 拍子範囲型
*
* 拍子の範囲を表現する型
* [開始分子, 開始分母, 終了分子]の形式で拍子範囲を表現する
*
* @example
* [1, 4, 3] // 4分の1拍から4分の3拍まで
*/
export type UntilRange = [number, number, number];
/**
* 数値または未定義型
*
* フレット番号や弦番号など、数値または未定義を表現する型
* ミュート弦(-1)や無音弦(undefined)の表現に使用される
*/
export type NumberOrUfd = (number | undefined);
/**
* 文字列または未定義型
*
* 音名やスタイル名など、文字列または未定義を表現する型
*/
export type StringOrUdf = (string | undefined);
/**
* 標準音名型
*
* 音楽理論で使用される標準的な音名を表現する型
* シャープ記号付きの音名のみを含む(C, C#, D, D#, E, F, F#, G, G#, A, A#, B)
*
* この型は、音楽記譜法のコンパイル処理において、
* 音程計算やスケール判定で使用される標準的な音名を表現する
*/
export type IKey = "C" | "C#" | "D" | "D#" | "E" | "F" | "F#" | "G" | "G#" | "A" | "A#" | "B";
/**
* ユーザー音名型
*
* ユーザーが入力可能な音名を表現する型
* 標準音名に加えて、フラット記号付きの音名や特殊な音名も含む
*
* この型は、記譜法の構文解析において、
* ユーザーが入力した音名を適切に処理するために使用される
*/
export type UserIKey = null | "C" | "Cb" | "C#" | "D" | "Db" | "D#" | "E" | "Eb" | "E#" | "F" | "Fb" | "F#" | "G" | "Gb" | "G#" | "A" | "Ab" | "A#" | "B" | "Bb" | "B#";
/**
* 音名定数オブジェクト
*
* 標準音名の定数として使用されるオブジェクト
* 音名の比較や検証で使用される
*/
export declare const key: Record<IKey, IKey>;
/**
* 音名インデックス型
*
* 12音階での音名の位置を表現する型
* C=0, C#=1, D=2, ... B=11 の形式で音名の位置を表現する
*
* この型は、音程計算やスケール判定で音名の相対的な位置を
* 数値として扱う場合に使用される
*/
export type IKeyIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
/**
* スケールタイプ列挙型
*
* 音楽理論で使用されるスケールの種類を表現する
*
* - normal: 通常のスケール(長調・短調の基本スケール)
* - harmonic: 和声的短音階(短調の変形スケール)
* - melodic: 旋律的短音階(短調の変形スケール)
*/
export declare enum Scale {
'normal' = "",// 通常スケール
'harmonic' = "harmonic",// 和声的短音階
'melodic' = "melodic"
}
/**
* 調性列挙型
*
* 音楽の調性を表現する
*
* - unknown: 未定の調性
* - major: 長調
* - minor: 短調
*/
export declare enum Tonality {
'unknown' = "",// 未定
'major' = "major",// 長調
'minor' = "minor"
}
/**
* シフト最大値型
*
* 音程のシフト値の範囲を表現する型
* 1から7までの音程シフトを表現する
*
* この型は、コード進行やスケールの転調で使用される
* 音程の相対的な移動量を表現する
*/
export type IShiftMax7 = 1 | 2 | 3 | 4 | 5 | 6 | 7;
/**
* シフト最大値定数オブジェクト
*
* シフト値の定数として使用されるオブジェクト
* 音程シフトの検証や計算で使用される
*/
export declare const shiftMax7: Record<IShiftMax7, IShiftMax7>;
/**
* 2進数音階型定義
*
* スケールやコードの構成音を2進数で表現するための型定義
* 1は使用可能な音、0は使用不可な音を表現する
*
* この型定義により、音楽理論的な概念を数値的に処理できる
*/
/** 2進数の真値(1) */
export type bt = 1;
/** 2進数の偽値(0) */
export type bf = 0;
/** 2進数型 */
export type bin = bt | bf;
/** 7音階の2進数表現型 */
export type bin7 = [bin, bin, bin, bin, bin, bin, bin];
/** 12音階の2進数表現型 */
export type bin12 = [bin, bin, bin, bin, bin, bin, bin, bin, bin, bin, bin, bin];
/**
* フレット番号型
*
* ギターのフレット番号を表現する型
* -1はミュート弦、0は開放弦、1-24は各フレット番号を表現する
*
* この型は、ギターのフィンガリング(押さえ方)を表現する際に使用される
* 24フレットまでのギターに対応している
*/
export type Fret = -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24;