Dodawanie efektów dźwiękowych w stylu filmowym do terminala

9

Chcę mieć efekty dźwiękowe w stylu filmowym w terminalu. Wiesz, kiedy każde naciśnięcie klawisza i linia wydaje chłodny dźwięk. (Coś w tym stylu.) Użyłem KeyClick , ale to tylko do pisania na klawiaturze. Chcę także efektów, gdy znaki są odczytywane na ekranie itp.

Wiem, że to jest zbędne jak diabli. I prawdopodobnie zirytuje mnie to w ciągu pięciu minut. Ale to będzie chwalebne pięć minut.

chrismanderson
źródło
4
Nie mam dla ciebie odpowiedzi, ale twoje pytanie mnie rozśmieszyło. Dzięki!
Chris Page
3
To nie robi efektów dźwiękowych, ale: może się okazać, że niesamowite efekty wizualne emulatora terminalu katodowego są zabawne: secretgeometry.com/apps/cathode Być może sugerujesz dodanie efektów dźwiękowych. Byłoby dobrze dopasowane.
Chris Page
Możesz odtwarzać dźwięk w każdej linii za pomocą bash'a PROMPT_COMMAND, np. PROMPT_COMMAND="say 'something silly'"(Zastąp sayniektóre wiersze odtwarzaniem dźwięku)
Ingmar Hupp,
Nie mogę uwierzyć, że nigdy wcześniej nie widziałem Cathode. Cóż za cudownie niesamowita, ale „bezużyteczna” aplikacja! :)
chrismanderson

Odpowiedzi:

10

Zabawne pytanie :)

Nie jestem pewien, jak uzyskasz efekty dźwiękowe dla wszystkiego, ale możesz zrobić coś takiego, aby uzyskać efekty dźwiękowe dla kilku rzeczy:

1) Otwórz otwórz .profile (lub .bashrc lub gdziekolwiek chcesz zachować swoje dostosowania), otwierając okno terminala i wpisując:

open .profile

2) Dodaj kilka następujących wierszy na dole pliku:

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) Spróbuj wpisać „ls”, aby wyświetlić listę katalogów lub „top”, aby wyświetlić listę uruchomionych procesów, a usłyszysz wyniki tych poleceń.

Dodając te dwa wiersze, deklarujemy dwie nowe funkcje o takich samych nazwach, jak istniejące komendy bash. Zastępujemy samą komendę, abyśmy mogli odtworzyć trochę dźwięku, a następnie uruchomić samą komendę (lub odwrotnie, jak pokazano w przykładzie „na górze”).

Pliki audio, których obecnie używam, są domyślnymi plikami audio (przynajmniej w Lionie), które są używane do funkcji ułatwień dostępu. Wybrałem je, abyś mógł wyciąć i wkleić, i zobaczyć sztuczkę w akcji, ale zamiast nich możesz użyć dowolnego pliku audio.

Oto strona z mnóstwem efektów dźwiękowych science fiction, których możesz użyć zamiast tych, które pożyczam z systemu operacyjnego:

http://fxhome.com/sounds/

Samuel Mikel Bowles
źródło
1
W Snow Leopard ścieżka jest /System/Library/Components/CoreAudio.component/Contents/Resources/SystemSounds/accessibility/. Przy okazji, fajne znalezisko; to są dobre dźwięki do użycia. Podoba mi się dźwięk Mouse Keys ON.aifdrukowania tekstu na ekranie.
styfle 18.09.11
Dzięki za informację - nie rozciąga dźwięku do momentu, gdy znaki są rysowane na ekranie, ale wygląda na to, że wymagałoby to zupełnie innego środowiska terminalowego, niż tylko modowania .profile.
chrismanderson
0

Nie jestem pewien co do naciśnięcia klawisza ... ale możesz go wypisać na wyjściu polecenia terminala, jak w filmach, tzn. Każda linia jest drukowana znak po znaku i odtwarza dla każdego z nich krótki dźwięk. Na początku wygląda fajnie, a potem robi się naprawdę denerwująca. Byłoby fajnie mieć terminal, który można włączać i wyłączać. Oczywiście dość ograniczony, ale może być zabawnym projektem do opracowania.

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!")
rekrut
źródło