- Kivy 教程
- Kivy - 首頁
- Kivy 基礎
- Kivy - 入門
- Kivy - 安裝
- Kivy - 架構
- Kivy - 檔案語法
- Kivy - 應用
- Kivy - Hello World
- Kivy - 應用生命週期
- Kivy - 事件
- Kivy - 屬性
- Kivy - 輸入
- Kivy - 行為
- Kivy 按鈕
- Kivy - 按鈕
- Kivy - 按鈕事件
- Kivy - 按鈕顏色
- Kivy - 按鈕大小
- Kivy - 按鈕位置
- Kivy - 圓形按鈕
- Kivy - 停用按鈕
- Kivy - 圖片按鈕
- Kivy 元件
- Kivy - 元件
- Kivy - 標籤
- Kivy - 文字輸入
- Kivy - 畫布
- Kivy - 線
- Kivy - 複選框
- Kivy - 下拉列表
- Kivy - 視窗
- Kivy - 滾動檢視
- Kivy - 走馬燈
- Kivy - 滑塊
- Kivy - 圖片
- Kivy - 彈出視窗
- Kivy - 開關
- Kivy - 旋轉器
- Kivy - 分隔器
- Kivy - 進度條
- Kivy - 氣泡
- Kivy - 標籤頁面板
- Kivy - 散點圖
- Kivy - 手風琴
- Kivy - 檔案選擇器
- Kivy - 顏色拾取器
- Kivy - 程式碼輸入
- Kivy - 模態檢視
- Kivy - 切換按鈕
- Kivy - 相機
- Kivy - 樹檢視
- Kivy - reStructuredText
- Kivy - 操作欄
- Kivy - 播放器
- Kivy - 模板檢視
- Kivy - 虛擬鍵盤
- Kivy - 觸控漣漪
- Kivy - 音訊
- Kivy - 影片
- Kivy - 拼寫
- Kivy - 效果
- Kivy - 輸入記錄器
- Kivy - OpenGL
- Kivy - 文字
- Kivy - 文字標記
- Kivy - 設定
- Kivy 佈局
- Kivy - 佈局
- Kivy - 浮動佈局
- Kivy - 網格佈局
- Kivy - 箱式佈局
- Kivy - 堆疊佈局
- Kivy - 錨點佈局
- Kivy - 相對佈局
- Kivy - 頁面佈局
- Kivy - 回收佈局
- Kivy - 佈局巢狀
- Kivy 高階概念
- Kivy - 配置物件
- Kivy - 圖集
- Kivy - 資料載入器
- Kivy - 快取管理器
- Kivy - 控制檯
- Kivy - 動畫
- Kivy - 多筆畫
- Kivy - 時鐘
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪貼簿
- Kivy - 工廠
- Kivy - 手勢
- Kivy - 語言
- Kivy - 圖形
- Kivy - 繪製
- Kivy - 打包
- Kivy - 花園
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用和專案
- Kivy - 繪圖應用
- Kivy - 計算器應用
- Kivy - 計時器應用
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 元件動畫
- Kivy - 其他
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
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 物件具有以下重要屬性/方法 -
| 序號 | 屬性/方法及描述 |
|---|---|
| 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 聲音的狀態,'stop' 或 'play' 之一。 |
讓我們使用 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()
輸出
下圖顯示狀態標題設定為“正在播放”並且暫停按鈕已啟用。暫停按鈕在暫停和恢復狀態之間切換。