omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    How to add image(s) from iPad camera roll to Pythonista image library

    Pythonista
    4
    21
    9280
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • cvp
      cvp @Karina last edited by cvp

      @Karina Sorry, do you want to import sound files into Pythonista? And, if yes, where are they?

      1 Reply Last reply Reply Quote 0
      • Karina
        Karina last edited by Karina

        @cvp I want to get more musical sounds like those that are already embedded, but don't know from where to take it and where to save. It's for a program in which I have musical instruments on the screen, and when tap, they play. I also want to do multi touch
        Did you ever used your sounds in pythonista?

        cvp 2 Replies Last reply Reply Quote 0
        • cvp
          cvp @Karina last edited by

          @Karina you can search mp3 in Google, import them in Pythonista and play them.
          Or even play them as url. Try to search mp3 in the Pythonista forum

          1 Reply Last reply Reply Quote 0
          • cvp
            cvp @Karina last edited by

            @Karina just for the fun

            import tempfile
            import sound
            import requests
            import ui
            
            def play(url):
            	with tempfile.NamedTemporaryFile(suffix='.caf') as fp:
            		r = requests.get(url)
            		r.raise_for_status()
            		fp.write(r.content)
            		sound.play_effect(fp.name)
            
            v = ui.View()
            v.background_color = 'white'
            
            b_piano = ui.ButtonItem()
            b_piano.title = '🎹'
            def b_piano_action(sender):
            	play('https://ccrma.stanford.edu/~jos/mp3/pno-cs.mp3')
            b_piano.action = b_piano_action
            
            b_violon = ui.ButtonItem()
            b_violon.title = '🎻'
            def b_violon_action(sender):
            	play('https://ccrma.stanford.edu/~jos/mp3/violin.mp3')
            b_violon.action = b_violon_action
            
            v.right_button_items = (b_piano,b_violon)
            v.present('fullscreen') 
            
            1 Reply Last reply Reply Quote 0
            • Karina
              Karina last edited by

              I didn't understood how it should work)
              This is what I have now

              import scene
              import sound
              import random
              import objc_util
              
              sw = scene.get_screen_size()[0]
              sh = scene.get_screen_size()[1]
              
              piano_sounds = ['piano:A3', 'piano:C3', 'piano:C4#', 'piano:D4', 'piano:E4', 'piano:F4', 'piano:G3#']
              guitar_sounds = ['8ve:8ve-beep-warmguitar']
              drum_sounds = ['drums:Drums_01', 'drums:Drums_04', 'drums:Drums_07', 'drums:Drums_10', 'drums:Drums_13', 'drums:Drums_16']
              
              class ButtonNode(scene.ShapeNode):
                  def __init__(self,
                                  action,
                                  icon,
                                  text_color,
                                  sounds,
                                  corner_radius=8,
                                  border_size=20,
                                  text='',
                                  name=f'ButtonNode',
                                  bg_color='white',
                                  anchor_point=(0.5, 0.5),
                                  borderColor=None,
                                  parent=None,
                                  position=(0, 0),
                                  size=(120, 45),
                                  enabled=True,
                                  animated_icon=False,
                                  icon_animation=None,
                                  *args, **kwargs):
              
                      # these mainly for call to super()
                      self.x, self.y = position
                      self.w, self.h = size
                      super().__init__(
                      	    path=scene.ui.Path.rounded_rect(self.x, self.y, self.w, self.h, corner_radius),
                              fill_color=bg_color,
                              stroke_color=borderColor,
                              shadow=None,
                              parent=parent,
                              *args, **kwargs)
                      
                      # Normal Properties for Instance()
                      self.sounds=sounds
                      self.enabled=enabled
                      self.button_action=action
                      self.name=name
                      self.position=position
                      self.size=size
                      self.anchor_point=anchor_point
                      
                       # for border
                      self.border_size=border_size
                      self.borderColor=bg_color
                      self.corner_radius=corner_radius
                      
                      # for icon
                      self.icon_animation=icon_animation
                      self.animated_icon=animated_icon
                      self.icon=self._init_textures(icon)
                      
                      # for Label
                      self.text=text 
                      self.text_color=text_color
                      
                      # Container to hold each component. 
                      # is just a dict version of self.children but specific.
                      self.components=dict({
                              'icon':None,
                              'label':None})
                      
                      self._setup(self.icon, self.components)
              
                  # Type Check to make sure img is a string or ui.Image
                  def _init_textures(self, img):
                      if type(img) == str or type(img) == scene.ui.Image:
                          return scene.Texture(img)
                      else:
                          return None
              
                  # setup our Components
                  def _setup(self, i, c):
                      if i != None:
                          # button image
                          c['icon']=scene.SpriteNode(
                                  texture=i,
                                  size=scene.Size(self.size[1]/100*80, self.size[1]/100*80), 
                                  position=scene.Point(0, 0),                                
                                  parent=self,
                                  anchor_point=(0.5, 0.5),
                                  z_position=9)
                                  
                      if self.text:
                          # button text..
                          c['label']=scene.LabelNode(
                                  text=self.text,
                                  position=scene.Point(0 , 0),
                                  anchor_point=(0.5, 0.5),
                                  color=self.text_color,
                                  parent=self,
                                  z_position=10)
                  
                  # called when you tap the button
                  def Button_Tapped(self):
                  	if self.components['icon']:
                  		if self.animated_icon and self.icon_animation:
                  			self.components['icon'].run_action(self.icon_animation())
                  	if self.enabled:
                  		self.button_action(self)
              
              # custom action
              def my_button_action(sender):
                  random_tone=random.choice(piano_sounds)
                  play = random.choice(sender.sounds)
                  if sender.sounds == piano_sounds:
                  	sound.set_volume(0.3)
                  elif sender.sounds == guitar_sounds:
                  	sound.set_volume(1)
                  sound.play_effect(play)
                  sound.set_volume(0.5)
                  return
              
              
              def Animation_Shake(duration=1.5):
                  action_list=[]
                  action_list.append(
                          scene.Action.rotate_to(0.25, duration/10/2))
                  action_list.append(
                          scene.Action.sequence(
                              scene.Action.rotate_to(-0.5, duration/50),
                              scene.Action.rotate_to(0.5, duration/50)))
                  action_list.append(
                      scene.Action.group(
                          scene.Action.scale_to(1.0, duration/10/2),
                          scene.Action.rotate_to(0.0, duration/10/2)))
                  return scene.Action.sequence(action_list)
              
              
              def Animation_Pulse(duration=1.5):
                  action_list=[]
                  action_list.append(
                  	scene.Action.sequence(
                          scene.Action.scale_to(1.2, duration/10/2),
                          scene.Action.scale_to(0.5, duration/10/2)))
                  action_list.append(
                              scene.Action.scale_to(1.2, duration/50))
                  action_list.append(
                      scene.Action.group(
                          scene.Action.scale_to(1.0, duration/10/2)))
                  
                  return scene.Action.sequence(action_list)
              
              def Animation_Jump(duration=1.5):
                  action_list=[]
                  action_list.append(
                          scene.Action.sequence(
                              scene.Action.move_by(0, 20, duration/20),
                              scene.Action.move_to(0, 0, duration/20)))
                          
                  return scene.Action.sequence(action_list)
              
              class main(scene.Scene):
                  def setup(self):
                      self.buttons=list([])
                      self.background_color='white'
                      
                      self.guitar=ButtonNode(size=scene.Size(160, 112), icon='emj:Guitar',
                          text=None, text_color=self.background_color, parent=self, action=my_button_action, sounds=guitar_sounds,
                          position=scene.Point(sw/6*1.5, sh/3), animated_icon=True,
                          icon_animation=Animation_Shake)
                      self.buttons.append(self.guitar)
                      
                      self.drum=ButtonNode(size=scene.Size(160, 112), icon='IMG_0098.JPG', 
                          sounds=drum_sounds, text=None, text_color=self.background_color, parent=self, 
                          action=my_button_action, position=scene.Point(sw/6*3, sh/2), 
                          animated_icon=True, icon_animation=Animation_Pulse)
                      self.buttons.append(self.drum)
                      
                      self.piano=ButtonNode(size=scene.Size(100, 70), icon='emj:Musical_Keyboard',
                          text=None, text_color=self.background_color, parent=self, action=my_button_action, sounds=piano_sounds,
                          position=scene.Point(sw/6*5, sh/2), animated_icon=True,
                          icon_animation=Animation_Jump)
                      self.buttons.append(self.piano)
                      
                      self.quiter=ButtonNode(size=scene.Size(32, 32),
                          text='X', text_color='black', parent=self, action=self.quit, sounds=None,
                          position=scene.Point(sw-50, sh-50), borderColor='black', icon=None)
                      self.buttons.append(self.quiter)
                  
                  def quit(self, sender):
                      self.view.close()
                  
                  def touch_began(self, touch):
                      for btn in self.buttons:
                          if self.point_from_scene(touch.location) in btn.frame:
                              btn.Button_Tapped()
              
              scene.run(main())
              
              cvp 2 Replies Last reply Reply Quote 0
              • cvp
                cvp @Karina last edited by

                @Karina Sorry, I didn't understand your request. What I show is how to play an entire mp3, not a sound like standard ones. Sincerely sorry, forget my post.

                1 Reply Last reply Reply Quote 0
                • cvp
                  cvp @Karina last edited by

                  @Karina you can download a mp3 file and store it in your folders, like an image.
                  And then, play it like a standard Pythonista file.

                  1 Reply Last reply Reply Quote 0
                  • cvp
                    cvp @Karina last edited by cvp

                    @Karina run this little script once to download a mp3 as a Pythonista file

                    import requests
                    url = 'https://ccrma.stanford.edu/~jos/mp3/pno-cs.mp3'
                    with open('mypiano.mp3',mode='wb') as fil:
                    	r = requests.get(url)
                    	fil.write(r.content) 
                    

                    then run your script with this little modif

                    piano_sounds = ['mypiano.mp3']#piano:A3', 'piano:C3', 'piano:C4#', 'piano:D4', 'piano:E4', 'piano:F4', 'piano:G3#'] 
                    
                    1 Reply Last reply Reply Quote 0
                    • Karina
                      Karina last edited by

                      @cvp thanks, I'll try

                      1 Reply Last reply Reply Quote 0
                      • PinhoBD
                        PinhoBD @themusicman last edited by

                        @cvp Hi, I tried your approach: +, import, files, Browse, and pick an image file, say, abc.jpg. It imported the file into the current directory, say, /Examples/abc.jpg and the image of abc. But when I checked the + at the lower right corner of the script editor, then clicked open files. There is neither image of abc nor abc.jpg file. I would like to import an image file into + / images/files, so that I can easily enter the image using ui.Imag e.named().I did try many times and some how I did succeed once,but I couldn’t repeat. Please help. Thanks a lot.

                        cvp 1 Reply Last reply Reply Quote 0
                        • cvp
                          cvp @PinhoBD last edited by

                          @PinhoBD strange. In + / images / files, I see my thousands images, after some time, I agree

                          1 Reply Last reply Reply Quote 0
                          • PinhoBD
                            PinhoBD last edited by

                            Thank you. I finally saw the file I imported a few hours before. Now I believe I did the right things. If I can repeat it the second time, I should be able to repeat it again and again. I appreciate your help!!

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post
                            Powered by NodeBB Forums | Contributors