Skip to content

Instantly share code, notes, and snippets.

@mbrockman1
Created November 21, 2021 03:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mbrockman1/3b91e6b56f4f447e17b5bc12ca181981 to your computer and use it in GitHub Desktop.
Save mbrockman1/3b91e6b56f4f447e17b5bc12ca181981 to your computer and use it in GitHub Desktop.
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