Преобразовать строку в нотации основного тона в JavaScript

Я для бывшего. Строка t0 означает в скрипичном ключе на 0 позиции. В поле обозначения В4

Итак, t1 = C5, t-1 = A4, t-2 = G4...

Должен ли я создать каждую строку в массиве, чтобы отобразить все заметки, или это можно сделать легко? Спасибо.

2 ответа

Решение

Это то, что вы ищете?

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

Моя музыкальная теория определенно не соответствует стандартам, но если я получу то, о чем вы просите, это больше о том, как приблизиться к идентификации самой ноты и преобразованию в другой формат.

Вам определенно не нужно отображать все заметки. Я хотел бы создать массив нот, а затем вычислить октаву и смещение от базовой ноты. Оттуда это простой поиск массива и конкатенация строк, чтобы получить октаву.

Что-то вроде этого:

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);
}
Другие вопросы по тегам