]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
added morse library (not finished yet)
authorGuido van Rossum <guido@python.org>
Fri, 10 Mar 1995 14:47:05 +0000 (14:47 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 10 Mar 1995 14:47:05 +0000 (14:47 +0000)
Mac/Demo/sound/morselib.py [new file with mode: 0644]

diff --git a/Mac/Demo/sound/morselib.py b/Mac/Demo/sound/morselib.py
new file mode 100644 (file)
index 0000000..6f8eed6
--- /dev/null
@@ -0,0 +1,188 @@
+"""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):
+       from string import lower
+       m = ''
+       for c in s:
+               c = lower(c)
+               if morsetab.has_key(c):
+                       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()
+               apply(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 test():
+       m = MacMorse()
+       while 1:
+               try:
+                       line = raw_input('Morse line: ')
+               except (EOFError, KeyboardInterrupt):
+                       break
+               m.send(line)
+               while m.morsequeue: pass
+
+test()