国产跑车 发表于 2021-9-18 13:27:36

pygame 中 music 和Sound 模块的区别

pygame中music和Sound实现的功能和使用的方法都是差不多的。请高手科普一下这两个模块的区别。
我分别使用music和Sound模块对同一个音频文件进行调用,可是有一个能播放有一个不能播放。具体情况见下面的代码。

import pygame, sys

pygame.init()

pygame.mixer.init()


screen = pygame.display.set_mode()

pygame.time.delay(1000)


splat = pygame.mixer.Sound("11231.wav")

splat.play()


running = True

while running:

        for event in pygame.event.get():

                if event.type == pygame.QUIT:

                        running = False

pygame.quit()

使用这一段代码可以正常播放音效文件




import pygame, sys

pygame.init()

pygame.mixer.init()


screen = pygame.display.set_mode()


pygame.mixer.music.load('tlza.mp3')

pygame.mixer.music.play()


running = True

while running:

        for event in pygame.event.get():

                if event.type == pygame.QUIT:

                        running = False

                        pygame.quit()



而这一段就不能播放音乐文件
为什么?怎么解决?
谢谢!
还要music模块和sound模块究竟有什么区别,麻烦各位高人解答一下 万分感谢

傻眼貓咪 发表于 2021-9-18 16:00:58

基本上 pygame 里的 mixer.Sound 和 mixer.music 导入的音源无差别
其它差别,就如字面上的意思一样,sound 表示声音,music 表示曲。
一般 music 适用于背景音效,因为其长度比 sound 更长(当然也有短的)
而 sound 更适合作为画面渲染效果音效(比如射击,子弹发出的声音等)

至於两者功能也稍微不同:

mixer.Sound

pygame.mixer.Sound.play 開始聲音播放
pygame.mixer.Sound.stop 停止聲音播放
pygame.mixer.Sound.fadeout 淡出後停止聲音播放
pygame.mixer.Sound.set_volume 設置此聲音的播放音量
pygame.mixer.Sound.get_volume 獲取播放音量
pygame.mixer.Sound.get_num_channels 計算這個聲音播放了多少次
pygame.mixer.Sound.get_length 獲取聲音的長度
pygame.mixer.Sound.get_raw 返迴聲音樣本的字節串副本


mixer.music

pygame.mixer.music.load 加載音樂文件進行播放
pygame.mixer.music.unload 卸載當前加載的音樂以釋放資源
pygame.mixer.music.play 開始播放音樂流
pygame.mixer.music.rewind 重新開始音樂
pygame.mixer.music.stop 停止音樂播放
pygame.mixer.music.pause 暫時停止音樂播放
pygame.mixer.music.unpause 恢復暫停的音樂
pygame.mixer.music.fadeout 淡出後停止音樂播放
pygame.mixer.music.set_volume 設置音樂音量
pygame.mixer.music.get_volume 獲取音樂音量
pygame.mixer.music.get_busy 檢查音樂流是否正在播放
pygame.mixer.music.set_pos 設置播放位置
pygame.mixer.music.get_pos 獲取音樂播放時間
pygame.mixer.music.queue 將聲音文件排隊以跟隨當前
pygame.mixer.music.set_endevent 讓音樂在播放停止時發送一個事件
pygame.mixer.music.get_endevent 獲取頻道在播放停止時發送的事件


我的代码如下图,我通常会以 music 作为背景曲,sound 作为游戏音效(一般都这样,但没有指定一定要这样,随意)

国产跑车 发表于 2021-9-18 16:54:40

好的 谢谢 非常感谢,不过我还是有一个小小的疑问,为什么Sound是个类,而music是个模块。同时在官方的文档里,我看到sound的载入方式是从缓存中实例化一个声音实力,那么是不是说明Sound在每一次创建实例的时候进行了更标准的初始化??

傻眼貓咪 发表于 2021-9-18 18:16:20

国产跑车 发表于 2021-9-18 16:54
好的 谢谢 非常感谢,不过我还是有一个小小的疑问,为什么Sound是个类,而music是个模块。同时在官方的文档 ...

没错
页: [1]
查看完整版本: pygame 中 music 和Sound 模块的区别