1

所以我的代码是这样的:

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() 库可以做到这一点吗?

4

1 回答 1

3

即使您使用这样的 while 循环:

 import winsound

 while True:
    winsound.Beep(100, 100)

中间还有一小段停顿,听起来不像是一个坚实的音符,而且你不能比这更快

你仍然可以尝试,但我认为你不能让它听起来像一声长哔声,但 winsound 确实有winsound.PlaySound(sound, flags),所以你可以在这里加载声音是Winsound Docs

你可以做的就是使用Pygame,它会做更多的工作,但它可能是一种更好的音乐创作方式

你可以使用Pygame Music来加载和播放音乐,我确信你可以让它更具交互性,因为你必须从文件中加载每个声音

如果您不想做所有这些,请查看Python In Music ,这可能是一个不错的起点

于 2013-07-02T10:43:14.903 回答