Bir terminal aracılığıyla uzun bir süreç başlattım. İşlem tamamlandığında Ubuntu terminalinin ses çıkarması mümkün müdür? Bu şekilde kontrol etmeye devam etmeme gerek yok, bunun yerine ses aracılığıyla bilgilendirileceksiniz.
Bir terminal aracılığıyla uzun bir süreç başlattım. İşlem tamamlandığında Ubuntu terminalinin ses çıkarması mümkün müdür? Bu şekilde kontrol etmeye devam etmeme gerek yok, bunun yerine ses aracılığıyla bilgilendirileceksiniz.
Yanıtlar:
Sulama komutunu betiğinizin sonuna getirerek, uzun işleminiz için çağırabileceğiniz en az üç komut satırı yolu vardır:
Ses çalmanın "klasik" yolu PC hoparlörleri üzerinden bip sesi kullanmaktır . Ancak bu her durumda işe yaramayacaktır (örn. Sistemimdeki PC hoparlörlerim tamamen devre dışıdır) ve pscpkr'yi çekirdek modülünden çıkarmanız /etc/modprobe/blacklist.conf
ve pcspkr
çekirdek modülünü yüklemeniz gerekir .
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Ayrıca aplay kullanarak herhangi bir ses dosyasını wav formatında çalabiliriz (varsayılan olarak yüklenir):
aplay /usr/share/sounds/alsa/Side_Right.wav
Başka bir yol da, sisteminizde (in libsndfile
) varsayılan ses çıkışında tanıdığı ses dosyalarının oynatılmasını sağlamak için pulseaudio komut satırı arayüzünü kullanmaktır :
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Varsayılan ses dosyalarını /usr/share/sounds/
veya farklı bir konumdaki diğer ses dosyalarını kullanabiliriz .
Sadece bahsetmiş olmak gerekirse , Ubuntu <= 12.04 içine varsayılan olarak yüklenen espeak'i yanlış kullanarak bunu başarmanın başka bir güzel yolu var . Aşağıdaki örneği görün veya duyun:
#! /bin/bash
c=10; while [ $c -ge 0 ]; do espeak $c; let c--; done; sleep 1 ## here lengthy code
espeak "We are done with counting"
Ubuntu'da> = 12.10 Orca speak-dispatcher kullanıyor. Daha sonra espeak'i kurabilir veya alternatif olarak kullanabilirsiniz spd-say "Text"
.
spd-say
.
spd-say
programı varsayılan olarak yüklenir ve sistemimde çalışır.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
kullanırım
make; spd-say done
Kullandığınız uzun süren komutla "make" ifadesini değiştirin.
spd-say 'get back to work
'. Ve önceden yüklenmiş olarak geliyor: releases.ubuntu.com/trusty/… , sanırım kör insanlar için? Ve -w
sonsuz döngüler için: while true; do spd-say -w 'get back to work you lazy bum'; done
.
Komut bittikten sonra bir ses çalmak için:
long-running-command; sn3
( sn3
ses numarası 3 nerede ) şunu içine koy .bashrc
:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Veya daha fazla seçenek için aşağıyı okuyun:
İşte tam olarak ne istediğin için kullandığım şey - tek bir farkla: sadece komut bittiğinde bir ses çalmıyor , başarıda ve hatada farklı bir ses çalıyor . (Ama sevmediysen değiştirebilirsin.)
oks
Uzun süren komutların sonunda kullandığım denilen Bash işlevim var :
make && make test && make install; oks
Bir ses çalar ve önceki komut tamamlandığında OK veya ERROR (hata koduyla) görüntüler.
İşte iki yardımcı ile bu işlev:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
soundbg() {
# plays all sounds at the same time in the background
for s in $@; do
# you may need to change 0 to 1 or something else:
pacmd play-file $s 0 >/dev/null
done
}
oks() {
# like ok but with sounds
s=$?
sound_ok=/usr/share/sounds/ubuntu/stereo/dialog-information.ogg
sound_error=/usr/share/sounds/ubuntu/stereo/dialog-warning.ogg
if [[ $s = 0 ]]; then
echo OK
soundbg $sound_ok
else
echo ERROR: $s
soundbg $sound_error
fi
}
Bunu doğrudan ~ / .bashrc dosyasına koyabilir veya başka bir dosyaya koyabilir ve ardından bu satırı ~ / .bashrc dosyasına koyabilirsiniz:
. ~/path/to/file/with/function
Değiştir sound_ok
ve sound_error
diğer bazı seslere
Sen deneyebilirsiniz sound
vs. soundbg
ve değişim sound_ok
ve sound_error
istediğiniz sonucu almak ister birçok seslerin dizileri kullanmak.
Sisteminizde bazı iyi sesler bulmak için deneyebilirsiniz:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Varsayılan olarak Ubuntu'da mevcut olan ve varsayılan olarak bildirimler için uygun olan bazı sesler var - sn1 çok gürültülü ve güzel, sn2 çok yüksek ve hala çok güzel, sn3 çok yüksek ve çok hoş değil:
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Yine, değiştirebilir sound
için soundbg
ses (eğer sesler çok oynarken mesela senaryolarınızı yavaşlatmak değil) bitirmek için beklemeden arka planda oynamak istiyorum.
Ve sadece durumda - işte oks
sesler ile aynı fonksiyonlar :
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
İşte nasıl kullandığınız:
Başarı ile Örnek:
ls / && ls /bin && ls /usr; oks
hata ile örnek:
ls / && ls /bim && ls /usr; oks
Elbette pratikte komutlar daha çok benziyor:
make && make test && make install; oks
ama ben ls
nasıl kullanılacağını hızlıca görebilmek için kullandım .
Sessiz bir sürüm ok
yerine kullanabilirsiniz oks
.
Veya örneğin kullanabilirsiniz:
ls / && ls /bim && ls /usr; ok; sn1
OK / ERROR yazdırmak ancak her zaman aynı sesi çalmak vb.
Bu işlevleri GitHub'a koydum, bkz:
Kaynak şu adresten indirilebilir:
soundloop
Yukarıdaki depoya bir fonksiyon ekledim . Bir ses çalar ve yorumlarda shadiwhile true; do paplay file.ogg; done
tarafından istendiği gibi Ctrl + C ( çalışmayı beklediğinden daha basit ama aksine) kesilebilir . Olarak uygulanır:
soundloop() {
set +m
a=`date +%s`
{ paplay $1 & } 2>/dev/null
wait
b=`date +%s`
d=$(($b-$a))
[ $d -eq 0 ] && d=1
while :; do
pacmd play-file $1 0 >/dev/null
sleep $d
done
}
Karmaşık olduğunu düşünüyorsanız, lütfen şikayetlerinizi PulseAudio geliştiricilerine iletin.
while true; do paplay ...; done
, sesimi vuruncaya kadar tekrar edecek şekilde yerleştirmeye çalıştım Ctrl+C
, ancak yaptığımda, bozulmuyor. Bunun man paplay
nasıl işe yarayacağını bulmak için özel bir seçenek bulamıyorum . Herhangi bir fikir?
Göre bu\a
karakter bilgisayarın bip olan ASCII kodu 7, kaçar.
Bu yüzden echo $'\a'
yerel makinemde bir bip sesi çıkarmaya çalışıyor, bilgisayarda çalışan bir bash kabuğunda çalıştırılsa bile, PuTTY gibi bir terminal arayüzü üzerinden bağlanıyorum.
Michael Curries'in cevabını genişleterek, Bash'in aşağıdakileri yoluyla BEL
( \a
) karakterini basmasını sağlayabilirsiniz PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
PROMPT_COMMAND
Bu şekilde ayarlamak Bash'in printf \\a
her komutun sonunda çalışmasını sağlar, bu da terminalin sesini çalmasını sağlar (muru'nun işaret ettiği gibi, sadece istemin yeniden çekilmesini tetiklemek terminalin sesini çalmasını sağlar, yani ses çalınır) her seferinde yeni bir bilgi istemi yapılır, örneğin sadece vurulduğunda bile ENTER).
Bu bir terminal özelliğidir, bu nedenle tüm terminallerde çalışmayabilir; örneğin konsolda çalışmıyor (ama çalıştığından eminim gnome-terminal
ve xterm
).
Komuta
speaker-test
bir ses çıkarır. En basit ama can sıkıcı bir çözüm. :-)
Gürültü sinyalini yapılandırma seçenekleri için kılavuzunaspeaker-test(1)
bakın .
command && (say done ; echo done) || (echo error ; say error)
Örnek 1: echo alik && (say done ; echo done) || (echo error ; say error)
biten bir kelimeyle sonuçlanacaktır.
Örnek 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
bir hata kelimesiyle sonuçlanacaktır.
* İhtiyaçlar gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Şerefe.
Ses çalan ve Ubuntu ( Gist ) için Verilen Mesaj ve Zaman ile bir Bildirim görüntüleyen basit ve neredeyse yerel bir komut dosyası oluşturdum :
#!/bin/sh
# https://gist.github.com/John-Almardeny/04fb95eeb969aa46f031457c7815b07d
# Create a Notification With Sound with a Given Message and Time
# The Downloaded Sound is from Notification Sounds https://notificationsounds.com/
MSSG="$1"
TIME="$2"
# install wget if not found
if ! [ -x "$(command -v wget)" ]; then
echo -e "INSTALLING WGET...\n\n"
sudo apt-get install wget
echo -e "\n\n"
fi
# install at package if not found
if ! [ -x "$(command -v at)" ]; then
echo -e "INSTALLING AT...\n\n"
sudo apt-get install at
echo -e "\n\n"
fi
# install sox if not found
if ! [ -x "$(command -v sox)" ]; then
echo -e "INSTALLING SOX...\n\n"
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
echo -e "\n\n"
fi
# download the noti sound if this is first time
# add alias to the bashrc file
if ! [ -f ~/noti/sound.mp3 ]; then
echo -e "DOWNLOADING SOUND...\n\n"
touch ~/noti/sound.mp3 | wget -O ~/noti/sound.mp3 "https://notificationsounds.com/wake-up-tones/rise-and-shine-342/download/mp3"
sudo echo "alias noti=\"sh ~/noti/noti.sh\"" >> ~/.bashrc
source ~/.bashrc
echo -e "\n\n"
fi
# notify with the sound playing and particular given message and time
echo "notify-send \""$MSSG\"" && play ~/noti/sound.mp3" | at $TIME
Evinizde yeni bir Dizin oluşturun ve arayın noti
mkdir ~/noti
Noti.sh dosyasını indirin ve yukarıdaki dizine çıkartın noti
.
Terminal'i açın ve Dizini Değiştir noti
cd ~/noti
Noti.sh dosyasını yayınlayarak çalıştırılabilir duruma getirin:
sudo chmod +x noti.sh
Bunun gibi bir Test yapın:
sh ~/noti/noti.sh "Test" "now"
noti "Hello From Noti" "now +1 minute"
noti "Hello From Noti" "now +5 minutes"
noti "Hello From Noti" "now + 1 hour"
noti "Hello From Noti" "now + 2 days"
noti "Hello From Noti" "4 PM + 2 days"
noti "Hello From Noti" "now + 3 weeks"
noti "Hello From Noti" "now + 4 months"
noti "Hello From Noti" "4:00 PM"
noti "Hello From Noti" "2:30 AM tomorrow"
noti "Hello From Noti" "2:30 PM Fri"
noti "Hello From Noti" "2:30 PM 25.07.18"
sudo apt-get update; noti "Done" "now"
ffmpeg sinüs dalgası
Dışarıdaki minimalistler için 5 saniye boyunca 1000 Hz sinüs çalabilirsiniz:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
veya Ctrl-C yapana kadar sonsuza dek:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Daha fazla bilgi için: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Ubuntu 18.04'te test edildi, ffmpeg 3.4.6.