声音不会一直播放! - Pygame,Python
Posted
技术标签:
【中文标题】声音不会一直播放! - Pygame,Python【英文标题】:Sound won't be played consistently! - Pygame, Python 【发布时间】:2019-09-12 01:15:49 【问题描述】:我正在尝试使用 Python 中的 Pygame 库来演奏一些钢琴声音。我有 .wav 格式的音符,并且我想使用 while 循环持续播放一些音符,但结果与我不同。
我确实尝试了一些其他可能的解决方案,但我没有找到任何解决我的问题的方法。我希望这三个音符(声音)同时播放并每 0.4 秒重复一次。
c4.wav : https://gofile.io/?c=F3U1LG
e4.wav : https://gofile.io/?c=4KflZ9
a4.wav : https://gofile.io/?c=mtNXWd
import pygame
import time
pygame.init()
c4 = pygame.mixer.Sound("c4.wav")
e4 = pygame.mixer.Sound("e4.wav")
a4 = pygame.mixer.Sound("a4.wav")
while True:
c4.play()
e4.play()
a4.play()
time.sleep(0.4)
【问题讨论】:
您能否编辑您的问题以包含有关确切程序执行时发生的情况的信息。你只是告诉我们这不是你所期望的。 根据问题所在,这些答案也可能有所帮助 - ***.com/questions/2936914/pygame-sounds-dont-play 【参考方案1】:来自pygame.mixer.Sound.play() documentation:
开始在可用频道上播放声音(即在计算机的扬声器上)。这将强制选择一个频道,因此播放可能会在必要时切断当前播放的声音。
所以你需要等待声音完成播放(或使用多个通道同时发出声音)
可能是这样的:
def playAndWait( sound ):
""" Play a sound, wait for it to finish """
sound.play() # play the sound
time.sleep( sound.get_length() ) # wait for sound to end
# Quickly confirm sound has stopped, should not loop (much).
# (This is probably unnecessary)
while ( pygame.mixer.get_busy() ):
time.sleep( 0.1 )
while True:
playAndWait( c4 )
playAndWait( e4 )
playAndWait( a4 )
time.sleep( 0.4 )
在 pygame 中使用 time.sleep()
并不理想,因为它会减慢/中断事件处理。所以在实践中,需要使用其他一些等待延迟计时的方法。
【讨论】:
我不想等待声音结束。假设这些声音每个长 2 秒。在我播放完每一个之后,我想播放确切的声音,而不会在我第一次播放它们时中断,在播放 0.4 秒后它一直在播放。因此,当我播放第一个声音时,在它结束之前(2 秒),我想再播放 5 次。所以我想在第一个声音是 0.4 秒、0.8 秒、1.2 秒、1.6 秒以及在 2 秒结束时播放 ot,但是这 5 次都不应该停止。有可能吗? @MateoKurti - 是的,这是可能的,但您必须自己管理延迟。问题中的代码播放所有 3 种声音,可能在前一个声音甚至输出之前开始下一个声音,因此在循环重复之前,用户只会听到最后排队的声音 (a4) 的 0.4 秒。以上是关于声音不会一直播放! - Pygame,Python的主要内容,如果未能解决你的问题,请参考以下文章