Чтобы сыграть ноту, нам нужно знать ее частоту и как долго она должна играть. Для этого в упражнении у меня есть следующие две переменные:
Словарь под названием freqs, где ключи - это строки, представляющие имя символа, а значения - числа, представляющие частоты.
freqs = {"la": 220,
"si": 247,
"do": 261,
"re": 293,
"mi": 329,
"fa": 349,
"sun": 392,
}
И строки, содержащие примечания к песне:
notes =
"sol,250-mi,250-mi,500-fa,250-re,250-re,500-do,250-re,250-mi,250-fa,250-sol,250-sol,250-sol,500"
Строки строятся следующим образом:
После каждого символа появляется запятая, за которой следует число, представляющее продолжительность времени, в течение которого персонаж должен играть в. Каждый символ отделен друг от друга знаком da sh. На первом этапе я использовал метод split, чтобы разделить строки символов по дефису. И я проверил, чтобы это было итеративно
Для воспроизведения персонажа я должен использовать скелет Следующий код:
import winsound
...
winsound.Beep (frequency, duration)
Когда функция Beep получает два параметра: частоту персонажа и продолжительности времени, которое будет сыграно. (длительность, частота)
Мне нужно написать программу, которая воспроизводит песню "Little Jonathan" в соответствии со строкой нот в примечаниях (которая обозначает структуру песни), чтобы создать итерацию из вышеприведенного символа. строки и запустите его для l oop, или используйте следующую функцию.
Это мой код до сих пор, не работал хорошо. Как мне продолжить отсюда?
def Beep(frequency, duration ):
for word in duration:
yield frequency[word]
frequency={"la": 220,"si": 247,"do": 261,"re": 293,"mi": 329,"fa":
349,"sol": 392,
}
res = Beep(['sol,250', 'mi,250', 'mi,500', 'fa,250', 're,250', 're,500', 'do,250', 're,250', 'mi,250', 'fa,250', 'sol,250', 'sol,250', 'sol,500'],frequency)
print(next(res))
желаемый вывод:
250,392
500,329
250,349
250,293
500,293
250,261
250,293
250,329
250,349
250,392
250,392
500,392