Bagaimana saya bisa memainkan suara ketika eksekusi skrip siap?

44

Saya mengeksekusi setiap sekarang dan kemudian beberapa skrip python yang membutuhkan waktu cukup lama untuk dieksekusi.

Saya mengeksekusi mereka seperti ini: $ time python MyScript.py

Bagaimana saya bisa memainkan suara begitu eksekusi skrip dilakukan?

Saya menggunakan Ubuntu 10.10 (Gnome desktop).

Martin Thoma
sumber
Apakah Anda menggunakan bashatau zsh? Sebenarnya ada beberapa cara untuk membuat ini terjadi secara otomatis, tetapi mereka cukup terlibat dan bergantung pada shell yang Anda gunakan.
Mikel
$ echo $ SHELL mengembalikan "/ bin / bash"
Martin Thoma

Jawaban:

39

Tambahkan perintah apa pun yang memainkan suara; ini bisa sesederhana

$ time mycommand; printf '\7'

atau serumit

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

(Perintah menganggap pulseaudio diinstal; ganti pemutar suara Anda, yang akan tergantung pada lingkungan desktop Anda.)

geekosaurus
sumber
6
+1 paplaymungkin adalah perintah terbaik untuk digunakan untuk memutar suara pada sistem Linux "modern".
Mikel
4
printf '\ 7' tidak berfungsi untuk saya, tetapi perintah ini bekerja seperti yang saya inginkantime 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'bekerja untuk saya (paplay tidak; (git shell)) tapi itu hanya bip yang sangat kecil . Apakah ada lebih banyak kode yang menghasilkan suara lain? Saya mencoba \6, \8tetapi mereka beberapa karakter.
laggingreflex
2
@ laggingreflex Tidak, \7(BEL) biasanya satu-satunya karakter yang mungkin memicu suara (lihat artikel Wikipedia karakter Kontrol ); Perhatikan bahwa itu mungkin tidak selalu membuat suara.
musiphil
3
@laggingreflex Anda mungkin tidak membutuhkan ini lagi tetapi hanya untuk tertawa;)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'

Infinite loop dengan -wjika Anda memerlukan motivasi ekstra:

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

Pra-instal pada 14.04 melalui paket speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifestasi untuk orang buta, saya kira?

Tambahkan juga popup

Combo ini adalah penyelamat ( bkepanjangan dari beep):

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

lalu:

super-slow-command;b

Jika saya berada di suatu tempat di dalam ruangan, saya akan mendengarnya dan tahu bahwa pekerjaan yang panjang telah selesai.

Kalau tidak, saya akan melihat popup ketika saya kembali ke komputer saya.

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
Untuk mendapatkan spd-sayalat yang terkait speech-dispatcher, Anda mungkin perlu menginstal subpackage seperti speech-dispatcher-utils(Fedora 24).
dfarrell07
9

Pilih saja suara di hard drive Anda, dan letakkan perintah untuk memutarnya tepat setelah perintah yang Anda tunggu; mereka akan terjadi secara berurutan:

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

(Anda dapat menggunakan pemain mana saja, secara alami). Saya memiliki skrip yang dipanggil alertdoneyang memainkan nada dan menampilkan peringatan libnotify saat dijalankan; Saya menggunakannya tepat untuk kesempatan ini:

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

Ini benar-benar sederhana, jadi jika Anda ingin membuat sendiri Anda dapat mendasarkan pada ini (saya membutuhkan notify-more, mplayerdan ~/tones/alert_1.wavmeskipun):

#!/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
Michael Mrozek
sumber
2
notify-moreatau notify-sendmemang bisa menjadi alternatif yang berguna untuk memainkan suara.
Mikel
@Mikel Saya benar-benar kecanduan libnotify; semua yang ada di sistem saya muncul pemberitahuan
Michael Mrozek
8
time python MyScript.py; play /path/so/sound.ogg

playadalah pemutar suara yang sangat mendasar (tanpa UI) dari sox Install sox http://bit.ly/software-small package. Anda dapat menggantinya dengan pemutar suara yang digerakkan oleh baris perintah lainnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Yap, play, aplay, atau paplay. (Sistem Ubuntu saya memiliki aplaydan paplaysecara default.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggberhasil, terima kasih.
Martin Thoma
5

Secara pribadi, saya menggunakan my-script && notify-send "done". Ini mengirimkan pemberitahuan desktop, yang pada Linux Mint (Cinnamon) terlihat seperti ini:

masukkan deskripsi gambar di sini

eeze
sumber
3

Anda juga dapat membuat ini terjadi secara otomatis.

Saya akan menunjukkan caranya zsh, kemudian menambahkan info tentang bash.

Esensinya terlihat seperti ini:

preexec()
{
    starttime=$SECONDS
}

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

Anda juga dapat membuatnya hanya melakukannya jika programnya adalah Python, mis

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
}

Di bash, cara terbaik adalah dengan mengunduh preexec.bash.txt dan sumbernya (misalnya . ~/preexec.bash.txtdi bagian atas Anda ~/.bashrc, maka yang di atas (atau sesuatu yang dekat dengan itu) harus bekerja. (Tidak yakin tentang $3bit untuk memeriksa apakah perintahnya adalah Python .)

Jika Anda menggunakan Terminal GNOME, saya juga akan mengarahkan Anda ke Terminal GNing Flashing . Ini adalah tambalan yang saya tulis yang membuat terminal berkedip ketika sebuah perintah selesai, sehingga Anda dapat Alt-Tab untuk sesuatu yang lain, maka itu memberi tahu Anda saat itu selesai.

Mikel
sumber
1

Anda tidak perlu menambahkan perintah ke semuanya, Anda sebenarnya dapat menggunakan skrip, yang melakukan ini secara otomatis untuk Anda. Ini disebut undistract-me dan tersedia di Github.

contoh

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

sekarang mulai bash baru dan Anda siap. Suara dan peringatan dapat diubah dengan memodifikasi skrip.

Jakub Lucký
sumber
-1

Setiap pemain bisa digunakan. Saya menambahkan cvlcuntuk kelengkapan.

nponeccop
sumber