将字符串转换为javascript中的音高表示法

问题描述:

我有前例。字符串t0意味着在高音谱号在的位置。 在间距的符号是B4将字符串转换为javascript中的音高表示法

所以T1 = C5T1 = A4T-2 = G4 ...

我应该创建阵列的每一个串映射所有笔记,还是可以轻松完成? Thx。

+2

我不知道你在问什么。请注意,并非每个人都熟悉音乐符号。请阅读[我如何提出一个好问题?](https://*.com/help/how-to-ask) –

这是你在找什么?

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);

+0

是的...这就是正确的只是改变位置,因为八度开始于C 'let curT = -27;常数字母= ['C','D','E','F','G','A','B']; let result = {}; (let i = 0; i

+0

好吧,我明白了。我从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); 
}