I wrote this little hack to convert text into International Morse Code. Apparently sometime in the last 8 years, /dev/audio went away, so it writes to /dev/dsp.
#!/usr/bin/python import sys, string round = lambda afloat: int(afloat + 0.5) #wave = '@[EMAIL PROTECTED]' wave = 'Samuel F. B. Morse\n' emptywave = ' \n' ditlen = 0.0468 # seconds; 0.05 sec is 22.5 wpm, so 53 * ditlen is the time for a word. # 24wpm was the old standard for a "radio certificate for the merchant navy" apparently # and 5wpm is where people start # and 65wpm seems to be about the limit #ditlen = 0.0124 # 90wpm; you can hear why this is difficult #(ditlen, wave, emptywave) = (0.0124, '~\n', '\n') #ditlen = 0.224 # 5wpm # note that this assumes your /dev/dsp is set to ISDN standards bytes_per_sec = 8000 dit = wave * round(ditlen * bytes_per_sec / len(wave)) space = emptywave * round(ditlen * bytes_per_sec / len(emptywave)) dah = dit * 3 letterspace = space * 3 # wordspace gets spaces on each side, so it's really 7 dit-times wordspace = space * 5 morsechart = { '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': '--..', '.': '.-.-.-', ',': '--..-', '?': '..--..', '/': '-..-.', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----', ':': '---...'} soundchart = { '.': dit, '-': dah } def charsound(char): if char == ' ': return wordspace if char in string.ascii_uppercase: return charsound(char.lower()) return space.join([soundchart[item] for item in morsechart[char]]) def strsound(astr): return letterspace.join([charsound(char) for char in astr]) def main(argv): out = file('/dev/dsp', 'w') out.write(strsound(' '.join(argv[1:]) or 'Ken a Tartar entente art. Tar a tent tart. Tar ten.')) if __name__ == '__main__': main(sys.argv) I called the above module 'morse.py', and wrote this little script to find words consisting entirely of alternating dashes and dots: #!/usr/bin/python import morse, sys # Filter to find input words that consist only of alternating dots and # dashes. def is_iambic(word): last_sound = None for char in word: sounds = morse.morsechart.get(char) if sounds is None: return False if '--' in sounds or '..' in sounds: return False if sounds[0] == last_sound: return False last_sound = sounds[-1] return True def main(): while 1: line = sys.stdin.readline() # 'for line in sys.stdin' interactive: bad if not line: return if line.endswith('\n'): line = line[:-1] if is_iambic(line): print line if __name__ == '__main__': main()