Kivy - 音频
Kivy 框架提供了 Sound 类,用于处理加载音频文件、播放和停止播放等功能。Sound 类是核心类之一,在"kivy.core.audio"模块中定义。
不建议直接实例化 Sound 对象。相反,请使用 SoundLoader 函数,如下所示 −
from kivy.core.audio import SoundLoader sound = SoundLoader.load('test.mp3')
音频播放由 Gstreamer 实现处理:使用 Gi/Gst 和 PyGST。 Gi/GST 适用于 Python 2+3 和 Gstreamer 1.0,而 PyGST 仅适用于 Python 2 + Gstreamer 0.10。
请注意,核心音频库不支持录制音频。如果您需要此功能,请参阅 audiostream 扩展。
Sound 对象具有以下重要属性/方法 −
Sr.No | 属性/方法和说明 |
---|---|
1 | load() 将文件加载到内存中。 |
2 | play() 播放文件。 |
3 | stop() 停止播放。 |
4 | unload() 从内存中卸载文件。 |
5 | seek(position) 转到<position> (以秒为单位)。 |
6 | get_pos() 返回音频文件的当前位置。如果未播放,则返回 0。 |
7 | length 获取声音的长度(以秒为单位)。 |
8 | loop 如果声音在播放结束时自动循环,则设置为 True。 |
9 | source 音频文件的文件名/来源。 |
10 | state 声音的状态,为"停止"或"播放"之一。 |
让我们使用 Sound 对象并在 Kivy 中构建一个简单的音频播放器。应用程序窗口包含一个标签,显示播放器的当前状态,即播放器是正在播放还是已停止,以及两个按钮来控制播放。左侧的按钮的标题为"播放"。
单击时,它会从 mp3 文件加载声音对象,调用 play() 方法,将标签标题更改为"播放"并启用暂停按钮,其标题更改为"停止"。
当其标题为"停止"时单击左侧按钮时,播放将停止,恢复标签标题并禁用暂停按钮。
当您点击暂停按钮时,音频文件的当前位置存储在 pos 变量中,按钮标题更改为恢复。当点击时,通过调用 seek() 方法检索播放位置。
示例
以下是完整代码 −
from kivy.app import App from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout from kivy.uix.gridlayout import GridLayout from kivy.core.audio import SoundLoader from kivy.core.window import Window Window.size = (720, 350) class audiodemoapp(App): def build(self): layout = GridLayout(cols=1, padding=10) self.l1 = Label( text='Press Start to Play', font_size=40, color=[.8, .6, .4, 1] ) layout.add_widget(self.l1) box = BoxLayout(orientation='horizontal') self.button1 = Button(text="Play", font_size=32) self.button2 = Button( text='Pause', font_size=32, disabled=True ) box.add_widget(self.button1) box.add_widget(self.button2) layout.add_widget(box) self.button1.bind(on_press=self.start_stop) self.button2.bind(on_press=self.pause_resume) return layout def start_stop(self, event): if self.button1.text == 'Play': self.l1.text = 'Playing' self.button1.text = 'Stop' self.sound = SoundLoader.load('sample.mp3') self.pos = 0 self.button2.disabled = False self.sound.play() else: if self.button1.text == 'Stop': self.l1.text = 'Press to Play' self.button1.text = 'Play' self.sound.unload() self.button2.disabled = True self.pos = 0 def pause_resume(self, event): if self.button2.text == 'Pause': self.button2.text = 'Resume' self.l1.text == 'Paused' self.pos = self.sound.get_pos() print(self.pos) self.sound.stop() else: if self.button2.text == 'Resume': self.l1.text = 'Playing' self.button2.text = 'Pause' print(self.pos) self.sound.seek(self.pos) self.sound.play() audiodemoapp().run()
输出
下图显示状态标题设置为"正在播放"并且暂停按钮已启用。 "暂停"按钮可在"暂停"和"恢复"状态之间切换。