1 """Translate text strings to Morse code"""
58 ')': '-.--.-', # XXX same as code for '(' ???
64 from string
import lower
68 if morsetab
.has_key(c
):
77 "base class for morse transmissions"
84 def noise(self
, duration
):
85 "beep for given duration"
88 def pause(self
, duration
):
89 "pause for given duration"
101 "pause as long as a dot"
102 self
.pause(self
.dots
)
105 "pause as long as a dah"
106 self
.pause(self
.dahs
)
108 def sendmorse(self
, s
):
110 if c
== '.': self
.dot()
111 elif c
== '-': self
.dah()
115 def sendascii(self
, s
):
116 self
.sendmorse(morsecode(s
))
123 class MyAudio(Audio_mac
.Play_Audio_mac
):
124 def _callback(self
, *args
):
125 if hasattr(self
, 'usercallback'): self
.usercallback()
126 apply(Audio_mac
.Play_Audio_mac
._callback
, (self
,) + args
)
129 class MacMorse(BaseMorse
):
130 "Mac specific class to play Morse code"
133 BaseMorse
.__init
__(self
)
135 self
.dev
.setoutrate(FRAMERATE
)
136 self
.dev
.setsampwidth(SAMPWIDTH
)
137 self
.dev
.setnchannels(1)
138 self
.dev
.usercallback
= self
.usercallback
140 n
= int(FRAMERATE
/ BASEFREQ
)
142 from math
import sin
, pi
144 val
= int(sin(2 * pi
* i
* octave
/ n
) * 0x7fff)
145 sample
= chr((val
>> 8) & 255) + chr(val
& 255)
146 sinewave
= sinewave
+ sample
[:SAMPWIDTH
]
147 self
.sinewave
= sinewave
148 self
.silence
= '\0' * (n
*SAMPWIDTH
)
157 def pause(self
, duration
):
158 self
.dev
.writeframes(self
.silence
* duration
)
160 def noise(self
, duration
):
161 self
.dev
.writeframes(self
.sinewave
* duration
)
163 def sendmorse(self
, s
):
164 self
.morsequeue
= self
.morsequeue
+ s
165 self
.dev
.usercallback()
166 self
.dev
.usercallback()
167 self
.dev
.usercallback()
169 def usercallback(self
):
171 c
, self
.morsequeue
= self
.morsequeue
[0], self
.morsequeue
[1:]
172 if c
== '.': self
.dot()
173 elif c
== '-': self
.dah()
182 line
= raw_input('Morse line: ')
183 except (EOFError, KeyboardInterrupt):
186 while m
.morsequeue
: pass