Agregar efectos de sonido de estilo de película a la Terminal

9

Quiero tener efectos de sonido de estilo de película en el terminal. Ya sabes, cuando cada tecla y línea emite un pequeño pitido. (Algo así.) He usado KeyClick , pero eso es solo para escribir con el teclado. También quiero efectos cuando los personajes se leen en la pantalla, etc.

Sé que esto es superflous como el infierno. Y probablemente me moleste en cinco minutos. Pero serán unos gloriosos cinco minutos.

Chrismanderson
fuente
44
No tengo una respuesta para ti, pero tu pregunta me hizo reír. ¡Gracias!
Chris Page
3
Esto no tiene efectos de audio, pero: puede encontrar los sorprendentes efectos visuales del emulador de terminal Cathode divertidos: secretgeometry.com/apps/cathode Quizás podría sugerir que agreguen efectos de audio. Sería un buen ajuste.
Chris Page
Puede reproducir un sonido cada línea con bash PROMPT_COMMAND, por ejemplo PROMPT_COMMAND="say 'something silly'"(reemplazar saycon la reproducción de audio de la línea de comandos de algunas muestras).
Ingmar Hupp
No puedo creer que nunca haya visto Cathode antes. ¡Qué aplicación tan maravillosa e inútil! :)
chrismanderson

Respuestas:

10

Pregunta divertida :)

No estoy seguro de cómo obtendría efectos de sonido para todo, pero podría hacer algo como esto para obtener efectos de sonido para algunas cosas:

1) Abra abra su .profile (o .bashrc o donde quiera mantener sus personalizaciones) abriendo una ventana de terminal y escribiendo:

open .profile

2) Agregue las siguientes líneas al final del archivo:

function top() { afplay /System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/accessibility/Sticky\ Keys\ ON.aif; command top;}
function ls() { command ls; afplay /System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/accessibility/Slow\ Keys\,\ Key\ Registered.aif; }

3) Intente escribir 'ls' para una lista de directorios o 'top' para ver la lista de procesos en ejecución y podrá escuchar los resultados de estos comandos.

Al agregar estas dos líneas estamos declarando dos nuevas funciones con los mismos nombres que los comandos bash existentes. Anulamos el comando en sí para poder reproducir un poco de audio y luego ejecutar el comando en sí (o viceversa, como se muestra en el ejemplo 'superior').

Los archivos de audio que estoy usando actualmente son archivos de audio predeterminados (al menos en Lion) que se usan para las funciones de accesibilidad. Elegí estos para que pudieras cortar y pegar, y ver el truco en acción, pero podrías usar cualquier archivo de audio en lugar de estos.

Aquí hay un sitio con un montón de efectos de sonido de ciencia ficción que podría usar en lugar de estos que estoy tomando prestado del sistema operativo:

http://fxhome.com/sounds/

Samuel Mikel Bowles
fuente
1
En Snow Leopard, el camino es /System/Library/Components/CoreAudio.component/Contents/Resources/SystemSounds/accessibility/. Bonito hallazgo por cierto; esos son buenos sonidos para usar. Me gusta el sonido de Mouse Keys ON.aifimprimir texto en la pantalla.
Styfle
Gracias por la información: no amplía el sonido cuando los personajes se dibujan en la pantalla, pero parece que requeriría un entorno de terminal completamente diferente, en lugar de solo modificar .profile.
chrismanderson
0

No estoy seguro sobre el bit de pulsación de tecla ... pero podría hacer que imprima la salida de un comando de terminal como en las películas, es decir, cada línea se imprime carácter por carácter y reproduce un pequeño pitido para cada una. Parece genial inicialmente y luego se vuelve realmente molesto. Sería divertido tener un terminal en el que pudieras encenderlo y apagarlo. Obviamente bastante limitado, pero podría ser un proyecto divertido de desarrollar.

from subprocess import PIPE, Popen
import os

from time import *
import sys
from playsound import playsound

def print_immediately(string):
    sys.stdout.write(string)
    sys.stdout.flush()

def backspace():
    print('\r', end='')

def printline(x, silent=False):
    n = len(x)
    for i in range(n):
        print_immediately(x[:(i+1)])
        if not silent:
            beep()
        sleep(0.01)
        backspace()
    sys.stdout.write('\n')
    sys.stdout.flush()

def printlines(x, silent=False):
    result = str(x.decode("utf-8"))
    lines = str.split(result, "\n")
    for line in lines:
        printline(line, silent=False)

def beep():
    playsound('/Users/Blah/Projects/console/beep.wav', block=False)

def cmdline(command):
    process = Popen(
        args=command,
        stdout=PIPE,
        shell=True
    )
    return process.communicate()[0]

while True:
    command = input("user: ")
    if(command == 'exit'):
        break
    else:
        try:
            if command.find("cd ") != -1:
                dir = command.replace("cd ", "")
                os.chdir(os.path.expanduser(dir))
                print(dir)
            else:
                printlines(cmdline(command))
        except:
           print("Error!")
novato
fuente