从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

第15讲 | 如何载入背景音乐和音效?

s1.play()
s1.set_volume(0.5)
s1 = pygame.mixer.Sound('a.wav')
pygame.mixer.music.play()
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.load('bgm.mp3')
pygame.mixer.init()
C接口,通用多种语言
专业的音频库
pygame.mixer
不需要多线程控制
BASS_ChannelIsActive(s)
BASS_SetVolume(v)
BASS_ChannelPlay(s, false)
HSTREAM s = BASS_StreamCreateFile(false, "a.mp3", 0, 0, 0)
BASS_Init(-1, 44100, 0, hwnd, NULL)
pygame.mixer.music.unpause()
pygame.mixer.music.pause()
播放音效
设置音效音量
载入音效
播放音乐
设置音量
载入音乐
初始化
BASS音频库特点
Pygame音频模块
Pygame音频播放特点
获取播放状态
调整音量
播放音频
载入音频文件
初始化BASS库
恢复音乐
暂停音乐
音效播放
音频播放
小结
BASS音频库
事件监测
Pygame中音频和音效的播放
如何载入背景音乐和音效?

该思维导图由 AI 生成,仅供参考

好的音乐总是伴随着游戏一起,一直被玩家所记忆。在游戏中播放音乐和音效并不是什么困难的事情,但是究竟什么时候播放什么音效,具体怎么实现,这恐怕就需要一些技巧了。比如,我今天要讲的,我们可以和某些函数捆绑在一起实现。
Pygame 支持 mp3、ogg、wav 音频和音效的播放。音乐的模块都在 pygame.mixer 中,这里面包括音乐和音效。
我们在使用音频部分模块的时候,需要先初始化一次。
pygame.mixer.init()
这个初始化应该在 pygame.init() 的初始化之后。
我们来看一下具体的函数,这些函数,存在在 pygame.mixer.Sound 模块下。
我们再来看一下 Pygame.mixer.music 音乐模块。我们可以尝试一下载入音频并且播放。
pygame.mixer.music.load('bgm.mp3')
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play()
s1 = pygame.mixer.Sound('a.wav')
s1.set_volume(0.5)
s2 = pygame.mixer.Sound('b.wav')
s2.set_volume(0.5)
我来解释一下这段代码。
刚开始,我们载入了一个名叫 bgm 的 mp3 文件,告诉程序需要载入这个文件,然后调整音量到 0.5,随后就是 play,也就是播放,播放是在程序的后台播放,然后程序会接着跑到下面的代码行。
随后,我们使用 Sound 模块,Sound 模块初始化会载入 a.wav,然后返回一个对象,这个对象设置音量为 0.5,随后再初始化一次,载入 b.wav,然后设置音量为 0.5。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何在游戏中载入背景音乐和音效,以及使用Pygame和BASS音频库实现音频播放的方法。在Pygame中,音乐和音效的播放都在pygame.mixer模块中,可以使用music模块载入音乐,使用Sound模块载入音效。文章还介绍了BASS音频库的使用方法,包括初始化、建立流、播放、调整音量和获取播放状态等功能。此外,文章指出在Pygame中播放音乐不需要多线程控制,而BASS音频库则需要编写多线程的代码来实现后台播放和多个频道播放等功能。总的来说,本文通过具体的代码示例和技术细节,详细介绍了在游戏开发中如何实现音频和音效的播放,以及介绍了BASS音频库的特点和使用方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 换你睡床右边
    补一个坑吧,可能我和作者用的版本不太一样,有时候代码会有一些差异才能在我这边运行,在pygame.mixer.load可以加载包括mp3在内的音频,而pygame.mixer.Sound却不能加载mp3。小白填坑中🤔

    作者回复: 不能加载有很多原因,可以说得更明白点看看代码

    2018-07-16
  • 三硝基甲苯
    pygame.mixer.init() songs = ["sugar-1.mp3","sugar-2.mp3","sugar-3.mp3"] current = 0 while True: if not (pygame.mixer.music.get_busy()): pygame.mixer.music.load(songs[current]) pygame.mixer.music.set_volume(0.5) pygame.mixer.music.play() current = current + 1 if current > len(songs) - 1: current = 0 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() 看了一眼doc。试了一下 感觉这样应该没啥问题了。只是感觉写在循环里。 如果以后游戏做大了会出事情吧。

    作者回复: 真的大型游戏也不会真的拿来做代码测试用

    2018-07-08
  • 艾尔欧唯伊
    为什么pygame 必须要开启窗口才能播放音乐,去掉pygame.display.set_mode()就没有声音。另外死循环是因为防止程序自己关闭么?
    2018-10-06
  • wusiration
    当音乐播放完成时,调用pygame.mixer.music.set_endevent()函数,发送一个事件标志。同时,在循环中,当监听到播放结束的事件标志后,开始加载另外一首歌并播放。 pygame.mixer.music.load("a.mp3") pygame.mixer.music.set_endevent(pygame.USEREVENT) pygame.mixer.music.play() while True: for event in pygame.event.get(): if event.type == pygame.USEREVENT: pygame.mixer.music.load("b.mp3") pygame.mixer.music.play() pygame文档中说pygame.mixer.music.queue()也可以实现该要求,但是在使用中根本没起作用。
    2018-07-07
  • zhu见见
    有源代码地址吗
    2018-07-05
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部