Я пытаюсь построить панду DataFrame из хроматических частот между A1 (55 Гц) и A8 (7040 Гц). По сути, я хочу, чтобы это выглядело так ...
df = pd.DataFrame(columns=['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'])
df.loc[0] = (55, 58.27, 61.74, 32.7, 34.65, 36.71, 38.89, 41.2, 43.65, 49, 51.91)
Но без необходимости вручную назначать все частоты для их соответствующих нот и с октавой на ряд (октава от 1 до 8).
На основе сайта http://pages.mtu.edu/~suits/notefreqs.html, интервал между каждой заметкой (или «полушагом») для одной заметки равен ...
def hz_stepper(fixed_note, steps):
a = 2 ** (1/12)
return fixed_note * a ** steps
Используя эту функцию 'hz_stepper', я могу хроматически увеличивать или уменьшать данную ноту n раз, присваивая 1 или -1 переменной steps.
У меня вопрос, как мне создать DataFrame, где все строки выглядят так, как я это делал вручную, но используя понимание списка для формирования строк?