summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarian Sigler <m@qjym.de>2013-06-08 23:10:19 +0200
committerMarian Sigler <m@qjym.de>2013-06-08 23:10:56 +0200
commit0dec473ffc869c946f1057e55ecde878c22f6bca (patch)
tree3e77e8c4248b2d5702d3a8cbaf408a4975d859b2
parent0c84e8206325bf14340060edf2a3410dde79861a (diff)
downloadtesla-0dec473ffc869c946f1057e55ecde878c22f6bca.tar.gz
tesla-0dec473ffc869c946f1057e55ecde878c22f6bca.tar.bz2
tesla-0dec473ffc869c946f1057e55ecde878c22f6bca.zip
more tolerant parsing of defaults
-rw-r--r--music/tonleiter2
-rw-r--r--rtttl.py36
2 files changed, 28 insertions, 10 deletions
diff --git a/music/tonleiter b/music/tonleiter
index dcf64b3..e6199ab 100644
--- a/music/tonleiter
+++ b/music/tonleiter
@@ -1 +1 @@
-tonleiter:d=4,o=4,b=120:c,d,e,f,g,a,h,c5
+tonleiter::c,d,e,f,g,a,h,c5
diff --git a/rtttl.py b/rtttl.py
index 6d1dfe5..959671e 100644
--- a/rtttl.py
+++ b/rtttl.py
@@ -1,6 +1,8 @@
#!/usr/bin/python
"""
play a rtttl file by sending the tone lengths to the arduino
+
+protocol information taken from http://merwin.bespin.org/t4a/specs/nokia_rtttl.txt
"""
from __future__ import division
import re
@@ -13,7 +15,6 @@ BAUDRATE = 9600
PAUSE = .001
_rtttl_re = re.compile('^\s*([0-9]+)?([a-hp]#?)(\.?)([0-9]?)\s*$')
-_rtttl_prefix_re = re.compile('d=([0-9]+),\s?o=([1-5]),\s?b=([0-9]+)')
freqs = {
'c': 261.626,
@@ -32,14 +33,28 @@ freqs = {
'p': 0,
}
-def parse(s):
- name, prefix, music = s.split(':')
- pm = _rtttl_prefix_re.match(prefix)
- d, o, b = pm.groups()
+def parse_defaults(s):
+ defaults = {
+ 'd': 4, # duration
+ 'o': 6, # octave
+ 'b': 63, # beats per minute
+ }
+
+ if s == '':
+ return defaults
- defaultlength = int(d)
- defaultoctave = int(o)
- timefactor = int(b)/60
+ for option in s.split(','):
+ k,v = option.split('=')
+ defaults[k] = v
+
+ return defaults
+
+def parse(s):
+ name, defs, music = s.split(':')
+ defaults = parse_defaults(defs)
+ defaultlength = int(defaults['d'])
+ defaultoctave = int(defaults['o'])
+ timefactor = int(defaults['b'])/60
# for m in _rtttl_re.finditer(music):
for tone in music.split(","):
@@ -70,7 +85,8 @@ def parse(s):
yield (length, tone)
def send(sounds, device):
- with serial.Serial(device, BAUDRATE) as ser:
+ ser = serial.Serial(device, BAUDRATE)
+ try:
for length, freq in sounds:
sys.stderr.write('len: %.3f, ton: %9.3f, send: %d' % (length, freq, freq2t(freq)))
ser.write(struct.pack('>H', freq2t(freq)))
@@ -78,7 +94,9 @@ def send(sounds, device):
sys.stderr.write('\n')
ser.write('\0\0')
time.sleep(PAUSE)
+ finally:
ser.write('\0\0')
+ ser.close()
def freq2t(freq):