辛苦啦~ 这次是我们系统的pygame理论学习的最后一章了,把这次的音乐播放讲完了,pygame的基础知识就全部OK了。不过作为完整的教程,只有理论讲解太过枯燥了,我随后还会加一个或更多的实践篇系列,看需要可能也会追加真3D等额外的内容。
就像上次所说的,pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。
pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放),所以最好还是都用Ogg文件,我们可以很容易把MP3转换为Ogg文件,自己搜一下吧。
我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,这里并没有一个类似Music这样的类和对象,因为背景音乐一般般只要有一个在播放就好了不是么~不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。
音效和音乐方法总结
Sound对象:
方法名 | 作用 |
---|---|
fadeout | 淡出声音,可接受一个数字(毫秒)作为淡出时间 |
get_length | 获得声音文件长度,以秒计 |
get_num_channels | 声音要播放多少次 |
get_volume | 获取音量(0.0 ~ 1.0) |
play | 开始播放,返回一个Channel对象,失败则返回None |
set_volume | 设置音量 |
stop | 立刻停止播放 |
Channels对象:
方法名 | 作用 |
---|---|
fadeout | 类似 |
get_busy | 如果正在播放,返回true |
get_endevent | 获取播放完毕时要做的event,没有则为None |
get_queue | 获取队列中的声音,没有则为None |
get_volume | 类似 |
pause | 暂停播放 |
play | 类似 |
queue | 将一个Sound对象加入队列,在当前声音播放完毕后播放 |
set_endevent | 设置播放完毕时要做的event |
set_volume | 类似 |
stop | 立刻停止播放 |
unpause | 继续播放 |
Music对象:
方法名 | 作用 |
---|---|
fadeout | 类似 |
get_endevent | 类似 |
get_volume | 类似 |
load | 加载一个音乐文件 |
pause | 类似 |
play | 类似 |
rewind | 从头开始重新播放 |
set_endevent | 类似 |
set_volume | 类似 |
stop | 立刻停止播放 |
unpause | 继续播放 |
get_pos | 获得当前播放的位置,毫秒计 |
虽然很简单,不过还是提供一个例程吧,这里面音乐的播放很简单,就是上面讲过的,不过其中还有一点其他的东西,希望大家学习一下pygame中按钮的实现方法。
界面如上,运行的时候,脚本读取./MUSIC下所有的OGG和MP3文件(如果你不是Windows,可能要去掉MP3的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# -*- coding: utf-8 -*- # 注意文件编码也必须是utf-8 SCREEN_SIZE = (800, 600) # 存放音乐文件的位置 MUSIC_PATH = "./MUSIC" import pygame from pygame.locals import * from math import sqrt import os import os.path def get_music(path): # 从文件夹来读取所有的音乐文件 raw_filenames = os.listdir(path) music_files = [] for filename in raw_filenames: # 不是Windows的话,还是去掉mp3吧 if filename.lower().endswith('.ogg') or filename.lower().endswith('.mp3'): music_files.append(os.path.join(MUSIC_PATH, filename)="alignnone" alt="" src="http://ww1.sinaimg.cn/mw690/0064cTs2gw1ez70t6897xj30fa0bgtaa.jpg" width="550" height="412">
就像上次所说的,pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。 pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放),所以最好还是都用Ogg文件,我们可以很容易把MP3转换为Ogg文件,自己搜一下吧。 我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,这里并没有一个类似Music这样的类和对象,因为背景音乐一般般只要有一个在播放就好了不是么~不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。 音效和音乐方法总结Sound对象:
Channels对象:
Music对象:
虽然很简单,不过还是提供一个例程吧,这里面音乐的播放很简单,就是上面讲过的,不过其中还有一点其他的东西,希望大家学习一下pygame中按钮的实现方法。 界面如上,运行的时候,脚本读取./MUSIC下所有的OGG和MP3文件(如果你不是Windows,可能要去掉MP3的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):
|