11import { defineStore } from 'pinia' ;
22import { computed , ref } from 'vue' ;
3-
4- /**
5- * 吉他高亮位置类型
6- * 表示一个需要在指板上高亮的点:{ string: number, fret: number }
7- * string: 弦的索引 (从低音弦 E 开始,索引 6 到 高音弦 E,索引 1)
8- * fret: 品的索引 (0 表示空弦,1 表示第一品,以此类推)
9- */
10- export interface GuitarPosition {
11- string : number ;
12- fret : number ;
13- }
3+ import { GuitarPosition } from '../model' ;
144
155export const useGuitarStore = defineStore ( 'guitar' , ( ) => {
166 const highlightedPositions = ref < GuitarPosition [ ] > ( [ ] ) ;
177
8+ /**
9+ * 吉他变调夹
10+ * @returns {number }
11+ */
12+ const transpose = ref ( 0 ) ;
13+
14+ function setTranspose ( val : number ) {
15+ transpose . value = val ;
16+ }
17+
1818 function setHighlightPositions ( positions : GuitarPosition [ ] ) {
1919 highlightedPositions . value = positions ;
2020 }
@@ -24,7 +24,7 @@ export const useGuitarStore = defineStore('guitar', () => {
2424 * @param {number[] } midis - 需要高亮的音符MIDI值数组
2525 * @returns {void }
2626 */
27- function setHighlightKeys ( midis : number [ ] ) {
27+ function setHighlightKeys ( midis : number [ ] , transpose : number ) {
2828 const openStringMidis : { [ key : number ] : number } = {
2929 6 : 52 ,
3030 5 : 57 ,
@@ -41,7 +41,7 @@ export const useGuitarStore = defineStore('guitar', () => {
4141 const openMidi = openStringMidis [ string ] ;
4242 const fret = midi - openMidi ;
4343
44- if ( fret >= 0 && fret <= 3 ) {
44+ if ( fret >= 0 && fret <= 3 + transpose ) {
4545 return { string, fret } ;
4646 }
4747 }
@@ -68,6 +68,8 @@ export const useGuitarStore = defineStore('guitar', () => {
6868 }
6969
7070 return {
71+ transpose,
72+ setTranspose,
7173 highlightedPositions : computed ( ( ) => highlightedPositions . value ) ,
7274 setHighlightPositions,
7375 setHighlightKeys,
0 commit comments