将字符串转换为javascript中的音高表示法
我有前例。字符串t0意味着在高音谱号在的位置。 在间距的符号是B4将字符串转换为javascript中的音高表示法
所以T1 = C5,T1 = A4,T-2 = G4 ...
我应该创建阵列的每一个串映射所有笔记,还是可以轻松完成? Thx。
这是你在找什么?
let curT = -22;
const letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
let result = {};
for (let i=0; i < 52; i++) {
const letNum = `${letters[i % 7]}${(parseInt(i/7) + 1)}`;
result[`t${curT}`] = letNum;
curT += 1;
}
console.log(result);
是的...这就是正确的只是改变位置,因为八度开始于C 'let curT = -27;常数字母= ['C','D','E','F','G','A','B']; let result = {}; (let i = 0; i
好吧,我明白了。我从A开始就是因为大多数钢琴都有A作为最低音符:D – Zevgon
我的音乐理论绝对不符合标准,但如果我得到你要求的东西,那更多的是关于如何处理音符本身的识别和转换成不同的格式。
你绝对不需要映射所有笔记。我会通过创建一个音符数组,然后计算八度和基本音符的偏移量。从那里它是一个简单的数组查找和字符串连接来获取八度音程。
事情是这样的:
var notes = ['B','C','D','E','F','G','A'];
function stringtopitch(input)
{
// get the base value
num = parseInt(input.substr(1));
mod = 0
// correct for octaves as needed and identify them
while (num < 0) { num+=7; mod -=1; }
while (num > 7) { num-=7; mod +=1; }
return notes[num] + (mod+4);
}
我不知道你在问什么。请注意,并非每个人都熟悉音乐符号。请阅读[我如何提出一个好问题?](https://stackoverflow.com/help/how-to-ask) –