Jak mogę odtworzyć dźwięk, gdy wykonanie skryptu jest gotowe?

44

Od czasu do czasu wykonuję niektóre skrypty Pythona, których wykonanie zajmuje dużo czasu.

Wykonuję je w następujący sposób: $ time python MyScript.py

Jak mogę odtworzyć dźwięk po zakończeniu wykonywania skryptu?

Używam Ubuntu 10.10 (pulpit Gnome).

Martin Thoma
źródło
Używasz bashlub zsh? Istnieje kilka sposobów, aby to zrobić automatycznie, ale są one dość zaangażowane i zależą od używanej powłoki.
Mikel
$ echo $ SHELL zwraca „/ bin / bash”
Martin Thoma

Odpowiedzi:

39

Dołącz dowolne polecenie odtwarzające dźwięk; może to być tak proste jak

$ time mycommand; printf '\7'

lub tak złożone jak

$ time mycommand && paplay itworked.ogg || paplay bombed.ogg

(Polecenia zakładają, że pulseaudio jest zainstalowane; zamień odtwarzacz dźwięku, który będzie zależał od środowiska pulpitu).

geekozaur
źródło
6
+1 paplayjest prawdopodobnie najlepszym poleceniem do odtwarzania dźwięku w „nowoczesnym” systemie Linux.
Mikel
4
printf '\ 7' nie działa dla mnie, ale to polecenie działało tak, jak chciałemtime python MyScript.py -n 40 && paplay /usr/share/sounds/ubuntu/stereo/desktop-login.ogg || paplay /usr/share/sounds/ubuntu/stereo/phone-outgoing-busy.ogg
Martin Thoma
printf '\7'działa dla mnie (paplay nie; (git shell)), ale to tylko bardzo mały bip . Czy jest więcej kodów, które wydają inne dźwięki? Próbowałem \6, \8ale to niektóre postacie.
laggingreflex
2
@laggingreflex Nie, \7(BEL) jest zwykle jedyną postacią, która może wywołać dźwięk (patrz artykuł w Wikipedii Znak kontrolny ); należy pamiętać, że nie zawsze może to również wydawać dźwięki.
musiphil
3
@laggingreflex Prawdopodobnie już tego nie potrzebujesz, ale tylko dla śmiechu;)for i in {1..30}; do for j in {1..3}; do printf '\7'; sleep 0.12; done; sleep 0.4; done
cprn
16

spd-say

sleep 2; spd-say 'get back to work'

Nieskończona pętla, -wjeśli potrzebujesz dodatkowej motywacji:

sleep 2; while true; do spd-say -w 'get back to work'; done

Zainstalowany fabrycznie 14.04 za pośrednictwem pakietu speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest dla niewidomych?

Dodaj także wyskakujące okienko

Ta kombinacja ratuje życie ( boznacza beep):

b() ( spd-say 'done'; zenity --info --text "$(date);$(pwd)" & )

i wtedy:

super-slow-command;b

Jeśli jestem gdzieś w pokoju, usłyszę to i będę wiedział, że długa robota jest skończona.

W przeciwnym razie wyświetlę wyskakujące okienko po powrocie do komputera.

Powiązane: https://stackoverflow.com/questions/7035/how-to-show-a-gui-message-box-from-a-bash-script-in-linux

Ciro Santilli
źródło
Aby uzyskać spd-saypowiązanie z narzędziem speech-dispatcher, może być konieczne zainstalowanie podobnego pakietu speech-dispatcher-utils(Fedora 24).
dfarrell07
9

Po prostu wybierz dźwięk na dysku twardym i wprowadź polecenie, aby odtworzyć go zaraz po poleceniu, na które czekasz; będą się pojawiać sekwencyjnie:

$ time python MyScript.py; mplayer ~/ScriptDone.wav

(Możesz oczywiście użyć dowolnego odtwarzacza). Mam skrypt o nazwie, alertdonektóry gra dźwięk i wyświetla alert libnotify po uruchomieniu; Używam go właśnie na tę okazję:

$ time python MyScript.py; alertdone "Done timing"

To naprawdę proste, więc jeśli chcesz zrobić własną można oprzeć go na to (kopalnia wymaga notify-more, mplayeri ~/tones/alert_1.wavchociaż):

#!/bin/bash
message=${1:-"Finished working"}
notify-more -t 10000 -i /usr/share/icons/gnome/32x32/actions/insert-object.png "Process Finished" "$message"
mplayer ~/tones/alert_1.wav
Michał Mrożek
źródło
2
notify-morelub notify-sendmoże rzeczywiście być użyteczną alternatywą dla odtwarzania dźwięku.
Mikel
@Mikel Jestem całkowicie uzależniony od libnotify; wszystko w moim systemie wyskakuje powiadomienie
Michał Mrożek
8
time python MyScript.py; play /path/so/sound.ogg

playjest bardzo prostym (bez interfejsu użytkownika) odtwarzaczem dźwięku z pakietu sox Install sox http://bit.ly/software-small . Możesz go zastąpić dowolnym innym odtwarzaczem dźwięku uruchamianym z wiersza poleceń.

Gilles „SO- przestań być zły”
źródło
Tak, play, aplay, lub paplay. (Mój system Ubuntu ma aplayi paplaydomyślnie.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggpracował, dzięki.
Martin Thoma,
5

Osobiście używam my-script && notify-send "done". To wysyła powiadomienie na pulpicie, które w Linux Mint (Cinnamon) wygląda następująco:

wprowadź opis zdjęcia tutaj

eeze
źródło
3

Możesz to również zrobić automatycznie.

Pokażę ci, jak wejść zsh, a następnie dodaj informacje o bash.

Esencja wygląda następująco:

preexec()
{
    starttime=$SECONDS
}

precmd()
{
    if ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

Możesz także zrobić to tylko wtedy, gdy programem był Python, np

preexec()
{
    starttime=$SECONDS
    case $3 in python*)
        command_is_python=true;;
    *)
        command_is_python=false;;
    esac
}

precmd()
{
    if $command_is_python && ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

W bashnajlepszym sposobem jest pobranie preexec.bash.txt i źródło to (np . ~/preexec.bash.txtna górze ~/.bashrc, a następnie powyżej (lub coś podobnego do niego) powinno działać. (Nie wiem, o $3nieco, aby sprawdzić, czy polecenie jest Python .)

Jeśli używasz GNOME Terminal, chciałbym również wskazać Flashing Terminal GNOME . Jest to łatka, którą napisałem, która powoduje, że terminal miga po wykonaniu polecenia, więc możesz Alt-Tab do czegoś innego, a następnie informuje, kiedy jest zrobione.

Mikel
źródło
1

Nie musisz dodawać polecenia do wszystkiego, możesz faktycznie użyć skryptu, który zrobi to automatycznie. Nazywa się to mnie rozpraszać i jest dostępne na Github.

przykład

sudo apt install undistract-me    #installs the script (on Debian)
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc #adds auto-enable to your console
echo 'export LONG_RUNNING_COMMAND_TIMEOUT=XXX' >> ~/.bashrc #where XXX is number of seconds when the command is long enough to alert you
echo 'export UDM_PLAY_SOUND=1' >> ~/.bashrc #to enable sound alert

teraz rozpocznij nowy bash i jesteś gotowy. Dźwięk i alarm można zmienić, modyfikując skrypt.

Jakub Lucký
źródło
-1

Można użyć dowolnego gracza. Dodam cvlcdla kompletności.

nponeccop
źródło