diff options
author | Georg Brandl <georg@python.org> | 2009-10-11 08:18:44 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-10-11 08:18:44 (GMT) |
commit | 30fd2bb884bff14b10923234a1aee9dd6a65ba59 (patch) | |
tree | 091bdfd8fc47c2a011874274a69009838a4fd7bc /Demo | |
parent | 274686631ac8cd31250db6c402fda382350a6337 (diff) | |
download | cpython-30fd2bb884bff14b10923234a1aee9dd6a65ba59.zip cpython-30fd2bb884bff14b10923234a1aee9dd6a65ba59.tar.gz cpython-30fd2bb884bff14b10923234a1aee9dd6a65ba59.tar.bz2 |
Update morse script, avoid globals, use iterators.
Diffstat (limited to 'Demo')
-rwxr-xr-x | Demo/scripts/morse.py | 77 |
1 files changed, 33 insertions, 44 deletions
diff --git a/Demo/scripts/morse.py b/Demo/scripts/morse.py index 3da49da..e939b2d 100755 --- a/Demo/scripts/morse.py +++ b/Demo/scripts/morse.py @@ -1,3 +1,5 @@ +#! /usr/bin/env python + # DAH should be three DOTs. # Space between DOTs and DAHs should be one DOT. # Space between two letters should be one DAH. @@ -36,53 +38,44 @@ morsetab = { 'X': '-..-', 'x': '-..-', 'Y': '-.--', 'y': '-.--', 'Z': '--..', 'z': '--..', - '0': '-----', - '1': '.----', - '2': '..---', - '3': '...--', - '4': '....-', - '5': '.....', - '6': '-....', - '7': '--...', - '8': '---..', - '9': '----.', - ',': '--..--', - '.': '.-.-.-', - '?': '..--..', - ';': '-.-.-.', - ':': '---...', - "'": '.----.', - '-': '-....-', - '/': '-..-.', - '(': '-.--.-', - ')': '-.--.-', - '_': '..--.-', - ' ': ' ' + '0': '-----', ',': '--..--', + '1': '.----', '.': '.-.-.-', + '2': '..---', '?': '..--..', + '3': '...--', ';': '-.-.-.', + '4': '....-', ':': '---...', + '5': '.....', "'": '.----.', + '6': '-....', '-': '-....-', + '7': '--...', '/': '-..-.', + '8': '---..', '(': '-.--.-', + '9': '----.', ')': '-.--.-', + ' ': ' ', '_': '..--.-', } +nowave = '\0' * 200 + # If we play at 44.1 kHz (which we do), then if we produce one sine # wave in 100 samples, we get a tone of 441 Hz. If we produce two # sine waves in these 100 samples, we get a tone of 882 Hz. 882 Hz # appears to be a nice one for playing morse code. def mkwave(octave): - global sinewave, nowave sinewave = '' for i in range(100): - val = int(math.sin(math.pi * float(i) * octave / 50.0) * 30000) + val = int(math.sin(math.pi * i * octave / 50.0) * 30000) sinewave = sinewave + chr((val >> 8) & 255) + chr(val & 255) - nowave = '\0' * 200 + return sinewave -mkwave(OCTAVE) +defaultwave = mkwave(OCTAVE) def main(): - import getopt, string + import getopt try: opts, args = getopt.getopt(sys.argv[1:], 'o:p:') except getopt.error: sys.stderr.write('Usage ' + sys.argv[0] + - ' [ -o outfile ] [ args ] ...\n') + ' [ -o outfile ] [ -p octave ] [ words ] ...\n') sys.exit(1) dev = None + wave = defaultwave for o, a in opts: if o == '-o': import aifc @@ -91,7 +84,7 @@ def main(): dev.setsampwidth(2) dev.setnchannels(1) if o == '-p': - mkwave(string.atoi(a)) + wave = mkwave(int(a)) if not dev: import audiodev dev = audiodev.AudioDev() @@ -101,18 +94,14 @@ def main(): dev.close = dev.stop dev.writeframesraw = dev.writeframes if args: - line = string.join(args) + source = [' '.join(args)] else: - line = sys.stdin.readline() - while line: + source = iter(sys.stdin.readline, '') + for line in source: mline = morse(line) - play(mline, dev) + play(mline, dev, wave) if hasattr(dev, 'wait'): dev.wait() - if not args: - line = sys.stdin.readline() - else: - line = '' dev.close() # Convert a string to morse code with \001 between the characters in @@ -121,29 +110,29 @@ def morse(line): res = '' for c in line: try: - res = res + morsetab[c] + '\001' + res += morsetab[c] + '\001' except KeyError: pass return res # Play a line of morse code. -def play(line, dev): +def play(line, dev, wave): for c in line: if c == '.': - sine(dev, DOT) + sine(dev, DOT, wave) elif c == '-': - sine(dev, DAH) + sine(dev, DAH, wave) else: # space pause(dev, DAH + DOT) pause(dev, DOT) -def sine(dev, length): +def sine(dev, length, wave): for i in range(length): - dev.writeframesraw(sinewave) + dev.writeframesraw(wave) def pause(dev, length): for i in range(length): dev.writeframesraw(nowave) -if __name__ == '__main__' or sys.argv[0] == __name__: +if __name__ == '__main__': main() |