Bir süreç tamamlandığında ses nasıl yapılır?

76

Bir terminal aracılığıyla uzun bir süreç başlattım. İşlem tamamlandıktan sonra Ubuntu terminalinin ses çıkarması mümkün mü? Bu şekilde, kontrol etmeye devam etmem gerekmiyor, bunun yerine bir sesle bilgilendirilecek.

    
sordu Goaler444 02.04.2013 20:16

9 cevap

69

Komut dosyanızın sonundaki komut satırını koyarak, bunu başarmak için en az üç komut satırı yolu vardır:

  1. Bir ses çalmanın "klasik" yolu bip sesini kullanmaktır. . Ancak bu, her durumda çalışmayacaktır (örneğin, sistem bilgisayar hoparlörlerim tamamen devre dışı bırakılmıştır) ve pscpkr'ı /etc/modprobe/blacklist.conf 'den kaldırmanız 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]
    
  2. Ayrıca, herhangi bir ses dosyasını aplay (varsayılan olarak kurulu) kullanılarak wav formatında da çalabiliriz:

    aplay /usr/share/sounds/alsa/Side_Right.wav
    
  3. Başka bir yol, sisteminizdeki ( libsndfile cinsinden) ses dosyalarının varsayılan ses çıkışında algılanması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 başka bir konumda sahip olabileceğimiz başka bir ses dosyasından kullanabiliriz.

Sadece bahsetmek gerekirse, Ubuntu <12.04'te varsayılan olarak yüklenen espeak 'i yanlış kullanarak bunu başarmanın başka bir yolu daha vardır. Aşağıdaki örneğe bakın veya daha doğrusu dinleyin:

#! /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 & gt; = 12.10'da Orca konuşmacı-dağıtıcı kullanır. Daha sonra espeak 'ı yükleyebiliriz veya alternatif olarak spd-say "Text" kullanın.

    
verilen cevap Takkat 02.04.2013 20:40
60

Kullanıyorum

make; spd-say done

Kullandığınız uzun süren komutla "make" komutunu değiştirin.

    
verilen cevap Memetic 20.02.2015 00:58
11

bu 'ya göre, \a karakteri, bilgisayarın bip sesi olan ASCII kodu 7'den kurtulur.

Yani echo $'\a' , yerel makinemde bir bip sesi çıkarmaya çalışıyor, hatta bir bilgisayar üzerinde çalışan bir bash kabuğu üzerinde çalıştırılsa bile PuTTY gibi bir terminal arabirim üzerinden bağlanıyorum.

    
verilen cevap Michael Currie 13.09.2015 21:39
11

TL; DR

Komut bittikten sonra ses çalmak için:

long-running-command; sn3

( sn3 ses numarası 3 olan) bunu .bashrc dizinine koydu:

sound() {
  # plays sounds in sequence and waits for them to finish
  for s in [email protected]; 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:

Hata ve başarı konusunda farklı sesler

İşte tam olarak ne istediğin için kullanıyorum - tek bir farkla: sadece komut bittiğinde bir ses çalmak değil, aynı zamanda başarı ve hata üzerine bir farklı ses çalar. (Ama beğenmediysen onu değiştirebilirsin.)

Uzun süre çalışan komutların sonunda kullandığım oks adlı Bash işlevim var:

make && make test && make install; oks

Bir ses çalar ve önceki komut bittiğinde OK veya ERROR (hata koduyla) görüntüler.

Kaynak kodu

İşte iki yardımcıyla şu işlevi var:

sound() {
  # plays sounds in sequence and waits for them to finish
  for s in [email protected]; do
    paplay $s
  done
}
soundbg() {
  # plays all sounds at the same time in the background
  for s in [email protected]; 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
}

Kurulum

~ / .bashrc 'ye doğrudan koyabilirsiniz ya da başka bir dosyaya koyun ve sonra bu satırı ~ / .bashrc dosyanıza koyun:

. ~/path/to/file/with/function

Yapılandırma

sound_ok ve sound_error değerini başka seslere değiştirin.

sound ile soundbg değerini deneyebilir ve istediğiniz sonucu elde etmek istediğiniz birçok ses dizisini kullanmak için sound_ok ve sound_error değerini değiştirebilirsiniz.

Güzel sesler

Sisteminizde bazı iyi sesleri bulmak için şunları deneyebilirsiniz:

for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done

Burada sık sık bildirimler için iyi olan Ubuntu'da kullanılan bazı sesler vardır - sn1 yüksek ve güzel, sn2 çok yüksek ve hala oldukça güzel, sn3 son derece 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, sesin bitmesini beklemeden arka planda çalmak istiyorsanız, sound 'sini soundbg ' e dönüştürebilirsiniz (örneğin, çok fazla ses çaldığınızda komut dosyalarınızı yavaşlatmamak için).

Sessiz sürüm

Ve sadece durumda - burada oks ile aynı işlevsellik var ancak ses yok:

ok() {
  # prints OK or ERROR and exit status of previous command
  s=$?
  if [[ $s = 0 ]]; then
    echo OK
  else
    echo ERROR: $s
  fi
}

Kullanım

İşte nasıl kullanıyorsunuz:

Başarı ile örnek:

ls / && ls /bin && ls /usr; oks

hatayla örnek:

ls / && ls /bim && ls /usr; oks

Elbette pratikte komutlar daha fazladır:

make && make test && make install; oks

ancak ls kullanmıştım, böylece nasıl çalıştığını hızlı bir şekilde görebilirsiniz.

Sessiz bir sürüm için ok yerine oks kullanabilirsiniz.

Veya aşağıdakileri kullanabilirsiniz:

ls / && ls /bim && ls /usr; ok; sn1

OK / HATA yazdırmak için her zaman aynı sesi, vb. oynatın.

Güncelleme

Bu işlevleri GitHub'a koydum, bkz:

Kaynak şu kaynaktan indirilebilir:

Güncelleme 2

Yukarıdaki repo'ya soundloop işlevi ekledim. Bir ses çalıyor ve yorumlarda shadi tarafından sorulduğu gibi Ctrl + C (çalışmayı beklediği basit bir% co_de yüzdesinin aksine) kesilebilir. Şu şekilde uygulanır:

soundloop() {
  set +m
  a='date +%s'
  { paplay  & } 2>/dev/null
  wait
  b='date +%s'
  d=$(($b-$a))
  [ $d -eq 0 ] && d=1
  while :; do
    pacmd play-file  0 >/dev/null
    sleep $d
  done
}

Bunun karmaşık olduğunu düşünüyorsanız, lütfen şikayetlerinizi PulseAudio geliştiricilerine yönlendirin.

    
verilen cevap rsp 01.04.2015 21:24
6

Michael Curries'in yanıtını genişleterek, Bash'in BEL yoluyla \a ( PROMPT_COMMAND ) karakterini yazdırabilirsiniz:

PROMPT_COMMAND='printf \a'

PROMPT_COMMAND değerinin ayarlanması, Bash'in her komutun sonunda printf \a yürütmesini sağlar, bu da terminalin bir ses çıkarmasını sağlar (muru işaret ettiği gibi, sadece istemin yeniden çizilmesini tetikler, terminal oynatma işlemini gerçekleştirir) ses, yani her yeni bir komut istendiğinde ses çalınır, örneğin sadece ENTER 'a basıldığında bile.

Bu bir terminal özelliğidir, bu nedenle tüm terminaller arasında çalışmayabilir; örneğin konsolda çalışmıyor (ancak eminim gnome-terminal ve xterm dizininde çalışıyor).

    
verilen cevap kos 06.03.2016 21:25
3

Komut

 speaker-test

bir ses çıkarır. En basit ama can sıkıcı bir çözüm. : -)

Yapılandırma seçenekleri için speaker-test(1) kılavuzuna bakın. ses sinyali.

    
verilen cevap xerostomus 01.11.2015 09:01
1
command && (say done ; echo done) || (echo error ; say error)

Örnek 1: echo alik && (say done ; echo done) || (echo error ; say error) , bitmiş bir kelime ile sonuçlanacaktır.

Örnek 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error) bir hata kelimesine neden olacaktır.

* İhtiyaç yüzdesi gnustep-gui-runtime -

sudo apt-get install gnustep-gui-runtime

alkış.

    
verilen cevap AlikElzin-kilaka 23.05.2016 13:23
1

Bu sizin sorduğunuz şey değil, bunun için bildirim kullanabilirsiniz.

Diğer cevaplarda verilen komutu

ile değiştirin
notify-send "Process terminated" "Come back to the terminal, the task is over"
    
verilen cevap solsTiCe 30.03.2018 16:07
0

Sound'u çalıştıran ve Ubuntu için Verilen Bir İleti ve Zaman ile Bildirimi görüntüleyen basit ve neredeyse yerel bir komut dosyası oluşturdum ( Gist ):

#!/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=""
TIME=""

# 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

Nasıl Kullanılır?

İlk Çalıştırma - Kurma:

  1. Evinizde yeni bir Dizin oluştur ve bunu noti

    olarak adlandır
    mkdir ~/noti
    
  2. noti.sh 'ı indirin ve yukarıdaki% co_de'ye çıkarın. % dir.

  3. Terminali açın ve Dizinini noti olarak değiştirin

    cd ~/noti
    
  4. Noti.sh dosyasını düzenleyerek gerçekleştirin:

    sudo chmod +x noti.sh
    
  5. Şunun gibi bir Test çalıştırın:

    sh ~/noti/noti.sh "Test" "now"
    

Örnekler

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"

İşlemin Sonunu Bildirmek İçin (örnek)

sudo apt-get update; noti "Done" "now"
    
verilen cevap Yahya 10.07.2018 16:02

Etiketlerdeki diğer soruları oku