简单使用python的pyopenal播放音频
乐月晨星
2022年07月19日 21:37

pyopenal为python提供了openal绑定和接口。使用pyopenal可以方便的播放wave、ogg vorbis、ogg opus和flac文件,并实现3D音频的播放。

但弱要播放ogg vorbis、ogg opus和flac文件,需安装pyogg库。

在windows平台pyopenal和pyogg的安装十分简单,可以直接使用pypi进行安装。

pip install pyopenal

pip install pyogg

本篇文章首先介绍使用pyopenal来播放一个音频的方法。

以下是相关代码,代码中有注释。

from openal import *

import pyogg

audio_file1 = VorbisFile('D:/sounds/audio1.ogg&#​39;) #加载ogg文件,音频文件路径中不能包含中文路径

audio_file2 = WaveFile('D:/sounds/audio2.wav&#​39;) #加载wave文件

audio_buffer1 = Buffer(audio_file1) #创建音源缓冲区并将音频文件对象加入缓冲区

audio_buffer2 = Buffer(audio_file2)

audio_source1 = Source() #创建声源对象

audio_source1._set_buffer(audio_buffer1) #将音源缓冲区绑定到audio_source上

audio_source2 = Source(audio_buffer2, True) #创建声源对象时直接绑定缓冲区

audio_source1.play() #播放声源

audio_source1.stop() #停止播放声源

audio_source1.set_looping(True) #将声源设定为循环播放

audio_source1.set_gain(1.0) #设置声源音量

audio_source1.pause() #暂停播放,使用play()方法继续播放

oalQuit() #关闭设备

在一个程序内,声源source的最大存在数量为256,因此需合理分配声源对象,若想销毁某声源可以使用destroy()方法

audio_source1.destroy() #销毁audio_source1所指向的声源

多个source可以绑定同一个音源缓冲区,但一个音源缓冲区若被多个source绑定,在使用oalQuit()关闭音频设备之前需将所有source销毁才可顺利关闭

以上代码是为以后实现3 D音频作为基础,若单单只想对音频进行播放也可使用简便加载音频的方法,代码如下:

import openal

audio_file1=openal.oalOpen('D:/sounds/audio1.ogg&#​39;) #加载并创建音源对象

audio_file1.play() #播放音频

audio_file1.stop() #停止播放音频

上面的例子中,oalOpen()主要是将(加载音频数据到缓冲区)、(创建音源对象)、(将音源对象和缓冲区绑定)这三者结合在了一起,虽然这样使用很方便,但在开发的具体使用中还是推荐第一种方法,第一种方法更为灵活一些。

本篇文章就到这里,下篇文章将详细介绍声源Source所具有的各种方法和属性。