]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/morse.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Demo / scripts / morse.py
CommitLineData
4710c53d 1#! /usr/bin/env python\r
2\r
3# DAH should be three DOTs.\r
4# Space between DOTs and DAHs should be one DOT.\r
5# Space between two letters should be one DAH.\r
6# Space between two words should be DOT DAH DAH.\r
7\r
8import sys, math, audiodev\r
9\r
10DOT = 30\r
11DAH = 3 * DOT\r
12OCTAVE = 2 # 1 == 441 Hz, 2 == 882 Hz, ...\r
13\r
14morsetab = {\r
15 'A': '.-', 'a': '.-',\r
16 'B': '-...', 'b': '-...',\r
17 'C': '-.-.', 'c': '-.-.',\r
18 'D': '-..', 'd': '-..',\r
19 'E': '.', 'e': '.',\r
20 'F': '..-.', 'f': '..-.',\r
21 'G': '--.', 'g': '--.',\r
22 'H': '....', 'h': '....',\r
23 'I': '..', 'i': '..',\r
24 'J': '.---', 'j': '.---',\r
25 'K': '-.-', 'k': '-.-',\r
26 'L': '.-..', 'l': '.-..',\r
27 'M': '--', 'm': '--',\r
28 'N': '-.', 'n': '-.',\r
29 'O': '---', 'o': '---',\r
30 'P': '.--.', 'p': '.--.',\r
31 'Q': '--.-', 'q': '--.-',\r
32 'R': '.-.', 'r': '.-.',\r
33 'S': '...', 's': '...',\r
34 'T': '-', 't': '-',\r
35 'U': '..-', 'u': '..-',\r
36 'V': '...-', 'v': '...-',\r
37 'W': '.--', 'w': '.--',\r
38 'X': '-..-', 'x': '-..-',\r
39 'Y': '-.--', 'y': '-.--',\r
40 'Z': '--..', 'z': '--..',\r
41 '0': '-----', ',': '--..--',\r
42 '1': '.----', '.': '.-.-.-',\r
43 '2': '..---', '?': '..--..',\r
44 '3': '...--', ';': '-.-.-.',\r
45 '4': '....-', ':': '---...',\r
46 '5': '.....', "'": '.----.',\r
47 '6': '-....', '-': '-....-',\r
48 '7': '--...', '/': '-..-.',\r
49 '8': '---..', '(': '-.--.-',\r
50 '9': '----.', ')': '-.--.-',\r
51 ' ': ' ', '_': '..--.-',\r
52}\r
53\r
54nowave = '\0' * 200\r
55\r
56# If we play at 44.1 kHz (which we do), then if we produce one sine\r
57# wave in 100 samples, we get a tone of 441 Hz. If we produce two\r
58# sine waves in these 100 samples, we get a tone of 882 Hz. 882 Hz\r
59# appears to be a nice one for playing morse code.\r
60def mkwave(octave):\r
61 sinewave = ''\r
62 for i in range(100):\r
63 val = int(math.sin(math.pi * i * octave / 50.0) * 30000)\r
64 sinewave += chr((val >> 8) & 255) + chr(val & 255)\r
65 return sinewave\r
66\r
67defaultwave = mkwave(OCTAVE)\r
68\r
69def main():\r
70 import getopt\r
71 try:\r
72 opts, args = getopt.getopt(sys.argv[1:], 'o:p:')\r
73 except getopt.error:\r
74 sys.stderr.write('Usage ' + sys.argv[0] +\r
75 ' [ -o outfile ] [ -p octave ] [ words ] ...\n')\r
76 sys.exit(1)\r
77 dev = None\r
78 wave = defaultwave\r
79 for o, a in opts:\r
80 if o == '-o':\r
81 import aifc\r
82 dev = aifc.open(a, 'w')\r
83 dev.setframerate(44100)\r
84 dev.setsampwidth(2)\r
85 dev.setnchannels(1)\r
86 if o == '-p':\r
87 wave = mkwave(int(a))\r
88 if not dev:\r
89 import audiodev\r
90 dev = audiodev.AudioDev()\r
91 dev.setoutrate(44100)\r
92 dev.setsampwidth(2)\r
93 dev.setnchannels(1)\r
94 dev.close = dev.stop\r
95 dev.writeframesraw = dev.writeframes\r
96 if args:\r
97 source = [' '.join(args)]\r
98 else:\r
99 source = iter(sys.stdin.readline, '')\r
100 for line in source:\r
101 mline = morse(line)\r
102 play(mline, dev, wave)\r
103 if hasattr(dev, 'wait'):\r
104 dev.wait()\r
105 dev.close()\r
106\r
107# Convert a string to morse code with \001 between the characters in\r
108# the string.\r
109def morse(line):\r
110 res = ''\r
111 for c in line:\r
112 try:\r
113 res += morsetab[c] + '\001'\r
114 except KeyError:\r
115 pass\r
116 return res\r
117\r
118# Play a line of morse code.\r
119def play(line, dev, wave):\r
120 for c in line:\r
121 if c == '.':\r
122 sine(dev, DOT, wave)\r
123 elif c == '-':\r
124 sine(dev, DAH, wave)\r
125 else: # space\r
126 pause(dev, DAH + DOT)\r
127 pause(dev, DOT)\r
128\r
129def sine(dev, length, wave):\r
130 for i in range(length):\r
131 dev.writeframesraw(wave)\r
132\r
133def pause(dev, length):\r
134 for i in range(length):\r
135 dev.writeframesraw(nowave)\r
136\r
137if __name__ == '__main__':\r
138 main()\r