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 中構建一個簡單的音訊播放器。應用程式視窗包含一個標籤,顯示播放器的當前狀態,即正在播放還是已停止,以及兩個按鈕來控制播放。左側的按鈕標題為“播放”,以開始。

Kivy Audio

單擊時,它從 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()

輸出

下圖顯示狀態標題設定為“正在播放”並且暫停按鈕已啟用。暫停按鈕在暫停和恢復狀態之間切換。

Kivy Audio Play
廣告

© . All rights reserved.