From: Neil Smith Date: Wed, 24 Apr 2013 12:47:51 +0000 (+0100) Subject: Merge branch 'writeup' X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=aa13a2e7728201fb72f4684dd25c1cab07c91b3e;hp=427172a5ba795f1dad6694de23eaa38a560944c2;p=miniband.git Merge branch 'writeup' Conflicts: README.md --- diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore index d2d6f36..50bc331 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,9 @@ nosetests.xml .mr.developer.cfg .project .pydevproject + +# Backup files +*~ + +# Open Office lock files +.~lock*# diff --git a/STE-000.wav b/STE-000.wav new file mode 100644 index 0000000..6ed2985 Binary files /dev/null and b/STE-000.wav differ diff --git a/arduino/drums.ino b/arduino/drums.ino deleted file mode 100644 index 4b3c18c..0000000 --- a/arduino/drums.ino +++ /dev/null @@ -1,32 +0,0 @@ - -#define THRESHOLD 64 -#define PADNUM 4 -#define PINLIMIT 500 - -int val; -int pinDelay; -int pinDelays[4] = { 0, 0, 0, 0 }; - -void setup() { - Serial.begin(57600); -} - -void loop() { - for(int i = 0; i < PADNUM; i++) { - val = analogRead(i); - pinDelay = pinDelays[i]; - - if(val >= THRESHOLD && pinDelay < 1) { - Serial.print(i); - Serial.print(","); - Serial.print(val); - Serial.println(); - pinDelays[i] = PINLIMIT; - } - - if (pinDelay > 0) { - pinDelays[i] = pinDelay - 1; - } - } -} - diff --git a/arduino/guitar.ino b/arduino/guitar.ino deleted file mode 100644 index 874a163..0000000 --- a/arduino/guitar.ino +++ /dev/null @@ -1,32 +0,0 @@ - -#define THRESHOLD 16 -#define PADNUM 1 -#define PINLIMIT 5000 - -int val; -int pinDelay; -int pinDelays[4] = { 0, 0, 0, 0 }; - -void setup() { - Serial.begin(57600); -} - -void loop() { - for(int i = 0; i < PADNUM; i++) { - val = analogRead(i); - pinDelay = pinDelays[i]; - - if (val >= THRESHOLD && pinDelay < 1) { - Serial.print(i); - Serial.print(","); - Serial.print(val); - Serial.println(); - pinDelays[i] = PINLIMIT; - } - - if (pinDelay > 0) { - pinDelays[i] = pinDelay - 1; - } - } -} - diff --git a/arduino/maracas.ino b/arduino/maracas.ino deleted file mode 100644 index a50a53a..0000000 --- a/arduino/maracas.ino +++ /dev/null @@ -1,19 +0,0 @@ -int newState; -int states[] = {-1,-1}; -const int wait = 500; - -void setup() { - Serial.begin(9600); -} -void loop() { - for (int i = 0; i < 3; i+=2) { - newState = digitalRead(i); - if (newState != states[i]) { - Serial.print(i); - Serial.print(",1023"); - Serial.println(); - states[i] = newState; - delay(wait); - } - } -} \ No newline at end of file diff --git a/raspberrypi/music-maker-handler.py b/raspberrypi/music-maker-handler.py deleted file mode 100755 index eb83ce0..0000000 --- a/raspberrypi/music-maker-handler.py +++ /dev/null @@ -1,215 +0,0 @@ -# This code is copyright ...... under the GPL v2. -# This code is derived from scratch_gpio_handler by Simon Walters, which -# is derived from scratch_handler by Thomas Preston -# Version 0.1: It's kind of working. - -from array import * -import threading -import socket -import time -import sys -import struct -import serial -import io -import datetime as dt - -''' -from Tkinter import Tk -from tkSimpleDialog import askstring -root = Tk() -root.withdraw() -''' - -PORT = 42001 -DEFAULT_HOST = '127.0.0.1' -BUFFER_SIZE = 240 #used to be 100 -SOCKET_TIMEOUT = 1 -DRUM_DEVICE = '/dev/ttyACM0' -GUITAR_DEVICE = '/dev/ttyUSB1' -MARACAS_DEVICE = '/dev/ttyACM1' -ARDUINO_BAUD_RATE = 57600 - -DRUM_INSTRUMENT_NAMES = {0: 'cymbal', - 1: 'hihat', - 2: 'slowdrum', - 3: 'snare', - 4: 'tomtom'} - -DRUM_VALUE_NAMES = {0: 'drum-volume', - 1: 'drum-volume', - 2: 'drum-volume', - 3: 'drum-volume', - 4: 'drum-volume'} - -GUITAR_INSTRUMENT_NAMES = {0: 'guitar'} -GUITAR_VALUE_NAMES = {0: 'guitar_pitch'} - -GUITAR_INSTRUMENT_NAMES = {0: 'guitar'} -GUITAR_VALUE_NAMES = {0: 'guitar_pitch'} - -MARACAS_INSTRUMENT_NAMES = {0: 'maracas', 2: 'maracas'} -MARACAS_VALUE_NAMES = {0: 'maracas_vigour', 2: 'maracas_vigour'} - - -class MyError(Exception): - def __init__(self, value): - self.value = value - - def __str__(self): - return repr(self.value) - -class ScratchSender(threading.Thread): - def __init__(self, socket): - threading.Thread.__init__(self) - self.scratch_socket = socket - self._stop = threading.Event() - - - def stop(self): - self._stop.set() - - def stopped(self): - return self._stop.isSet() - - def run(self): - # Detect sensors here - - while not self.stopped(): - time.sleep(0.01) # be kind to cpu - not certain why :) - - def send_scratch_command(self, cmd): - n = len(cmd) - a = array('c') - a.append(chr((n >> 24) & 0xFF)) - a.append(chr((n >> 16) & 0xFF)) - a.append(chr((n >> 8) & 0xFF)) - a.append(chr(n & 0xFF)) - self.scratch_socket.send(a.tostring() + cmd) - - -class ArduinoListener(threading.Thread): - def __init__(self, device, speed, sender, instruments, values): - threading.Thread.__init__(self) - self.arduino_device = serial.Serial(device, speed) - self._stop = threading.Event() - self.scratch_sender = sender - self.instruments = instruments - self.values = values - - def stop(self): - self._stop.set() - - def stopped(self): - return self._stop.isSet() - - def run(self): - self.arduino_device.readline() # discard the first (partial) line - while not self.stopped(): - try: - pin_string, pin_value_string = self.arduino_device.readline().rstrip().split(',', 1) - pin = int(pin_string) - pin_value = int(pin_value_string) - print dt.datetime.now(), 'Pin: %d, Value: %d' % (pin, pin_value) - try: - print "sensor-update %s %d" % (self.values[pin], (pin_value * 100) / 1024) - self.scratch_sender.send_scratch_command("sensor-update %s %d" % (self.values[pin], (pin_value * 100) / 1024)) - except KeyError: - # Do nothing - pass - try: - print "broadcast %s" % self.instruments[pin] - self.scratch_sender.send_scratch_command('broadcast %s' % self.instruments[pin]) - except KeyError: - # Do nothing - pass - - except serial.SerialException: - print 'Serial exception' - - - -def create_socket(host, port): - while True: - try: - print 'Trying' - scratch_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - scratch_sock.connect((host, port)) - break - except socket.error: - print "There was an error connecting to Scratch!" - print "I couldn't find a Mesh session at host: %s, port: %s" % (host, port) - time.sleep(3) - #sys.exit(1) - - return scratch_sock - -def cleanup_threads(threads): - for thread in threads: - thread.stop() - - for thread in threads: - thread.join() - -if __name__ == '__main__': - if len(sys.argv) > 1: - host = sys.argv[1] - else: - host = DEFAULT_HOST - - -cycle_trace = 'start' -while True: - if (cycle_trace == 'disconnected'): - print "Scratch disconnected" - cleanup_threads((listener, sender)) - time.sleep(1) - cycle_trace = 'start' - - if (cycle_trace == 'start'): - # open the socket - print 'Starting to connect...' , - the_socket = create_socket(host, PORT) - print 'Connected!' - the_socket.settimeout(SOCKET_TIMEOUT) -## data = the_socket.recv(BUFFER_SIZE) -## print "Discard 1st data buffer" , data[4:].lower() - sender = ScratchSender(the_socket) - drum_listener = ArduinoListener(DRUM_DEVICE, ARDUINO_BAUD_RATE, sender, DRUM_INSTRUMENT_NAMES, DRUM_VALUE_NAMES) - guitar_listener = ArduinoListener(GUITAR_DEVICE, ARDUINO_BAUD_RATE, sender, GUITAR_INSTRUMENT_NAMES, GUITAR_VALUE_NAMES) - maracas_listener = ArduinoListener(MARACAS_DEVICE, ARDUINO_BAUD_RATE, sender, MARACAS_INSTRUMENT_NAMES, MARACAS_VALUE_NAMES) - cycle_trace = 'running' - print "Running...." - sender.start() - drum_listener.start() - guitar_listener.start() - maracas_listener.start() - - #pin = 1 - #pin_value = 512 - #print 'Sending:' "sensor-update %s %d" % (VOLUME_NAMES[pin], (pin_value * 100) / 1024) - #sender.send_scratch_command("sensor-update %s %d" % (VOLUME_NAMES[pin], (pin_value * 100) / 1024)) - #print 'Sending:' 'broadcast %s' % INSTRUMENT_NAMES[pin] - #sender.send_scratch_command('broadcast %s' % INSTRUMENT_NAMES[pin]) - - #sender.send_scratch_command("sensor-update guitar-pitch 10") - #sender.send_scratch_command("broadcast cymbal") - #time.sleep(1) - #sender.send_scratch_command("broadcast snare") - #time.sleep(1) - #sender.send_scratch_command("broadcast hihat") - #time.sleep(1) - #sender.send_scratch_command("broadcast slowdrum") - #time.sleep(1) - #sender.send_scratch_command("broadcast tomtom") - #time.sleep(1) - - # wait for ctrl+c - try: - #just pause - -# else: - time.sleep(0.1) - except KeyboardInterrupt: - cleanup_threads((sender, drum_listener, guitar_listener, maracas_listener)) - sys.exit() - diff --git a/raspberrypi/music-maker.sb b/raspberrypi/music-maker.sb deleted file mode 100755 index 64f848d..0000000 Binary files a/raspberrypi/music-maker.sb and /dev/null differ diff --git a/release/cymbal.wav b/release/cymbal.wav new file mode 100644 index 0000000..7c2e528 Binary files /dev/null and b/release/cymbal.wav differ diff --git a/release/guitar.gif b/release/guitar.gif new file mode 100644 index 0000000..b453957 Binary files /dev/null and b/release/guitar.gif differ diff --git a/release/guitar1.wav b/release/guitar1.wav new file mode 100644 index 0000000..1de2ccc Binary files /dev/null and b/release/guitar1.wav differ diff --git a/release/guitar2.wav b/release/guitar2.wav new file mode 100644 index 0000000..955de5b Binary files /dev/null and b/release/guitar2.wav differ diff --git a/release/guitar3.wav b/release/guitar3.wav new file mode 100644 index 0000000..3486c86 Binary files /dev/null and b/release/guitar3.wav differ diff --git a/release/guitar4.wav b/release/guitar4.wav new file mode 100644 index 0000000..9c15de5 Binary files /dev/null and b/release/guitar4.wav differ diff --git a/release/guitar5.wav b/release/guitar5.wav new file mode 100644 index 0000000..3f9dcc5 Binary files /dev/null and b/release/guitar5.wav differ diff --git a/release/hihat.wav b/release/hihat.wav new file mode 100644 index 0000000..e591363 Binary files /dev/null and b/release/hihat.wav differ diff --git a/release/instruments/instruments.ino b/release/instruments/instruments.ino new file mode 100644 index 0000000..61442ff --- /dev/null +++ b/release/instruments/instruments.ino @@ -0,0 +1,86 @@ +const int NUMBER_OF_MARACAS = 2; +const int MARACAS_PINS[] = {6, 7}; +const int MARACAS_DELAY = 5000; + +const int NUMBER_OF_DRUMS= 4; +const int DRUM_PINS[] = {8, 9, 10, 11}; +const int DRUM_DELAY = 2500; + +const int GUITAR_THRESHOLD = 20; +const int GUITAR_PIN = A0; +const int GUITAR_DELAY = 5000; + +int maracas_states[] = {-1,-1}; +int maracas_delays[] = {0, 0}; + +int drum_delays[] = {0, 0, 0, 0}; + +int guitar_delay = 0; + +void setup() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + pinMode(MARACAS_PINS[i], INPUT); + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + pinMode(DRUM_PINS[i], INPUT); + } + Serial.begin(9600); +} + +void loop() { + maracas(); + drums(); + guitar(); + update_delays(); +} + + +void maracas() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + int newState = digitalRead(MARACAS_PINS[i]); + if (newState != maracas_states[i] && maracas_delays[i] < 1) { + Serial.print("maracas,"); + Serial.print(i); + Serial.println(); + maracas_states[i] = newState; + maracas_delays[i] = MARACAS_DELAY; + } + } +} + +void drums() { + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (digitalRead(DRUM_PINS[i]) == HIGH && drum_delays[i] < 1) { + Serial.print("drum,"); + Serial.print(i); + Serial.println(); + drum_delays[i] = DRUM_DELAY; + } + } +} + +void guitar() { + int pitch = analogRead(GUITAR_PIN); + if (pitch >= GUITAR_THRESHOLD && guitar_delay < 1) { + Serial.print("guitar,"); + Serial.print(pitch); + Serial.println(); + guitar_delay = GUITAR_DELAY; + } +} + +void update_delays() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + if (maracas_delays[i] > 0) { + maracas_delays[i] -= 1; + } + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (drum_delays[i] > 0) { + drum_delays[i] -= 1; + } + } + if (guitar_delay > 0) { + guitar_delay -= 1; + } +} diff --git a/release/instruments1/instruments1.ino b/release/instruments1/instruments1.ino new file mode 100644 index 0000000..b3b3159 --- /dev/null +++ b/release/instruments1/instruments1.ino @@ -0,0 +1,40 @@ +const int NUMBER_OF_MARACAS = 2; +const int MARACAS_PINS[] = {6, 7}; +const int MARACAS_DELAY = 5000; + +int maracas_states[] = {-1,-1}; +int maracas_delays[] = {0, 0}; + +void setup() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + pinMode(MARACAS_PINS[i], INPUT); + } + Serial.begin(9600); +} + +void loop() { + maracas(); + update_delays(); +} + + +void maracas() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + int newState = digitalRead(MARACAS_PINS[i]); + if (newState != maracas_states[i] && maracas_delays[i] < 1) { + Serial.print("maracas,"); + Serial.print(i); + Serial.println(); + maracas_states[i] = newState; + maracas_delays[i] = MARACAS_DELAY; + } + } +} + +void update_delays() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + if (maracas_delays[i] > 0) { + maracas_delays[i] -= 1; + } + } +} diff --git a/release/instruments2/instruments2.ino b/release/instruments2/instruments2.ino new file mode 100644 index 0000000..66c8413 --- /dev/null +++ b/release/instruments2/instruments2.ino @@ -0,0 +1,66 @@ +const int NUMBER_OF_MARACAS = 2; +const int MARACAS_PINS[] = {6, 7}; +const int MARACAS_DELAY = 5000; + +const int NUMBER_OF_DRUMS= 4; +const int DRUM_PINS[] = {8, 9, 10, 11}; +const int DRUM_DELAY = 2500; + +int maracas_states[] = {-1,-1}; +int maracas_delays[] = {0, 0}; + +int drum_delays[] = {0, 0, 0, 0}; + +void setup() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + pinMode(MARACAS_PINS[i], INPUT); + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + pinMode(DRUM_PINS[i], INPUT); + } + Serial.begin(9600); +} + +void loop() { + maracas(); + drums(); + update_delays(); +} + + +void maracas() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + int newState = digitalRead(MARACAS_PINS[i]); + if (newState != maracas_states[i] && maracas_delays[i] < 1) { + Serial.print("maracas,"); + Serial.print(i); + Serial.println(); + maracas_states[i] = newState; + maracas_delays[i] = MARACAS_DELAY; + } + } +} + +void drums() { + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (digitalRead(DRUM_PINS[i]) == HIGH && drum_delays[i] < 1) { + Serial.print("drum,"); + Serial.print(i); + Serial.println(); + drum_delays[i] = DRUM_DELAY; + } + } +} + +void update_delays() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + if (maracas_delays[i] > 0) { + maracas_delays[i] -= 1; + } + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (drum_delays[i] > 0) { + drum_delays[i] -= 1; + } + } +} diff --git a/release/instruments3/instruments3.ino b/release/instruments3/instruments3.ino new file mode 100644 index 0000000..61442ff --- /dev/null +++ b/release/instruments3/instruments3.ino @@ -0,0 +1,86 @@ +const int NUMBER_OF_MARACAS = 2; +const int MARACAS_PINS[] = {6, 7}; +const int MARACAS_DELAY = 5000; + +const int NUMBER_OF_DRUMS= 4; +const int DRUM_PINS[] = {8, 9, 10, 11}; +const int DRUM_DELAY = 2500; + +const int GUITAR_THRESHOLD = 20; +const int GUITAR_PIN = A0; +const int GUITAR_DELAY = 5000; + +int maracas_states[] = {-1,-1}; +int maracas_delays[] = {0, 0}; + +int drum_delays[] = {0, 0, 0, 0}; + +int guitar_delay = 0; + +void setup() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + pinMode(MARACAS_PINS[i], INPUT); + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + pinMode(DRUM_PINS[i], INPUT); + } + Serial.begin(9600); +} + +void loop() { + maracas(); + drums(); + guitar(); + update_delays(); +} + + +void maracas() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + int newState = digitalRead(MARACAS_PINS[i]); + if (newState != maracas_states[i] && maracas_delays[i] < 1) { + Serial.print("maracas,"); + Serial.print(i); + Serial.println(); + maracas_states[i] = newState; + maracas_delays[i] = MARACAS_DELAY; + } + } +} + +void drums() { + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (digitalRead(DRUM_PINS[i]) == HIGH && drum_delays[i] < 1) { + Serial.print("drum,"); + Serial.print(i); + Serial.println(); + drum_delays[i] = DRUM_DELAY; + } + } +} + +void guitar() { + int pitch = analogRead(GUITAR_PIN); + if (pitch >= GUITAR_THRESHOLD && guitar_delay < 1) { + Serial.print("guitar,"); + Serial.print(pitch); + Serial.println(); + guitar_delay = GUITAR_DELAY; + } +} + +void update_delays() { + for (int i = 0; i < NUMBER_OF_MARACAS; i++) { + if (maracas_delays[i] > 0) { + maracas_delays[i] -= 1; + } + } + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (drum_delays[i] > 0) { + drum_delays[i] -= 1; + } + } + if (guitar_delay > 0) { + guitar_delay -= 1; + } +} diff --git a/release/maracas.gif b/release/maracas.gif new file mode 100644 index 0000000..c5cca75 Binary files /dev/null and b/release/maracas.gif differ diff --git a/release/maracas.wav b/release/maracas.wav new file mode 100644 index 0000000..a039e3a Binary files /dev/null and b/release/maracas.wav differ diff --git a/release/miniband.py b/release/miniband.py new file mode 100755 index 0000000..2ec3769 --- /dev/null +++ b/release/miniband.py @@ -0,0 +1,177 @@ +# This code is copyright ...... under the GPL v2. +# This code is derived from scratch_gpio_handler by Simon Walters, which +# is derived from scratch_handler by Thomas Preston +# Version 0.1: It's kind of working. + +from array import * +import threading +import socket +import time +import sys +import struct +import serial +import io +import logging + +PORT = 42001 +DEFAULT_HOST = '127.0.0.1' +BUFFER_SIZE = 240 #used to be 100 +SOCKET_TIMEOUT = 1 +DEVICES = ['/dev/ttyACM3'] +#DEVICES = ['/dev/ttyACM0', '/dev/ttyACM1','/dev/ttyACM3'] +ARDUINO_BAUD_RATE = 9600 + +BROADCAST_NAMES = {'guitar': 'guitar', + 'drum': {0: 'cymbal', + 1: 'hihat', + 2: 'slowdrum', + 3: 'snare', + 4: 'tomtom'}, + 'maracas': 'maracas'} + +SENSOR_NAMES = {'guitar': 'guitar_pitch'} + +logging.basicConfig(level = logging.INFO) +#logging.basicConfig(level = logging.DEBUG) + +class MyError(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + +class ScratchSender(threading.Thread): + def __init__(self, socket): + threading.Thread.__init__(self) + self.scratch_socket = socket + self._stop = threading.Event() + + def join(self,timeout=None): + self._stop.set() + threading.Thread.join(self, timeout) + + def stopped(self): + return self._stop.isSet() + + def run(self): + while not self.stopped(): + time.sleep(0.01) # be kind to cpu - not certain why :) + + def send_scratch_command(self, cmd): + n = len(cmd) + a = array('c') + a.append(chr((n >> 24) & 0xFF)) + a.append(chr((n >> 16) & 0xFF)) + a.append(chr((n >> 8) & 0xFF)) + a.append(chr(n & 0xFF)) + self.scratch_socket.send(a.tostring() + cmd) + + +class ArduinoListener(threading.Thread): + def __init__(self, device, speed, sender, instruments, values): + threading.Thread.__init__(self) + self.arduino_device = serial.Serial(device, speed, timeout=0.5) + self._stop = threading.Event() + self.scratch_sender = sender + self.instruments = instruments + self.values = values + logging.info("Started listener on port %s" % device) + + def join(self,timeout=None): + self._stop.set() + threading.Thread.join(self, timeout) + + def stopped(self): + return self._stop.isSet() + + def run(self): + self.arduino_device.readline() # discard the first (partial) line + while not self.stopped(): + logging.debug('Thread waiting for a signal') + try: + device_line = self.arduino_device.readline() + if device_line : + instrument, instrument_value_string = device_line.rstrip().split(',', 1) + instrument_value = int(instrument_value_string) + logging.info('Instrument: %s, Value: %d' % (instrument, instrument_value)) + if instrument in self.values: + try: + logging.info("sensor-update %s %d" % (self.values[instrument], (instrument_value * 100) / 1024)) + self.scratch_sender.send_scratch_command("sensor-update %s %d" % (self.values[instrument], (instrument_value * 100) / 1024)) + except KeyError: + # Do nothing + pass + if instrument in self.instruments: + if isinstance(self.instruments[instrument], dict): + broadcast = self.instruments[instrument][instrument_value] + else: + broadcast = self.instruments[instrument] + try: + logging.info("broadcast %s" % broadcast) + self.scratch_sender.send_scratch_command('broadcast %s' % broadcast) + except KeyError: + # Do nothing + pass + + except serial.SerialException: + logging.error('Serial exception') + logging.debug('Thread run() exiting') + + +def create_socket(host, port): + while True: + try: + logging.info('Connecting to Scratch') + scratch_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + scratch_sock.connect((host, port)) + break + except socket.error: + logging.warning("There was an error connecting to Scratch!") + logging.warning("I couldn't find a Mesh session at host: %s, port: %s" % (host, port)) + time.sleep(3) + return scratch_sock + +def cleanup_threads(threads): + logging.debug("Stopping %d threads" % len(threads)) + for thread in threads: + thread.join() + logging.debug("Threads joined") + +if __name__ == '__main__': + if len(sys.argv) > 1: + host = sys.argv[1] + else: + host = DEFAULT_HOST + +cycle_trace = 'start' +while True: + if (cycle_trace == 'disconnected'): + logging.info("Scratch disconnected") + cleanup_threads(listeners + sender) + time.sleep(1) + cycle_trace = 'start' + + if (cycle_trace == 'start'): + # open the socket + logging.info('Connecting to Scratch...') + the_socket = create_socket(host, PORT) + logging.info('Connected to Scratch') + the_socket.settimeout(SOCKET_TIMEOUT) + sender = ScratchSender(the_socket) + listeners = [ArduinoListener(device, ARDUINO_BAUD_RATE, sender, BROADCAST_NAMES, SENSOR_NAMES) for device in DEVICES] + cycle_trace = 'running' + logging.info("Listeners running....") + sender.start() + for listener in listeners: + listener.start() + + # wait for ctrl+c + try: + #just pause + time.sleep(0.1) + except KeyboardInterrupt: + logging.warning("Interrrupted") + cleanup_threads(listeners + [sender]) + sys.exit() + diff --git a/release/miniband1.sb b/release/miniband1.sb new file mode 100644 index 0000000..6f1be4b Binary files /dev/null and b/release/miniband1.sb differ diff --git a/release/miniband2.sb b/release/miniband2.sb new file mode 100644 index 0000000..263b9da Binary files /dev/null and b/release/miniband2.sb differ diff --git a/release/miniband3.sb b/release/miniband3.sb new file mode 100644 index 0000000..39bef79 Binary files /dev/null and b/release/miniband3.sb differ diff --git a/release/scratchthumbs.db b/release/scratchthumbs.db new file mode 100644 index 0000000..31aaa37 Binary files /dev/null and b/release/scratchthumbs.db differ diff --git a/release/slowdrum.wav b/release/slowdrum.wav new file mode 100644 index 0000000..c55965a Binary files /dev/null and b/release/slowdrum.wav differ diff --git a/release/snare.wav b/release/snare.wav new file mode 100644 index 0000000..92d24c4 Binary files /dev/null and b/release/snare.wav differ diff --git a/writeup/.directory b/writeup/.directory new file mode 100644 index 0000000..cdbb188 --- /dev/null +++ b/writeup/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2013,4,19,20,12,1 +Version=3 +ViewMode=1 diff --git a/writeup/drums-script.png b/writeup/drums-script.png new file mode 100644 index 0000000..767957b Binary files /dev/null and b/writeup/drums-script.png differ diff --git a/writeup/drums.fzz b/writeup/drums.fzz new file mode 100644 index 0000000..c44172a Binary files /dev/null and b/writeup/drums.fzz differ diff --git a/writeup/drums_bb.png b/writeup/drums_bb.png new file mode 100644 index 0000000..857eeb0 Binary files /dev/null and b/writeup/drums_bb.png differ diff --git a/writeup/drums_schem.png b/writeup/drums_schem.png new file mode 100644 index 0000000..22d54d3 Binary files /dev/null and b/writeup/drums_schem.png differ diff --git a/writeup/enable-remote-sensors.png b/writeup/enable-remote-sensors.png new file mode 100644 index 0000000..fa30c52 Binary files /dev/null and b/writeup/enable-remote-sensors.png differ diff --git a/writeup/guitar.fzz b/writeup/guitar.fzz new file mode 100644 index 0000000..78aac9a Binary files /dev/null and b/writeup/guitar.fzz differ diff --git a/writeup/guitar_bb.png b/writeup/guitar_bb.png new file mode 100644 index 0000000..8966d03 Binary files /dev/null and b/writeup/guitar_bb.png differ diff --git a/writeup/guitar_schem.png b/writeup/guitar_schem.png new file mode 100644 index 0000000..d03ea67 Binary files /dev/null and b/writeup/guitar_schem.png differ diff --git a/writeup/maracas-script.png b/writeup/maracas-script.png new file mode 100644 index 0000000..0f3957b Binary files /dev/null and b/writeup/maracas-script.png differ diff --git a/writeup/maracas.fzz b/writeup/maracas.fzz new file mode 100644 index 0000000..60941d2 Binary files /dev/null and b/writeup/maracas.fzz differ diff --git a/writeup/maracas_bb.png b/writeup/maracas_bb.png new file mode 100644 index 0000000..77050b0 Binary files /dev/null and b/writeup/maracas_bb.png differ diff --git a/writeup/maracas_schem.png b/writeup/maracas_schem.png new file mode 100644 index 0000000..b766079 Binary files /dev/null and b/writeup/maracas_schem.png differ diff --git a/writeup/miniband.doc b/writeup/miniband.doc new file mode 100644 index 0000000..dfc762d Binary files /dev/null and b/writeup/miniband.doc differ diff --git a/writeup/miniband.odt b/writeup/miniband.odt new file mode 100644 index 0000000..6a82b63 Binary files /dev/null and b/writeup/miniband.odt differ