david-pesticcio

MusicPlayer

Mar 13th, 2024
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from kivy.core.audio import SoundLoader
  2. from kivy.utils import platform
  3. from kivy.logger import Logger
  4. import time
  5.  
  6. class MusicPlayerAndroid(object):
  7.     def __init__(self):
  8.  
  9.         from jnius import autoclass
  10.         MediaPlayer = autoclass('android.media.MediaPlayer')
  11.         self.mplayer = MediaPlayer()
  12.  
  13.         self.secs = 0
  14.         self.actualsong = ''
  15.         self.length = 0
  16.         self.isplaying = False
  17.  
  18.     def __del__(self):
  19.         self.stop()
  20.         self.mplayer.release()
  21.         Logger.info('mplayer: deleted')
  22.  
  23.     def load(self, filename):
  24.         try:
  25.             self.actualsong = filename
  26.             self.secs = 0
  27.             self.mplayer.setDataSource(filename)        
  28.             self.mplayer.prepare()
  29.             self.length = self.mplayer.getDuration() / 1000
  30.             Logger.info('mplayer load: %s' %filename)
  31.             Logger.info ('type: %s' %type(filename) )
  32.             return True
  33.         except:
  34.             Logger.info('error in title: %s' % filename)
  35.             return False
  36.  
  37.     def unload(self):
  38.             self.mplayer.reset()
  39.  
  40.     def play(self):
  41.         self.mplayer.start()
  42.         self.isplaying = True
  43.         Logger.info('mplayer: play')
  44.  
  45.     def stop(self):
  46.         self.mplayer.stop()
  47.         self.secs=0
  48.         self.isplaying = False
  49.         Logger.info('mplayer: stop')
  50.  
  51.     def seek(self,timepos_secs):
  52.         self.mplayer.seekTo(timepos_secs * 1000)
  53.         Logger.info ('mplayer: seek %s' %int(timepos_secs))
  54.  
  55.  
  56. class MusicPlayerWindows(object):
  57.     def __init__(self):
  58.         self.secs = 0
  59.         self.actualsong = ''
  60.         self.length = 0
  61.         self.isplaying = False
  62.         self.sound = None
  63.  
  64.     def __del__(self):
  65.         if self.sound:
  66.             self.sound.unload()
  67.             Logger.info('mplayer: deleted')
  68.  
  69.     def load(self, filename):
  70.         self.__init__()
  71.         if type(filename) == unicode: filename = filename.encode('utf-8') #unicode does not work !
  72.         self.sound = SoundLoader.load(filename)    
  73.         if self.sound:
  74.             if self.sound.length != -1 :
  75.                 self.length = self.sound.length
  76.                 self.actualsong = filename
  77.                 Logger.info('mplayer: load %s' %filename)
  78.                 return True
  79.             else:
  80.                 Logger.info ('mplayer: songlength = -1 ...')
  81.         return False
  82.  
  83.     def unload(self):
  84.         if self.sound != None:
  85.             self.sound.unload()
  86.             self.__init__ # reset vars
  87.  
  88.     def play(self):
  89.         if self.sound:
  90.             self.sound.play()
  91.             self.isplaying = True
  92.             Logger.info('mplayer: play')
  93.  
  94.     def stop(self):
  95.         self.isplaying = False
  96.         self.secs=0
  97.         if self.sound:
  98.             self.sound.stop()
  99.             Logger.info('mplayer: stop')
  100.  
  101.     def seek(self, timepos_secs):
  102.         self.sound.seek(timepos_secs)
  103.         Logger.info('mplayer: seek %s' %int(timepos_secs))
  104.  
  105. def main():
  106.     songs = [
  107.         'f:\\_mp3_\\_testdir_\\file of ☠☢☣.mp3', #insert songs here
  108.         'f:\\_mp3_\\Patricks Mp3s\\electro\\Echotek - Freak Africa.mp3',
  109.         'f:\\_mp3_diverse_\\Testsuite\\flac\\01 - Jam & Spoon - Stella (Jam & Spoon Mix).flac',
  110.         'f:\\_mp3_\\P1\\1Start\\Hot Chip - boy from school.mp4'
  111.         ]
  112.  
  113.     Logger.info ('platform: %s' %platform)
  114.  
  115.     if platform == 'win':
  116.         mplayer = MusicPlayerWindows()
  117.     elif platform == 'android':
  118.         mplayer = MusicPlayerAndroid()
  119.     else:
  120.         exit()
  121.  
  122.     for s in songs:
  123.         if mplayer.load(s): # checking load, seek
  124.             mplayer.play()
  125.             time.sleep(2)
  126.             mplayer.seek(90)
  127.             time.sleep(2)
  128.             mplayer.stop()
  129.             mplayer.unload()
  130.  
  131.         else:
  132.             Logger.info ('cant load song: %s' %s)
  133.  
  134.  
  135. if __name__ == '__main__':
  136.     main()
Add Comment
Please, Sign In to add comment