我一直得到值错误:频率必须在37到32767在Python和Winsound

2024-09-28 03:11:37 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

导入winsound 从myro进口*

def main():

    HftM1 = makeSong("REST 1; REST 1; REST 1; REST 1; REST 1; REST 1; REST 1; REST 1; D4 1/6; F4 1/6; D5 2/3; D4 1/6; F4 1/6; D5 2/3; E5 1/2; F5 1/6; E5 1/6; F5 1/6; E5 1/6; C5 1/6; A4 2/3; A4 1/3; D4 1/3; F4 1/6; G4 1/6; A4 1; A4 1/3; D4 1/3; F4 1/6; G4 1/6; E4 1; D4 1/6; F4 1/6; D5 2/3; E5 1/2; F5 1/6; E5 1/6; F5 1/6; E5 1/6; C5 1/6; A4 2/3; A4 1/3; D4 1/3; F4 1/6; G4 1/6; A4 2/3; A4 1/3; D4 1; REST 1; REST 1; REST 1")
    saveSong(HftM1, "WindmillHut.txt", append=1)
    song = readSong("WindmillHut.txt")

    play = []

    for n in range(len(song)):
        play = song[n]
        note = play[0]
        duration = play[1]
        winsound.Beep(int(note), int(duration*2000))
main()

当我尝试运行此程序时,我总是收到错误:

^{pr2}$

我做错了什么?我需要把它改成什么?请具体点。在


Tags: restplaysongmainf5a4g4c5
2条回答

来自the winsound documentation

The frequency parameter specifies frequency, in hertz, of the sound, and must be in the range 37 through 32,767.

的输出迈罗。马克松不是频率列表,而是音符列表。你需要查一下。http://wiki.roboteducation.org/Song_File_Format

在winsound.beep声函数只是windowsapibeep函数的包装。windows函数要求第一个参数(频率)介于37和32767之间。我怀疑任何超出范围的频率都超出了人类的听力范围。也可能是这样,因为旧的声卡,这个功能是为了支持这个范围。在

你在打电话winsound.beep声()和int(注意)返回的值都超出了该范围。你应该在呼叫哔哔声之前检查一下是否有效。在

note = int(play[0])
if note > 37 and note < 32767:
    winsound.Beep(note, int(duration*2000))
else:
    print("error in input")

相关问题 更多 >

    热门问题