【发布时间】:2013-06-29 16:24:30
【问题描述】:
所以我的代码是这样的:
import winsound
import time
length = 250
class Notes():
def frequency(halfNotesFromA4):
value = 440 * ((2)**(1.0/12.0))**halfNotesFromA4
return (int)(value)
def processNote(note):
if(note == 'C'):return Notes.frequency(3)
if(note == 'D'):return Notes.frequency(5)
if(note == 'E'):return Notes.frequency(7)
if(note == 'F'):return Notes.frequency(8)
if(note == 'G'):return Notes.frequency(10)
if(note == 'A'):return Notes.frequency(12)
if(note == 'B'):return Notes.frequency(14)
song = "EDCDEEE"
noteList = list(song)
print(noteList)
for note in noteList:
print("Doing ", note)
frequency = Notes.processNote(note)
winsound.Beep(frequency, length)
它工作正常,但我遇到的问题是每次哔哔声之间都有停顿。我希望连续播放声音而没有停顿,这样听起来就像真正的音乐。 winsound.Beep() 库可以做到这一点吗?
【问题讨论】:
-
也许
ASYNC标志可以提供帮助:docs.python.org/2/library/winsound.html#winsound.SND_ASYNC 顺便说一句:你的笔记不应该是 Notes.frequency(n) 且 n = [3, 5, 7, 8, 10, 12 , 14]? -
频率方法返回从 A4(440hz) 设置的频率的四舍五入版本,因此它返回正确的值。另外我正在查找您正在谈论的 ASYNC 标志'
-
但是你不能用二分音符来获得大音阶。例如。从 C 到 D 有一个完整的音符步骤。
-
啊哈哈。你的权利,Notes.frequency(5) 将是 D 而不是 E!傻我。此外,我看不到异步标志如何导致 Beep 在最后一次哔声之后立即播放:(