0

これは私が持っているコードです:

myroimportからwinsoundをインポートします*

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()

これを実行しようとすると、エラーが発生し続けます。

Traceback (most recent call last):
  File "C:/Users/Gerren.Kids-PC/Desktop/Gerren's Files/School/Programming 1/Mod 5/Code/WindmillHut.py", line 23, in -toplevel-
    main()
  File "C:/Users/Gerren.Kids-PC/Desktop/Gerren's Files/School/Programming 1/Mod 5/Code/WindmillHut.py", line 22, in main
    winsound.Beep(int(note), int(duration*2000))
ValueError: frequency must be in 37 thru 32767

何が間違っているので、何に変更する必要がありますか?具体的にお願いします。

4

2 に答える 2

3

winsound.beep 関数は、Windows API beep 関数の単なるラッパーです。ウィンドウ関数には、最初のパラメーター (周波数) が 37 から 32767 の間である必要があります。範囲外の周波数は、人間の聴覚範囲外であると思われます。この機能が意図されていた古いサウンドカードはその範囲のみをサポートしていたため、そのようになっている可能性もあります。

winsound.beep() を呼び出しており、 int(note) が返すものはすべてその範囲外です。おそらく、ビープ音を呼び出す前に、メモが有効であることを確認する必要があります。

note = int(play[0])
if note > 37 and note < 32767:
    winsound.Beep(note, int(duration*2000))
else:
    print("error in input")
于 2012-10-18T19:30:48.287 に答える
0

winsound のドキュメントから:

周波数パラメーターは、音の周波数 (ヘルツ) を指定し、37 ~ 32,767 の範囲内である必要があります。

myro.makeSong の出力は周波数のリストではなく、音符のリストです。ルックアップを行う必要があります。http://wiki.roboteducation.org/Song_File_Format

于 2012-10-18T19:36:27.040 に答える