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.
    • Karina
      Karina last edited by

      @cvp and how to add sounds that I need? For example, short guitar chords?

      cvp 2 Replies Last reply Reply Quote 0
      • 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