''' 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()