Beispiel #1
0
class RedditReader:
    def __init__(self):
        self.looper = Looper(wait=0.01)
        self.client = HttpsSocketAsync(self.looper, 'www.reddit.com')

    def request_top_post(self, subreddit, n=4):
        url = '/r/{0}/top.json?sort=top&t=day&limit={1}'.format(subreddit, n)
        self.client.request("GET", url, ExtensibleCallback(self.on_response))

    def on_response(self, response):
        if response.status == 200:
            json_body = json.loads(response.read())
            self.on_json(json_body)
        else:
            self.on_http_error(None, response)

    def on_json(self, response):
        for post in response['data']['children']:
            data = post["data"]
            print u"/r/{subreddit:<12} {ups:>4}↕{downs:<3} {title} ({url})".format(
                **data)

    def run(self):
        self.looper.enqueue_now(self.request_top_post, "python")
        self.looper.enqueue_now(self.request_top_post, "programming")
        self.looper.enqueue_now(self.request_top_post, "java")
        self.looper.enqueue_now(self.request_top_post, "android")
        self.looper.enqueue_now(self.request_top_post, "vive")
        self.looper.loop()

    def on_http_error(self, url, response):
        print "Error {0} at {1}".format(response.status, url)
        for header in response.getheaders():
            print header
        self.looper.stop()
Beispiel #2
0
def main():
    looper = Looper(16, 4)
    display = CursesDisplay(looper)
    arduino_input = ArduinoInput(lambda x: callback(x, looper, display))

    arduino_input.choose_port()
    arduino_input.start()
    looper.print_record_info()

    #
    try:
        display.run()
    except KeyboardInterrupt:
        pass

    arduino_input.stop()
    looper.stop()
Beispiel #3
0
	def stop(self):
		Looper.stop(self)
		self.mout.close()
		pygame.midi.quit()
class LooperTest(unittest.TestCase):
    def setUp(self):
        self.looper = Looper(wait=0)

    def dummy(self):
        pass

    def dummy2(self):
        pass

    def stopper(self):
        self.looper.stop()

    def test_empty_loop_exits(self):
        self.looper.loop()

    def test_stop_stops(self):
        self.looper.enqueue_now(self.stopper)
        self.looper.enqueue_now(self.dummy)
        self.looper.enqueue_now(self.dummy)

        self.looper.loop()

        self.assertEquals(2, self.looper.size())

    def test_enqueue_now(self):
        # race condition - will fail sometimes
        time = Time.now()
        self.looper.enqueue_now(self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(time, self.looper._queue[0].time)

    def test_enqueue_next(self):
        self.looper.enqueue_now(self.dummy)
        self.looper.enqueue_next(self.dummy2)
        self.assertEquals(2, self.looper.size())
        self.assertEquals(0, self.looper._queue[0].time)
        self.assertEquals(self.dummy2, self.looper._queue[0].func)

    def test_enqueue_with_millis(self):
        # race condition - will fail sometimes
        time = Time.millis_from_now(1000)
        self.looper.enqueue(1000, self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(time, self.looper._queue[0].time)

    def test_enqueue_with_datetime(self):
        d = datetime(2016, 1, 1, 12, 12, 12)
        self.looper.enqueue(d, self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(Time.on_date(d), self.looper._queue[0].time)

    def test_enqueue_with_date(self):
        d = date(2016, 1, 1)
        self.looper.enqueue(d, self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(Time.on_date(d), self.looper._queue[0].time)

    def test_enqueue_with_timedelta(self):
        # race condition - will fail sometimes
        d = timedelta(milliseconds=340)
        self.looper.enqueue(d, self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(Time.after_timedelta(d), self.looper._queue[0].time)

    def test_enqueue_at(self):
        # race condition - will fail sometimes
        time = Time.millis_from_now(1000)
        self.looper.enqueue_at(time, self.dummy)
        self.assertEquals(1, self.looper.size())
        self.assertEquals(time, self.looper._queue[0].time)

    def test_size(self):
        self.assertEquals(0, self.looper.size())

        self.looper.enqueue_now(self.stopper)
        self.assertEquals(1, self.looper.size())

        self.looper.enqueue_now(self.stopper)
        self.assertEquals(2, self.looper.size())

        self.looper.loop()

        self.assertEquals(1, self.looper.size())
Beispiel #5
0
class App:
    def __init__(self):
        self.ipc = IpcServer(
        )  # Start IPC to webserver (server-side): mandatory but there might not be a client connecting to it
        self.osc = OscServer(
        )  # Start app OSC server: mandatory but there might not be a client connecting to it
        self.looper = Looper(
        )  # Start sooperlooper: optional (disable with --no-looper)
        self.recorder = Recorder(
        )  # Init audio recorder: always on but no background activity
        self.drum_sequencer = DrumSequencer(
        )  # Init audio/drums player: always on but no background activity

        # Only start MIDI receiver thread if USBMIDI device (foot pedal) is connected
        self.midi_receiver = MidiReceiver(
            'USBMIDI', self) if utility.check_midi(['USBMIDI']) else None

        self._handlers = {}

    def quit(self):
        logging.info('Exiting')

        if self.looper and self.looper.is_running:
            self.looper.stop()

        self.ipc.stop()

        sys.exit(0)

    def send_event(self, event_target, event_payload):
        logging.debug('Event: {} {}'.format(event_target, event_payload))
        if event_target == MidiMapping.EVENT_TARGET_PRESET:
            self._handlers['presets'].trigger_preset(event_payload)
        elif event_target == MidiMapping.EVENT_TARGET_MIDI_LOOP:
            self._handlers['midi'].toggle(event_payload)
        elif event_target == MidiMapping.EVENT_TARGET_LOOPER:
            self._handlers['looper'].send_osc(event_payload)
        elif event_target == MidiMapping.EVENT_TARGET_DRUMS:
            self._handlers['drums'].play_song()

    def _parse_arguments(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-v',
                            help='verbose',
                            action='store_true',
                            default=False)
        parser.add_argument('--no-looper',
                            help='don\'t start looper',
                            action='store_true',
                            default=False)
        return parser.parse_args()

    def main(self):
        # Parse program arguments
        self.args = self._parse_arguments()
        logging.debug(self.args)

        # System checks
        assert utility.check_sound_card('card 0:'), 'No ALSA device found'
        # assert check_sound_card('card 1:'), 'USB DAC not found'
        # assert utility.check_processes(['jackd']), 'jackd must be running'
        assert utility.check_midi(['System',
                                   'Midi Through']), 'No MIDI devices found'
        # assert check_midi(['USBMIDI']), 'USB foot controller not found'

        Menu.ui = TkUi(fullscreen=True, fontsize=56)

        self.ipc.start()

        if not self.args.no_looper:
            self.looper.start()

        main_menu = Menu('main')
        submenus = {
            name: Menu(name, main_menu)
            for name in [
                'midi', 'presets', 'looper', 'record', 'drums', 'utilities',
                'system'
            ]
        }

        # Create main menu
        BaseMenuHandler.app = self
        self._handlers['midi'] = MidiExpanderHandler(submenus['midi'])
        self._handlers['presets'] = PresetsHandler(submenus['presets'])
        self._handlers['looper'] = LooperHandler(submenus['looper'])
        self._handlers['record'] = RecordHandler(submenus['record'])
        self._handlers['drums'] = DrumsHandler(submenus['drums'],
                                               self.drum_sequencer)
        self._handlers['utilities'] = UtilitiesHandler(submenus['utilities'])
        self._handlers['system'] = SystemHandler(submenus['system'])

        self._handlers['record'].recorder = self.recorder

        main_menu.make_ui()
        Menu.ui.mainloop()