82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
'''
|
|
Audio example
|
|
=============
|
|
|
|
This example plays sounds of different formats. You should see a grid of
|
|
buttons labelled with filenames. Clicking on the buttons will play, or
|
|
restart, each sound. Not all sound formats will play on all platforms.
|
|
|
|
All the sounds are from the http://woolyss.com/chipmusic-samples.php
|
|
"THE FREESOUND PROJECT", Under Creative Commons Sampling Plus 1.0 License.
|
|
|
|
'''
|
|
|
|
import kivy
|
|
kivy.require('1.0.8')
|
|
|
|
from kivy.app import App
|
|
from kivy.uix.button import Button
|
|
from kivy.uix.boxlayout import BoxLayout
|
|
from kivy.core.audio import SoundLoader
|
|
from kivy.properties import StringProperty, ObjectProperty, NumericProperty
|
|
from glob import glob
|
|
from os.path import dirname, join, basename
|
|
|
|
|
|
class AudioButton(Button):
|
|
|
|
filename = StringProperty(None)
|
|
sound = ObjectProperty(None, allownone=True)
|
|
volume = NumericProperty(1.0)
|
|
|
|
def on_press(self):
|
|
if self.sound is None:
|
|
self.sound = SoundLoader.load(self.filename)
|
|
# stop the sound if it's currently playing
|
|
if self.sound.state != 'stop':
|
|
self.sound.stop()
|
|
self.sound.volume = self.volume
|
|
self.sound.play()
|
|
|
|
def release_audio(self):
|
|
if self.sound:
|
|
self.sound.stop()
|
|
self.sound.unload()
|
|
self.sound = None
|
|
|
|
def set_volume(self, volume):
|
|
self.volume = volume
|
|
if self.sound:
|
|
self.sound.volume = volume
|
|
|
|
|
|
class AudioBackground(BoxLayout):
|
|
pass
|
|
|
|
|
|
class AudioApp(App):
|
|
|
|
def build(self):
|
|
|
|
root = AudioBackground(spacing=5)
|
|
for fn in glob(join(dirname(__file__), '*.wav')):
|
|
btn = AudioButton(
|
|
text=basename(fn[:-4]).replace('_', ' '), filename=fn,
|
|
size_hint=(None, None), halign='center',
|
|
size=(128, 128), text_size=(118, None))
|
|
root.ids.sl.add_widget(btn)
|
|
|
|
return root
|
|
|
|
def release_audio(self):
|
|
for audiobutton in self.root.ids.sl.children:
|
|
audiobutton.release_audio()
|
|
|
|
def set_volume(self, value):
|
|
for audiobutton in self.root.ids.sl.children:
|
|
audiobutton.set_volume(value)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
AudioApp().run()
|