Kivyで、シンプルなミュージックプレイヤー①
http://blog.livedoor.jp/chun_chun_02/archives/1030938051.html
https://github.com/JasonHinds13/KVMusicPlayer/blob/master/main.py
を参考につくった、非常にシンプルなミュージックプレイヤーです。
ボリュームの調整やシーク機能等はなく、機能としてはシンプルです。
起動すると、まずこの画面。

Choose Fileで、mp3を選択します。

選択(ダブルクリック)すると、再生が始まります。

一時停止ボタン(||)を押すと、止まります。
>ボタンに変わるので、押したら一時停止の場所からスタートです。

kivy1.9.1
python3.4
です。
main.py
- import os
- from kivy.app import App
- from kivy.core.audio import SoundLoader
- from kivy.properties import ObjectProperty
- from kivy.uix.boxlayout import BoxLayout
- from kivy.uix.popup import Popup
- class PopupChooseFile(BoxLayout):
- # 現在のカレントディレクトリ。FileChooserIconViewのpathに渡す
- current_dir = os.path.dirname(os.path.abspath(__file__))
- # MusicPlayerクラス内で参照するための設定
- select = ObjectProperty(None)
- cancel = ObjectProperty(None)
- class MusicPlayer(BoxLayout):
- audio_button = ObjectProperty(None) # >や||のボタンへのアクセス
- status = ObjectProperty(None) # 画面中央のお知らせとなるテキスト部分
- sound = None
- def choose(self):
- """Choose File押下時に呼び出され、ポップアップでファイル選択させる"""
- content = PopupChooseFile(select=self.select, cancel=self.cancel)
- self.popup = Popup(title="Select MP3", content=content)
- self.popup.open()
- def play_or_stop(self):
- """||や>押下時。再生中なら一時停止、停止中なら再生する"""
- # ファイルが選択されていればTrue
- if self.sound:
- # 再生中
- if self.sound.state == "play":
- self.sound_position = self.sound.get_pos() # 再生位置の保存
- self.sound.stop()
- self.audio_button.text = ">"
- self.status.text = 'Stop {}'.format(self.sound_name)
- # 一時停止中
- elif self.sound.state == "stop":
- self.sound.play()
- self.sound.seek(self.sound_position) # 再生位置の復元
- self.audio_button.text = "||"
- self.status.text = 'Playing {}'.format(self.sound_name)
- # ファイルを選択してないなら、選択しろと画面中央に表示
- else:
- self.status.text = 'Please Select MP3'
- def cancel(self):
- """ファイル選択画面でキャンセル"""
- self.popup.dismiss()
- def select(self, path):
- """ファイル選択画面で、ファイル選択時"""
- # 既に再生している物があればストップ
- if self.sound:
- self.sound.stop()
- self.sound = SoundLoader.load(path)
- self.sound_name = os.path.basename(path)
- # 再生を試みて、できない(mp3じゃない)ならexcept。MP3にしろとメッセージ
- try:
- self.sound.play()
- except AttributeError:
- self.status.text = 'Should MP3'
- else:
- self.audio_button.text = "||"
- self.status.text = 'Playing {}'.format(self.sound_name)
- finally:
- self.popup.dismiss()
- class Music(App):
- icon = "ico.png"
- def build(self):
- return MusicPlayer()
- if __name__ == "__main__":
- Music().run()
music.kv
- <MusicPlayer>:
- status: status_text
- audio_button: audio_button
- orientation: 'vertical'
- padding: 20
- Label:
- size_hint: 1, .9
- id: status_text
- text: ""
- center: root.center
- color: 1, 0, 0, 1
- BoxLayout:
- size_hint: 1, .1
- Button:
- id: audio_button
- size_hint: .5, 1
- text: '||'
- background_color: 0, .5, 1, 1
- on_release: root.play_or_stop()
- Button:
- size_hint: .5, 1
- text: 'Choose File'
- background_color: 0, .5, 1, 1
- on_release: root.choose()
- <PopupChooseFile>:
- canvas:
- Color:
- rgba: 0, 0, .4, 1
- Rectangle:
- pos: self.pos
- size: self.size
- orientation: "vertical"
- FileChooserIconView:
- size_hint: 1, .9
- path: root.current_dir
- on_submit: root.select(self.selection[0])
- BoxLayout:
- size_hint: 1, .1
- Button:
- text: "Cancel"
- background_color: 0,.5,1,1
- on_release: root.cancel()
Audio
https://kivy.org/docs/api-kivy.core.audio.html
FileChooser
https://kivy.org/docs/api-kivy.uix.filechooser.html