ยปCore Development>Code coverage>Mac/Demo/sound/morselib.py

Python code coverage for Mac/Demo/sound/morselib.py

#countcontent
1n/a"""Translate text strings to Morse code"""
2n/a
3n/aFRAMERATE = 22050
4n/aSAMPWIDTH = 2
5n/a
6n/aBASEFREQ = 441
7n/aOCTAVE = 2
8n/a
9n/aDOT = 30
10n/aDAH = 80
11n/a
12n/amorsetab = {
13n/a 'a': '.-',
14n/a 'b': '-...',
15n/a 'c': '-.-.',
16n/a 'd': '-..',
17n/a 'e': '.',
18n/a 'f': '..-.',
19n/a 'g': '--.',
20n/a 'h': '....',
21n/a 'i': '..',
22n/a 'j': '.---',
23n/a 'k': '-.-',
24n/a 'l': '.-..',
25n/a 'm': '--',
26n/a 'n': '-.',
27n/a 'o': '---',
28n/a 'p': '.--.',
29n/a 'q': '--.-',
30n/a 'r': '.-.',
31n/a 's': '...',
32n/a 't': '-',
33n/a 'u': '..-',
34n/a 'v': '...-',
35n/a 'w': '.--',
36n/a 'x': '-..-',
37n/a 'y': '-.--',
38n/a 'z': '--..',
39n/a '0': '-----',
40n/a '1': '.----',
41n/a '2': '..---',
42n/a '3': '...--',
43n/a '4': '....-',
44n/a '5': '.....',
45n/a '6': '-....',
46n/a '7': '--...',
47n/a '8': '---..',
48n/a '9': '----.',
49n/a ',': '--..--',
50n/a '.': '.-.-.-',
51n/a '?': '..--..',
52n/a ';': '-.-.-.',
53n/a ':': '---...',
54n/a "'": '.----.',
55n/a '-': '-....-',
56n/a '/': '-..-.',
57n/a '(': '-.--.-',
58n/a ')': '-.--.-', # XXX same as code for '(' ???
59n/a '_': '..--.-',
60n/a ' ': ' '
61n/a}
62n/a
63n/adef morsecode(s):
64n/a from string import lower
65n/a m = ''
66n/a for c in s:
67n/a c = lower(c)
68n/a if morsetab.has_key(c):
69n/a c = morsetab[c] + ' '
70n/a else:
71n/a c = '? '
72n/a m = m + c
73n/a return m
74n/a
75n/a
76n/aclass BaseMorse:
77n/a "base class for morse transmissions"
78n/a
79n/a def __init__(self):
80n/a "constructor"
81n/a self.dots = DOT
82n/a self.dahs = DAH
83n/a
84n/a def noise(self, duration):
85n/a "beep for given duration"
86n/a pass
87n/a
88n/a def pause(self, duration):
89n/a "pause for given duration"
90n/a pass
91n/a
92n/a def dot(self):
93n/a "short beep"
94n/a self.noise(self.dots)
95n/a
96n/a def dah(self):
97n/a "long beep"
98n/a self.noise(self.dahs)
99n/a
100n/a def pdot(self):
101n/a "pause as long as a dot"
102n/a self.pause(self.dots)
103n/a
104n/a def pdah(self):
105n/a "pause as long as a dah"
106n/a self.pause(self.dahs)
107n/a
108n/a def sendmorse(self, s):
109n/a for c in s:
110n/a if c == '.': self.dot()
111n/a elif c == '-': self.dah()
112n/a else: self.pdah()
113n/a self.pdot()
114n/a
115n/a def sendascii(self, s):
116n/a self.sendmorse(morsecode(s))
117n/a
118n/a def send(self, s):
119n/a self.sendascii(s)
120n/a
121n/a
122n/aimport Audio_mac
123n/aclass MyAudio(Audio_mac.Play_Audio_mac):
124n/a def _callback(self, *args):
125n/a if hasattr(self, 'usercallback'): self.usercallback()
126n/a apply(Audio_mac.Play_Audio_mac._callback, (self,) + args)
127n/a
128n/a
129n/aclass MacMorse(BaseMorse):
130n/a "Mac specific class to play Morse code"
131n/a
132n/a def __init__(self):
133n/a BaseMorse.__init__(self)
134n/a self.dev = MyAudio()
135n/a self.dev.setoutrate(FRAMERATE)
136n/a self.dev.setsampwidth(SAMPWIDTH)
137n/a self.dev.setnchannels(1)
138n/a self.dev.usercallback = self.usercallback
139n/a sinewave = ''
140n/a n = int(FRAMERATE / BASEFREQ)
141n/a octave = OCTAVE
142n/a from math import sin, pi
143n/a for i in range(n):
144n/a val = int(sin(2 * pi * i * octave / n) * 0x7fff)
145n/a sample = chr((val >> 8) & 255) + chr(val & 255)
146n/a sinewave = sinewave + sample[:SAMPWIDTH]
147n/a self.sinewave = sinewave
148n/a self.silence = '\0' * (n*SAMPWIDTH)
149n/a self.morsequeue = ''
150n/a
151n/a def __del__(self):
152n/a self.close()
153n/a
154n/a def close(self):
155n/a self.dev = None
156n/a
157n/a def pause(self, duration):
158n/a self.dev.writeframes(self.silence * duration)
159n/a
160n/a def noise(self, duration):
161n/a self.dev.writeframes(self.sinewave * duration)
162n/a
163n/a def sendmorse(self, s):
164n/a self.morsequeue = self.morsequeue + s
165n/a self.dev.usercallback()
166n/a self.dev.usercallback()
167n/a self.dev.usercallback()
168n/a
169n/a def usercallback(self):
170n/a if self.morsequeue:
171n/a c, self.morsequeue = self.morsequeue[0], self.morsequeue[1:]
172n/a if c == '.': self.dot()
173n/a elif c == '-': self.dah()
174n/a else: self.pdah()
175n/a self.pdot()
176n/a
177n/a
178n/adef test():
179n/a m = MacMorse()
180n/a while 1:
181n/a try:
182n/a line = raw_input('Morse line: ')
183n/a except (EOFError, KeyboardInterrupt):
184n/a break
185n/a m.send(line)
186n/a while m.morsequeue: pass
187n/a
188n/atest()