Kivy 简明教程
Kivy - Audio
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 适用于具有 Gstreamer 1.0 的 Python 2+3,而 PyGST 仅适用于 Python 2 + Gstreamer 0.10。
请注意,核心音频库不支持录制音频。如果您需要此功能,请参阅 audiostream 扩展。
Sound 对象具有以下重要的属性/方法 −
Sr.No |
Properties/Methods & Description |
1 |
load() 将文件加载到内存中。 |
2 |
*play()*Play the file. |
3 |
*stop()*Stop playback. |
4 |
unload() 从内存中卸载文件。 |
5 |
seek(position) 转到 <position>(以秒为单位)。 |
6 |
get_pos() 返回音频文件当前的位置。如果不播放,则返回 0。 |
7 |
length 获取声音的长度(以秒为单位)。 |
8 |
loop 如果声音在其结束时应该自动循环播放,则设置为 True。 |
9 |
source 音频文件的名称 / 源。 |
10 |
state 声音的状态,“stop”或“play”之一。 |
让我们使用 Sound 对象并在 Kivy 中构建一个简单的音频播放器。应用程序窗口包含一个标签,显示播放器的当前状态,即它是否正在播放还是已停止,以及两个按钮来控制播放。左边的按钮被标注为“Play”。
当被单击时,它从 mp3 文件加载声音对象,调用 play() 方法,将标签标题更改为“Playing”并启用暂停按钮,它的标题更改为“Stop”。
当左键单击而其标题为“Stop”时,播放将停止,恢复标签标题并禁用暂停按钮。
当点击暂停按钮时,音频文件当前位置存储在 pos 变量中,按钮标题变为继续。当点击该按钮时,通过调用 seek() 方法来检索播放位置。
Example
以下是完整代码——
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()