Beeper

Nombre: Beeper
Autor: Point_to_null (Carlos Marcelo Cabrera)
Origen: Propio
Lenguaje: Python
Licencia: GPL
Propósito: Reproduce sonidos con en altavoz integrado del CPU
Dependencias: python, beep

Código:

#!/usr/bin/env python
#_*_ coding: UTF_8 _*_
import os
import sys

def beep(freq=750, length=200, reps=1, delay=200):
    return os.system("beep -f " + str(freq) + " -l " + str(length) + " -r " + \
        str(reps) + " -d " + str(delay))

def beeps(parametros):
    return os.system("beep" + " -n".join([" -f " + str(par[0]) + " -l "\
        + str(par[1]) + " -d " + str(par[2]) for par in parametros]))

def morse(texto, tempo=50, frecuencia=2278):

    parametros = {
        "." : (frecuencia, tempo, 0),
        "_" : (frecuencia, tempo * 3, 0),
        " " : (1, tempo, 0)
    }

    codigos = {
        "a" : ". _   ",
        "b" : "_ . . .   ",
        "c" : "_ . _ .   ",
        "ch" : "_ _ _ _   ",
        "d" : "_ . .   ",
        "e" : ".   ",
        "f" : ". . _ .   ",
        "g" : "_ _ .   ",
        "h" : ". . . .   ",
        "i" : ". .   ",
        "j" : ". _ _ _   ",
        "k" : "_ . _   ",
        "l" : ". _ . .   ",
        "m" : "_ _   ",
        "n" : "_ .   ",
        "ñ" : "_ _ . _ _   ",
        "o" : "_ _ _   ",
        "p" : ". _ _ .   ",
        "q" : "_ _ . _   ",
        "r" : ". _ .   ",
        "s" : ". . .   ",
        "t" : "_   ",
        "u" : ". . _   ",
        "v" : ". . . _   ",
        "w" : ". _ _   ",
        "x" : "_ . . _   ",
        "y" : "_ . _ _   ",
        "z" : "_ _ . .   ",
        "O" : "_ _ _ _ _   ",
        "1" : ". _ _ _ _   ",
        "2" : ". . _ _ _   ",
        "3" : ". . . _ _   ",
        "4" : ". . . . _   ",
        "5" : ". . . . .   ",
        "6" : "_ . . . .   ",
        "7" : "_ _ . . .   ",
        "8" : "_ _ _ . .   ",
        "9" : "_ _ _ _ .   ",
        "." : ". _ . _ . _   ",
        "," : "_ _ . . _ _   ",
        "?" : ". . _ _ . .   ",
        "¿" : ". . _ _ . .   ",
        "=" : "_ . . . _   ",
        "/" : "_ . . _ .   ",
        "-" : "_ . . . . _   ",
        " " : "     ",
        "\"" : ". _ . . _ .   ",
        "AS" : ". _ . . .   ",
        "AR" : ". _ . _ .   ",
        "K" : ". _ . _ .   ",
        "KN" : "_ . _ _ .   ",
        "VA" : ". . . _ . _   ",
        "SN" : ". . . _ .   ",
        "R" : ". _ .   ",
        "EE" : "_ _ _ _ _ _ _ _   "
    }

    texto = texto.lower()

    for caracter in texto:
        if not caracter in codigos:
            caracter = "EE"
        beeps([parametros[sonido] for sonido in \
            [codigo for codigo in codigos[caracter]]])

def whistle(texto, tempo=100):
    for caracter in texto:
        beep((((ord(caracter) % 255) * 10000)) / 255 + 1, tempo)

if __name__ == "__main__":
    ordenes = {
        "morse" : morse,
        "whistle" : whistle,
        }

    if len(sys.argv) == 2:
        if sys.argv[1] in ordenes:
            orden = ordenes[sys.argv[1]]
        else:
            sys.exit(2)
        while True:
            try:
                entrada = raw_input()
            except EOFError:
                break
            else:
                orden(entrada)
    else:
        sys.exit(1)

Ejemplos de uso:
Lee los parámetros de la entrada estándar.

deimos@Milva:pts/1 echo hola mundo|beeper morse
deimos@Milva:pts/1 echo hola mundo|beeper whistle
deimos@Milva:pts/1 beeper morse
ahora lee mientras escribo
podemos escuchar el codigo morse cada vez que presionamos enter
sos
salgo con C-D

O podemos incluirlo en nuestro programas python muy fácilmente.

#!/usr/bin/env python
#_*_ coding: UTF_8 _*_
import beeper

def funcionlenta():
    hago algo aburrido y muy lento
    return """una salida a modo de texto"""

if __name__ == "__main__":
    resultado = funcionlenta()
    whistle(resultado, 10)

Comentarios:
Es, sobre todo, un modulo para python. Aunque puede ser utilizado como programa final.. Por ahora carece de ayuda y no están disponibles todas las posibilidades del modulo cuando se lo usa como ejecutable per se.