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.


    Personal trainer

    Pythonista
    1
    1
    1256
    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.
    • mikael
      mikael last edited by

      My daughter needs to do some circuit training this summer, to keep up the muscle tone while the regular practices are on hold.

      Pythonista provided an excellent tool to create a personal trainer, to guide her through the circuit with voice prompts. See below for the code that uses the scripter to make writing timed actions easier, and to support pausing.

      You can edit the amount and order of moves in the list at the beginning of the script. If you try it out, be sure that your Siri language matches that of your voice prompts, otherwise the results may be comical.

      Some easy refinements that come to mind:

      • Randomize the order of the moves
      • Count repeats instead of tracking time
      • Show an image of each move
      • Play music - although nothing prevents you from playing music in the background, without specific support from this code

      Code, hosted on github as well:

      #coding: utf-8
      from ui import *
      from sound import *
      from speech import *
      from scripter import *
      
      moves = [
        'Skater',
        'Pushups',
        'Slalom jumps',
        'Dip pushups',
        'Back, all up',
        'Jumping jacks'
      ]
      
      @script
      def exercise(v):
        for i in range(2):
          for move in moves:
            v.text = move
            say('Next up: ' + move +', prepare')
            breather(v)
            yield
            say('Now!')
            thirty_seconds(v)
            yield 2.0
          if i == 0:
            say('Two minute break')
            v.text = 'BREATHER'
            yield 90
            thirty_seconds(v)
            yield
        yield 2.0
        say_blocking(v, 'Ready')
        
      @script
      def thirty_seconds(v):
        #blip()
        yield 10
        blip()
        yield 10
        blip()
        yield 5
        for _ in range(5):
          blip()
          yield 1
        bleep()
        
      @script
      def breather(v):
        yield 10
        for _ in range(5):
          blip()
          yield 1
        
      def blip():
        play_effect('piano:D3')
        
      def bleep():
        play_effect('piano:D4')
        
      @script
      def say_blocking(v, text):
        say(text)
        while is_speaking(): yield
      
      if __name__ == '__main__':
        i = Button()
        #i.image = Image('iob:ios7_pause_256')
        i.tint_color = 'grey'
        i.background_color = 'white'
        v = Label()
        v.alignment = ALIGN_CENTER
        i.add_subview(v)
        v.frame = i.bounds
        v.flex = 'WH'
        v.touch_enabled = False
        i.present('sheet')
        
        v.height = i.height/2
        v.text = 'Tap to start'
        
        exercise(v)
        ctrl = find_scripter_instance(v)
        ctrl.pause_play_all()
        paused = True
        
        def play_pause(sender):
          global paused, ctrl
          ctrl.pause_play_all()
          if paused:
            i.image = Image('iob:ios7_play_256')
            paused = False
          else:
            i.image = Image('iob:ios7_pause_256')
            paused = True
          
        i.action = play_pause
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Powered by NodeBB Forums | Contributors