summaryrefslogtreecommitdiffstats
path: root/Mac/Demo/sound/morselib.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Demo/sound/morselib.py')
-rw-r--r--Mac/Demo/sound/morselib.py202
1 files changed, 0 insertions, 202 deletions
diff --git a/Mac/Demo/sound/morselib.py b/Mac/Demo/sound/morselib.py
deleted file mode 100644
index 3c7493f..0000000
--- a/Mac/Demo/sound/morselib.py
+++ /dev/null
@@ -1,202 +0,0 @@
-"""Translate text strings to Morse code"""
-
-FRAMERATE = 22050
-SAMPWIDTH = 2
-
-BASEFREQ = 441
-OCTAVE = 2
-
-DOT = 30
-DAH = 80
-
-morsetab = {
- 'a': '.-',
- 'b': '-...',
- 'c': '-.-.',
- 'd': '-..',
- 'e': '.',
- 'f': '..-.',
- 'g': '--.',
- 'h': '....',
- 'i': '..',
- 'j': '.---',
- 'k': '-.-',
- 'l': '.-..',
- 'm': '--',
- 'n': '-.',
- 'o': '---',
- 'p': '.--.',
- 'q': '--.-',
- 'r': '.-.',
- 's': '...',
- 't': '-',
- 'u': '..-',
- 'v': '...-',
- 'w': '.--',
- 'x': '-..-',
- 'y': '-.--',
- 'z': '--..',
- '0': '-----',
- '1': '.----',
- '2': '..---',
- '3': '...--',
- '4': '....-',
- '5': '.....',
- '6': '-....',
- '7': '--...',
- '8': '---..',
- '9': '----.',
- ',': '--..--',
- '.': '.-.-.-',
- '?': '..--..',
- ';': '-.-.-.',
- ':': '---...',
- "'": '.----.',
- '-': '-....-',
- '/': '-..-.',
- '(': '-.--.-',
- ')': '-.--.-', # XXX same as code for '(' ???
- '_': '..--.-',
- ' ': ' '
-}
-
-def morsecode(s):
- m = ''
- for c in s:
- c = c.lower()
- if c in morsetab:
- c = morsetab[c] + ' '
- else:
- c = '? '
- m = m + c
- return m
-
-
-class BaseMorse:
- "base class for morse transmissions"
-
- def __init__(self):
- "constructor"
- self.dots = DOT
- self.dahs = DAH
-
- def noise(self, duration):
- "beep for given duration"
- pass
-
- def pause(self, duration):
- "pause for given duration"
- pass
-
- def dot(self):
- "short beep"
- self.noise(self.dots)
-
- def dah(self):
- "long beep"
- self.noise(self.dahs)
-
- def pdot(self):
- "pause as long as a dot"
- self.pause(self.dots)
-
- def pdah(self):
- "pause as long as a dah"
- self.pause(self.dahs)
-
- def sendmorse(self, s):
- for c in s:
- if c == '.':
- self.dot()
- elif c == '-':
- self.dah()
- else:
- self.pdah()
- self.pdot()
-
- def sendascii(self, s):
- self.sendmorse(morsecode(s))
-
- def send(self, s):
- self.sendascii(s)
-
-
-import Audio_mac
-class MyAudio(Audio_mac.Play_Audio_mac):
- def _callback(self, *args):
- if hasattr(self, 'usercallback'):
- self.usercallback()
- Audio_mac.Play_Audio_mac._callback(self, args)
-
-
-class MacMorse(BaseMorse):
- "Mac specific class to play Morse code"
-
- def __init__(self):
- BaseMorse.__init__(self)
- self.dev = MyAudio()
- self.dev.setoutrate(FRAMERATE)
- self.dev.setsampwidth(SAMPWIDTH)
- self.dev.setnchannels(1)
- self.dev.usercallback = self.usercallback
- sinewave = ''
- n = int(FRAMERATE / BASEFREQ)
- octave = OCTAVE
- from math import sin, pi
- for i in range(n):
- val = int(sin(2 * pi * i * octave / n) * 0x7fff)
- sample = chr((val >> 8) & 255) + chr(val & 255)
- sinewave = sinewave + sample[:SAMPWIDTH]
- self.sinewave = sinewave
- self.silence = '\0' * (n*SAMPWIDTH)
- self.morsequeue = ''
-
- def __del__(self):
- self.close()
-
- def close(self):
- self.dev = None
-
- def pause(self, duration):
- self.dev.writeframes(self.silence * duration)
-
- def noise(self, duration):
- self.dev.writeframes(self.sinewave * duration)
-
- def sendmorse(self, s):
- self.morsequeue = self.morsequeue + s
- self.dev.usercallback()
- self.dev.usercallback()
- self.dev.usercallback()
-
- def usercallback(self):
- if self.morsequeue:
- c, self.morsequeue = self.morsequeue[0], self.morsequeue[1:]
- if c == '.':
- self.dot()
- elif c == '-':
- self.dah()
- else:
- self.pdah()
- self.pdot()
-
-
-def raw_input(prompt):
- import sys
- sys.stdout.write(prompt)
- sys.stdout.flush()
- return sys.stdin.readline()
-
-def test():
- m = MacMorse()
- while 1:
- try:
- line = raw_input('Morse line: ')
- except (EOFError, KeyboardInterrupt):
- break
- m.send(line)
- while m.morsequeue:
- pass
-
-if __name__ == '__main__':
- test()