From: Neil Smith Date: Sun, 21 Apr 2013 11:35:50 +0000 (+0100) Subject: Modifications after testing on RPi X-Git-Url: https://git.njae.me.uk/?p=miniband.git;a=commitdiff_plain;h=f490957717311a8187284f7a1af40d203084979a Modifications after testing on RPi --- 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/release/cymbal.mp3 b/release/cymbal.mp3 deleted file mode 100644 index e56c01c..0000000 Binary files a/release/cymbal.mp3 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/drums/drums.ino b/release/drums/drums.ino index 6ebd466..7781cab 100644 --- a/release/drums/drums.ino +++ b/release/drums/drums.ino @@ -9,7 +9,7 @@ void setup() { for (int i = 0; i < NUMBER_OF_DRUMS; i++) { pinMode(PINS[i], INPUT); } - Serial.begin(57600); + Serial.begin(9600); } void loop() { diff --git a/release/guitar/guitar.ino b/release/guitar/guitar.ino index f9f530c..74db777 100644 --- a/release/guitar/guitar.ino +++ b/release/guitar/guitar.ino @@ -7,7 +7,7 @@ int val; int pinDelay; void setup() { - Serial.begin(57600); + Serial.begin(9600); } void loop() { diff --git a/release/guitar1.mp3 b/release/guitar1.mp3 deleted file mode 100644 index 09fb0b7..0000000 Binary files a/release/guitar1.mp3 and /dev/null 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.mp3 b/release/guitar2.mp3 deleted file mode 100644 index 9ec4572..0000000 Binary files a/release/guitar2.mp3 and /dev/null 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.mp3 b/release/guitar3.mp3 deleted file mode 100644 index ca30fc6..0000000 Binary files a/release/guitar3.mp3 and /dev/null 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.mp3 b/release/guitar4.mp3 deleted file mode 100644 index 234a88d..0000000 Binary files a/release/guitar4.mp3 and /dev/null 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.mp3 b/release/guitar5.mp3 deleted file mode 100644 index d49a932..0000000 Binary files a/release/guitar5.mp3 and /dev/null 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.mp3 b/release/hihat.mp3 deleted file mode 100644 index 3bf8094..0000000 Binary files a/release/hihat.mp3 and /dev/null 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/maracas.mp3 b/release/maracas.mp3 deleted file mode 100644 index 38789a5..0000000 Binary files a/release/maracas.mp3 and /dev/null 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/maracas/maracas.ino b/release/maracas/maracas.ino index 8410aed..2597bc3 100644 --- a/release/maracas/maracas.ino +++ b/release/maracas/maracas.ino @@ -7,14 +7,16 @@ void setup() { for (int i = 0; i < 2; i++) { pinMode(pins[i], INPUT); } - Serial.begin(57600); + Serial.begin(9600); } void loop() { for (int i = 0; i < 2; i++) { newState = digitalRead(pins[i]); if (newState != states[i]) { - Serial.println("maracas,1023"); + Serial.print("maracas,"); + Serial.print(i); + Serial.println(); states[i] = newState; delay(wait); } diff --git a/release/miniband.py b/release/miniband.py new file mode 100755 index 0000000..4f61e0c --- /dev/null +++ b/release/miniband.py @@ -0,0 +1,176 @@ +# 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/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/music-maker-handler.py b/release/music-maker-handler.py deleted file mode 100755 index c935c15..0000000 --- a/release/music-maker-handler.py +++ /dev/null @@ -1,181 +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 -import logging - -PORT = 42001 -DEFAULT_HOST = '127.0.0.1' -BUFFER_SIZE = 240 #used to be 100 -SOCKET_TIMEOUT = 1 -DEVICES = ['/dev/ttyACM0', '/dev/ttyACM1','/dev/ttyACM3'] -#DEVICES = ['/dev/ttyACM0','/dev/ttyACM1'] -#DRUM_DEVICE = '/dev/ttyACM0' -#GUITAR_DEVICE = '/dev/ttyUSB1' -#MARACAS_DEVICE = '/dev/ttyACM1' -ARDUINO_BAUD_RATE = 57600 - -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/slowdrum.mp3 b/release/slowdrum.mp3 deleted file mode 100644 index 1aadcf3..0000000 Binary files a/release/slowdrum.mp3 and /dev/null 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.mp3 b/release/snare.mp3 deleted file mode 100644 index eac32da..0000000 Binary files a/release/snare.mp3 and /dev/null 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/release/tomtom.mp3 b/release/tomtom.mp3 deleted file mode 100644 index 9520eb5..0000000 Binary files a/release/tomtom.mp3 and /dev/null differ