淘先锋技术网

首页 1 2 3 4 5 6 7

Pygame声音和音乐

无论游戏的视觉效果和游戏玩法多么出色,如果没有出色的配乐和音乐,它就是不完整的。声音和音乐是视频游戏沉浸感的重要组成部分,没有它们,体验就会变得空虚。

pygame.mixer 库引入了对音频和声音播放的支持。它的伟大之处在于它不仅限于制作游戏。您可以单独使用 Mixer 库作为一个独立的库来在您的普通 Python 程序中播放声音和音乐。

使用mixer库

首先要知道的是 pygame.mixer 库中的 music 和 sound 是有区别的。确保不要混淆两者。sound在游戏开发中主要用来播放短小的声音文件,例如碰撞噪音或哔哔声,通常只有几秒钟的时间。而music主要用来播放较长的音频曲目,例如背景音乐或长达一个小时的歌曲。

music库

我们将首先介绍音乐,因为它是更大更复杂的图书馆。

首先要做的是将适当的音乐文件加载到music.load()函数中。请记住将两者保​​存在同一目录中,否则您将不得不提及完整的文件路径。

music.play()

music.play()函数,用于播放已经加载的音频片段。可以通过多种方式调用此函数来更改它播放音频剪辑的方式。

pygame.mixer.music.play(0)
pygame.mixer.music.play(5)
pygame.mixer.music.play(-1)

不带参数调用music.play()或0传递给它只会播放一次音频剪辑。作为参数传递-1将无限期地播放音频剪辑。

传递 0 以外的任何其他正整数将导致歌曲重复多次。例如,5会将歌曲重复 5 次。

music.queue()

music库在任何给定时间只允许加载和播放一个音乐文件。但是,您可以使用music.queue()以排队的方式播放。一首播完,播接下来的另一首音乐。

music.stop()

music.stop()功能类似于音频播放器上的“停止”按钮。stop 函数会结束你当前的音乐播放,如果再次调用play()函数,它会从头开始播放。

music.pause() 和 music.unpause()

music.pause()暂停音乐播放。

调用 unpause() 函数将恢复音乐。

music.set_endevent()

音乐停止播放后触发相应的事件

SONG_END_EVENT = pygame.USEREVENT + 1
 
while True:
    for event in pygame.event.get():
        if event.type == SONG_END:
            # Code to be executed

sound库

在 Pygame 中使用简单的声音文件比播放音乐要简单得多。

播放声音涉及两个步骤。首先,您必须创建一个声音对象,如下所示。

接下来我们用一个简单的play()方法调用它。另一种选择是使用该Sound.play()函数,但时间更长。

sound_effect.play()
#Alternate
pygame.mixer.Sound.play(sound_effect)

与音乐不同,我们可以在任何时候拥有多个声音对象,但不要尝试一次播放多个。

例子

import pygame
from tkinter import *
 
def play():
    pygame.mixer.music.load('bg.wav')
    pygame.mixer.music.play()
 
def pause():
    pygame.mixer.music.pause()
 
def unpause():
    pygame.mixer.music.unpause()
 
def sound():
    pygame.mixer.Sound.play(sound_effect)
        
                  
pygame.init()
sound_effect = pygame.mixer.Sound('crash.wav') 
 
root = Tk()
root.geometry('180x200')
 
myframe = Frame(root)
myframe.pack()
 
mylabel = Label(myframe, text = "pygame声音")
mylabel.pack()
 
button1 = Button(myframe, text = "播放", command = play, width = 15)
button1.pack(pady = 5)
button2 = Button(myframe, text = "Sound", command = sound, width = 15)
button2.pack(pady = 5)
button3 = Button(myframe, text = "恢复暂停", command = unpause, width = 15)
button3.pack(pady = 5)
button4 = Button(myframe, text = "暂停", command = pause, width = 15)
button4.pack(pady = 5)
 
root.mainloop()