Created
November 21, 2021 03:59
-
-
Save mbrockman1/3b91e6b56f4f447e17b5bc12ca181981 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from kivy.core.audio import Sound | |
from pyobjus import autoclass | |
from pyobjus.dylib_manager import load_framework, INCLUDE | |
load_framework(INCLUDE.AVFoundation) | |
AVAudioPlayer = autoclass("AVAudioPlayer") | |
NSURL = autoclass("NSURL") | |
NSString = autoclass("NSString") | |
class iOSSoundAvplayer(Sound): | |
@staticmethod | |
def extensions(): | |
# taken from https://goo.gl/015kvU | |
return ("aac", "adts", "aif", "aiff", "aifc", "caf", "mp3", "mp4", | |
"m4a", "snd", "au", "sd2", "wav") | |
def __init__(self, source, **kwargs): | |
self.source = source | |
self._avplayer = None | |
super(iOSSoundAvplayer, self).__init__(**kwargs) | |
def load(self): | |
self.unload() | |
fn = NSString.alloc().initWithUTF8String_(self.source) | |
url = NSURL.alloc().initFileURLWithPath_(fn) | |
self._avplayer = AVAudioPlayer.alloc().initWithContentsOfURL_error_( | |
url, None) | |
def status(self): | |
return(self._avplayer.playing) | |
def playback_rate(self, playback_rate): | |
if self._avplayer: | |
self._avplayer.enableRate = True | |
self._avplayer.rate = float(playback_rate) | |
print(self._avplayer.rate) | |
def unload(self): | |
self.stop() | |
self._avplayer = None | |
def play(self): | |
if not self._avplayer: | |
return | |
self._avplayer.play() | |
super(iOSSoundAvplayer, self).play() | |
def stop(self): | |
if not self._avplayer: | |
return | |
self._avplayer.stop() | |
super(iOSSoundAvplayer, self).stop() | |
def seek(self, position): | |
if not self._avplayer: | |
return | |
self._avplayer.playAtTime_(float(position)) | |
def get_pos(self): | |
if self._avplayer: | |
return self._avplayer.currentTime | |
return super(iOSSoundAvplayer, self).get_pos() | |
def on_volume(self, instance, volume): | |
if self._avplayer: | |
self._avplayer.volume = float(volume) | |
def _get_length(self): | |
if self._avplayer: | |
return self._avplayer.duration | |
return super(iOSSoundAvplayer, self)._get_length() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment