为了演奏一个音符,我们需要知道它的频率以及它应该演奏多长时间。为此,在练习中我有以下两个变量:
一个名为 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"
字符串的构造如下:
每个字符后面都有一个逗号,后面跟着一个数字,表示该角色应该玩的时间长度。每个字符由破折号相互分隔。在第一阶段,我使用 split 方法通过连字符分割字符串。我检查了它是可迭代的
为了扮演一个角色,我应该使用骨架 下一个代码:
import winsound
...
winsound.Beep (frequency, duration)
当 Beep 函数接收两个参数时:一个字符的频率和播放的时间长度。(持续时间、频率)
我需要编写一个程序,根据音符中的音符串(表示歌曲的结构)播放歌曲“小乔纳森”,以从上述字符串创建可迭代并运行它进行循环,或使用下一个功能。
到目前为止,这是我的代码,效果不佳。我该如何从这里开始?
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