UNPKG

axentax-compiler

Version:

Compile Axentax syntax in JavaScript and generate MIDI output for guitar phrasing.

121 lines (120 loc) 4.84 kB
import { MapOpt, Styles } from "./style"; import { NumberOrUfd, SyntaxLocation, UntilNext } from "./utils.interface"; export interface TabObj { /** for view string */ noteStr: string; /** for App view */ extendInfo?: ExtensionViewProp; /** location */ syntaxLocation: Required<SyntaxLocation>; /** id */ tabObjId: number; /** どのリージョンに所属しているか 20240518追加 */ regionIndex: number; /** * regionを認識するため必要、note毎にカウントするが、region推移で0に戻しているリージョン内noteインデックス * fullNoteでカウントしてしまっている ==>> 修正済みだが、region毎にクリアされる。で間違いないか */ regionNoteIndex: number; /** */ note: string; /** [make]弦別フレット ※特定の弦だけ停止する場合 fretの対象弦に -1 設定する */ tab: NumberOrUfd[]; /** stepやmapで改変される前の本来のtab */ trueTab?: NumberOrUfd[]; /** mapped処理詳細 */ shifted?: { shift: number; options: MapOpt[]; }[]; /** legato用のmidiノート強制シフト */ tabShift?: number; /** [make,arrange]音量 最大100(tonejsでは最大1) * ※設定で「高い弦にアクセント」「表拍の高い弦にアクセント」「解放弦にアクセント」「アクセントは強く/弱く」 * を変更できるようにする * ※速いピッキングは音量が下がる アルペジオでのアクセントは基本は表が強い * 但し表とは限らず高い弦ほ強い場合がある。また歪ませるとあまり変わらない * * velocityがあるのにtabがないfretStartTickが無い場合 * view側の、「slideToViewData」で取れなくなるので注意 */ velocity: NumberOrUfd[]; /** [make]前の音を残すか切るか。regionからの指定される場合もある ※trueだと切らない */ continueX: boolean; /** 奏法 */ styles: Styles; /** tick */ bar: Tick; /** bpm */ bpm: number; /** 休符の場合、true */ isRest?: true; /** is arpeggio */ isArpeggio: boolean; /** bullet flag # bulletグループNo */ isBullet: number; /** style適用による移動済みのslide対象のtabObj参照 */ refMovedSlideTarget: (TabObj | undefined)[]; /** 現時点でなっている弦 ※この段階のbeforeStopは関係ない */ activeBows: NumberOrUfd[]; /** 現時点でなっている弦のtabObj参照 ※弦毎に設定 ※当該note自身の参照も設定済み */ refActiveBows: (TabObj | undefined)[]; /** Landing point reference value used in slide. */ /** Even if the next one is a rest, check further ahead and look for the nearest valid tabObj */ slideLandingTab?: NumberOrUfd[]; /** genuine next tabObj */ nextTabObj: TabObj; prevTabObj: TabObj; /** スライド適用後の場合 * undefined & 0:無し * 1: slide済み元ノート(対象弦なしの場合の未処理時含む) * 2: approach済み元ノート(対象弦なしの場合の未処理時含む) * 3: slideのnote * 4: approachのnote */ slideTrueType?: undefined | 0 | 1 | 2 | 3 | 4; /** 検討中 -> ExtensionViewPropに移動 */ locationIndexes?: number[]; untilNext: UntilNext; } export interface ExtensionViewProp { stepInfoId?: { id: number; orderCount: number; }; bullet?: { row: string; index: number; }; } /** 付割 */ export interface Bar { /** * 単体のtick * layerの全体計算で使用するため重要値(currentTickForLayer, endLayerTick に関わる) * * step処理の場合、mod-arpeggioでも更新する検討中() * → note.tick[ni].tick = note.tick[ni].tick * cStep.length; */ tick: number; /** until */ untilNext: UntilNext; } export interface Tick { /** tick ※この音のみの長さ */ tick: number; /** フレット別の音声開始位置(tick) 初期値: undefined as any */ fretStartTicks: NumberOrUfd[]; /** * フレット別の音声停止位置(tick) 初期値: undefined as any * 弦別MIDIの処理に関わるため全弦同じ数値である必要がある? */ fretStopTicks: NumberOrUfd[]; /** 最初の設定後は不変 : BPM設定などで使用。アルペジオ等適用前の開始Tick */ startTick: number; /** * 最初の設定後は不変 : BPM設定などで使用。アルペジオ等適用前の指定Tick * beforeStopが効いている場合、弾いていない弦も考慮し実際の音長より長い可能性がある */ stopTick: number; }