import { AbcElem } from "abcjs";

export interface INote {
	/** 临时升降记号 */
	accidental: string | "^^" | "^" | "_" | "__" | "=";
	/** 音符 */
	content: string;
	/** 音符类型 */
	noteType: string;
	/** 谱号 */
	clef: string;
	/** 调号 */
	key: string;
	/** 演奏技法 */
	play: string[];
    /** 速度 */
    speed: string;
    /** 力度符号 */
    dynamics: string;
    /** 渐强渐弱关联 */
    dCode: string;
    /** 延音 */
    tie: string;
    /** 连音关联 */
    tCode: string;
    /** 附点 */
    dot: string;
	/** 3连音 */
	slus: string
	/** 延音 */
	tieline: string
	/** 分割 */
	segno: string
	is_delete?: boolean
}
export interface IMeasure {
	/** 小节号 */
	measureNumber?: number;
	/** 小节内的音符 */
	notes: INote[];
	/** 小节线 */
	barline: string;
	/** 谱号 */
	celf: string;
	/** 调号 */
	key: string;
	/** 反复跳跃 */
	repeat: string;
	/** 拍号 */
	meter: string;
    
}

export interface IAbc {
	/** 谱号 */
	celf?: string;
	/** 调号 */
	key: string;
	/** 拍号 */
	meter?: string;
	minUnit?: string;
	/** 曲谱名 */
	title?: string;
	/** 作者 */
	creator?: string;
	/** 速度 */
	speed: string;
	measures: IMeasure[];
	/** 移调 */
	visualTranspose?: number;
	visualKey?: string;
	/** 声部 */
	subjectCode?: string;
	/** 节奏 */
	isrhythm?: string | 'rhythm';
}
export interface INoteActive extends AbcElem {
	/** 小节 index */
	measureIndex: number;
	/** 音符 index */
	noteIndex: number;
	/** 是否第一次选中小节 */
	isFirstChecked: boolean;
	averagepitch?: number;
}
