Гитара Python шаг / частота исполнения - PullRequest
0 голосов
/ 26 февраля 2019

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

Я нашел эту статью , в которой подсвечивались частоты каждой ноты, которую вручную (с pyaudio) смешивали, чтобы сделать мою собственную версию Smoke On The Water, используя сопоставленную последовательность из статьи для каждой ноты.

Это бы сработало, и я мог бы создавать аккорды, создавая параллельные процессы, хотя у меня нет способа конвертировать ноту или номер табуляции в конкретный шаг.Большая часть моих данных имеет вид:

0 3 5 0 3 6 5 0 3 5 3 0

По сути, мне требуется уравнение или функция, которая может возвращать частоту для входа, где 0 - это открытая E-low-string, и каждое значение увеличиваетсяна 1 - раздражение на грифе (1 = F).

Нет ли явного паттерна?

Я бы хотел, но я подозреваюсинусоидальные волны являются подозреваемыми.Взятие разницы между E и F равно 5,1 , а F к F # равно 5,2 и, наконец, F # к G составляет 5,5 .

Спасибоза любую помощь, это очень ценится.

1 Ответ

0 голосов
/ 26 февраля 2019

Нет ли явного паттерна?

Да, для музыки вообще есть.Две соседние ноты разделены с коэффициентом 2 ^ (1/12). Википедия - двенадцатый корень из двух Википедия - полутон .Он проверил это на числах в вашей связанной статье, и шаблон идеально соответствовал количеству значащих цифр, показанных в статье.

РЕДАКТИРОВАТЬ ОП запросил некоторый код.Вот быстрый - но подробно задокументированный - выстрел:

# A semitone (half-step) is the twelfth root of two
# https://en.wikipedia.org/wiki/Semitone
# https://en.wikipedia.org/wiki/Twelfth_root_of_two
SEMITONE_STEP = 2 ** (1/12)

# Standard tuning for a guitar - EADGBE
LOW_E_FREQ = 82.4    # Baseline - low 'E' is 82.4Hz
# In standard tuning, we use the fifth fret to tune the next string
# except for the next-to-highest string where we use the fourth fret.
STRING_STEPS = [5, 5, 5, 4, 5]

# Number of frets can vary but we will just presume it's 24 frets
N_FRETS = 24

# This will be a list of the frequencies of all six strings,
# a list of six lists, where each list is that string's frequencies at each fret
fret_freqs = []
# Start with the low string as our reference point
# We just short-hand the math of multipliying by SEMITONE_STEP over and over
fret_freqs.append([LOW_E_FREQ * (SEMITONE_STEP ** n) for n in range(N_FRETS)])
# Now go through the upper strings and base of each lower-string's fret, just like
# when we are tuning a guitar
for tuning_fret in STRING_STEPS:
    # Pick off the nth fret of the previous string and use it as our base frequency
    base_freq = fret_freqs[-1][tuning_fret]
    fret_freqs.append([base_freq * (SEMITONE_STEP ** n) for n in range(N_FRETS)])

for stringFreqs in fret_freqs:
    # We don't need 14 decimal places of precision, thank you very much.
    print(["{:.1f}".format(f) for f in stringFreqs])

Вывод этого:

['82.4', '87.3', '92.5', '98.0', '103.8', '110.0', '116.5', '123.5', '130.8', '138.6', '146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1'] 
['110.0', '116.5', '123.5', '130.8', '138.6', '146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3'] 
['146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3'] 
['196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9'] 
['246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9', '783.9', '830.5', '879.9', '932.2'] 
['329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9', '783.9', '830.5', '879.9', '932.2', '987.7', '1046.4', '1108.6', '1174.6', '1244.4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...