Skip to content

Commit 34275da

Browse files
committed
feat(model, guitar): 添加吉他高亮位置类型并更新高亮逻辑
- 在model.ts中新增GuitarPosition接口,定义吉他指板上高亮位置的结构。 - 更新guitar.ts中的setHighlightKeys方法,支持转置参数以增强高亮功能。 - 在PanelOperate.vue中调整高亮逻辑,使用转置后的MIDI值进行高亮处理。 - 增强代码注释,符合jsdoc规范,提升可读性和维护性。
1 parent 4359af0 commit 34275da

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

examples/src/components/PanelOperate.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,8 +685,9 @@ function onFileChange(e: Event) {
685685
}
686686
687687
function highlightWithTimeout(keys: number[], durationSec: number) {
688+
let transpose = getTransposeByKey(selectedTransposeKey.value);
688689
pianoStore.setHighlightKeys(keys);
689-
guitarStore.setHighlightKeys(keys);
690+
guitarStore.setHighlightKeys(keys, transpose);
690691
if (highlightTimer) {
691692
clearTimeout(highlightTimer);
692693
highlightTimer = null;

examples/src/model.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,14 @@ export interface PianoKey {
77
type: 'white' | 'black';
88
midi: number; // 21-108
99
}
10+
11+
/**
12+
* 吉他高亮位置类型
13+
* 表示一个需要在指板上高亮的点:{ string: number, fret: number }
14+
* string: 弦的索引 (从低音弦 E 开始,索引 6 到 高音弦 E,索引 1)
15+
* fret: 品的索引 (0 表示空弦,1 表示第一品,以此类推)
16+
*/
17+
export interface GuitarPosition {
18+
string: number;
19+
fret: number;
20+
}

examples/src/stores/guitar.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { defineStore } from 'pinia';
22
import { 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

155
export 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

Comments
 (0)