diff options
Diffstat (limited to 'Mac/Demo/sound/morselib.py')
-rw-r--r-- | Mac/Demo/sound/morselib.py | 202 |
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() |