Adicionando efeitos sonoros no estilo de filme ao Terminal

9

Quero ter efeitos sonoros no estilo de filme no terminal. Você sabe, quando cada pressionamento de tecla e linha emite um pequeno bipe legal. (Algo assim.) Eu usei o KeyClick , mas isso é apenas para digitação no teclado. Também quero efeitos quando os caracteres são lidos na tela etc.

Eu sei que isso é supérfluo como o inferno. E provavelmente ficarei irritado com isso em cinco minutos. Mas serão gloriosos cinco minutos.

chrismanderson
fonte
4
Não tenho uma resposta para você, mas sua pergunta me deixa louca de rir. Obrigado!
Chris Page
3
Isso não produz efeitos de áudio, mas: você pode achar surpreendentes os efeitos visuais do emulador de terminal Cathode: secretgeometry.com/apps/cathode Talvez você possa sugerir que eles adicionem efeitos de áudio. Seria um bom ajuste.
Chris Page
Você pode tocar um som a cada linha com o bash PROMPT_COMMAND, por exemplo PROMPT_COMMAND="say 'something silly'"(substitua saypela reprodução de áudio da linha de comando de algumas amostras).
Ingmar Hupp
Não posso acreditar que nunca vi Cathode antes. Que aplicativo maravilhosamente incrível e "inútil"! :)
chrismanderson

Respostas:

10

Pergunta divertida :)

Não tenho certeza de como você obteria efeitos sonoros para tudo, mas você poderia fazer algo assim para obter efeitos sonoros para algumas coisas:

1) Abra o seu .profile (ou .bashrc ou onde você quiser manter suas personalizações) abrindo uma janela do terminal e digitando:

open .profile

2) Adicione as seguintes linhas na parte inferior do arquivo:

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) Tente digitar 'ls' para uma lista de diretórios ou 'top' para ver a lista de processos em execução e você ouvirá os resultados desses comandos.

Ao adicionar essas duas linhas, estamos declarando duas novas funções com os mesmos nomes dos comandos bash existentes. Substituímos o próprio comando para poder reproduzir um pouco de áudio e, em seguida, executar o próprio comando (ou vice-versa, como mostrado no exemplo 'top').

Os arquivos de áudio que estou usando atualmente são arquivos de áudio padrão (pelo menos no Lion) usados ​​para recursos de acessibilidade. Eu os escolhi para que você possa colar e ver o truque em ação, mas você pode usar qualquer arquivo de áudio no lugar deles.

Aqui está um site com vários efeitos sonoros de ficção científica que você pode usar no lugar desses que estou emprestando do sistema operacional:

http://fxhome.com/sounds/

Samuel Mikel Bowles
fonte
11
No Snow Leopard, o caminho é /System/Library/Components/CoreAudio.component/Contents/Resources/SystemSounds/accessibility/. Achado agradável pelo caminho; esses são bons sons para usar. Eu gosto do som de Mouse Keys ON.aifpara imprimir texto na tela.
styfle
Obrigado pela informação - ele não estende o som exatamente quando os personagens estão sendo desenhados na tela, mas parece que isso exigiria um ambiente terminal totalmente diferente, em vez de apenas modificar .profile.
chrismanderson
0

Não tenho certeza sobre o bit de pressionamento de tecla ... mas você pode imprimir a saída de um comando do terminal, como nos filmes, ou seja, cada linha é impressa caractere por caractere e emite um pequeno sinal sonoro para cada um. Parece legal inicialmente e depois fica realmente irritante. Seria divertido ter um terminal que você pudesse ligar e desligar. Obviamente bastante limitado, mas poderia ser um projeto divertido de desenvolver.

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
fonte