Python pygame播放长按按钮时的声音

Python pygame播放长按按钮时的声音,python,audio,pygame,Python,Audio,Pygame,对于我的大学项目,我想写一点,让我们称之为工具。 因此,只要按下指定的按钮,我就想播放正弦波 到目前为止,我得到的是: #create a sine array with frequency, samplerate and duration: def sine(freq, samplerate, duration): duration = duration * samplerate wave = [math.sin(2.0 * math.pi * freq * t / samplerat

对于我的大学项目,我想写一点,让我们称之为工具。 因此,只要按下指定的按钮,我就想播放正弦波

到目前为止,我得到的是:

#create a sine array with frequency, samplerate and duration:
def sine(freq, samplerate, duration):
  duration = duration * samplerate
  wave = [math.sin(2.0 * math.pi * freq * t / samplerate) for t in range(0, duration)]
  return numpy.array(wave)

# this is the point int the main loop where the sound has to be played
if key[pygame.K_p]:
  pygame.sndarray.make_sound(sine(440, 44100, duration).play()
问题是,如果我按下按钮,它将在我设置的持续时间内播放,并在每次循环识别我按下按钮时覆盖它

我认为它应该与获取当前时间和释放按钮的时间有关,但不知道如何使其实现


也许你可以为我提供一些方法。

你可以让播放声音的if语句每持续几秒钟处理一次,这样最后一个声音文件就在它开始下一个声音文件时结束了

您也可以尝试使用pygame.mixer.sound,这样您就可以播放任何想要播放的声音。然后使用.play方法,您可以让它播放10000次,并在释放按钮时调用stop

我建议测试释放和按下按钮的方式是在另一个变量中保持按钮的最后状态。前

pwapressed=pygame.K\p

那就让你的if语句

如果pwapressed=false且pygame.K\p:

这只会在您第一次按下该键时触发,而不是每次循环运行时都继续运行if语句


希望对您有所帮助。

尝试使用if语句检查当前是否正在播放声音

# check the mixer is not engaged when the key is down
if key[pygame.K_p] and (not pygame.mixer.get_busy() ):
   <your sound>.play()
#  check if the mixer is engaged when the key is up
elif not key[pygame.K_p] and pygame.mixer.get_busy():
   <your sound>.stop()

为此,您可能希望在开始时创建声音并将其存储在一个变量中,否则很难引用它以便稍后停止。

是否播放:1。按下按钮时,2。按此按钮运行一定时间后启动,3。播放时间等于按下按钮但松开按钮后的时间。我想在松开按钮后开始播放声音并停止播放,所以只要我按下按钮,我也在想,但问题是我想用正弦波,因此我有一个持续时间,这就是我想的,你能停止声音吗,即pygame.sndarray.stop?如果是这样,您可以使用if语句if pwapressed ex。。以愚蠢的长持续时间启动和停止声音。这是一个想法,问题是我想在下一步中使用控制器更改频率,因此这不是真正的解决方案。您可以将条件添加到if语句中,以便它检查按钮是否已释放或设置是否已更改。。。