किसी प्रक्रिया के पूरा होने के बाद ध्वनि कैसे करें?


94

मैंने एक टर्मिनल के माध्यम से एक लंबी प्रक्रिया शुरू की है। क्या प्रक्रिया पूरी होते ही उबंटू टर्मिनल को आवाज देना संभव है? इस तरह, मुझे जाँच रखने की आवश्यकता नहीं है, बल्कि एक ध्वनि के माध्यम से सूचित किया जाएगा।


क्या आप आगे बता सकते हैं कि प्रक्रिया पूरी होने का क्या मतलब है ?
लुसियो

1
@ लुसीओ नियंत्रण को टर्मिनल पर वापस लौटा दिया जाता है
गोलर444

1
क्या आपका मतलब है, टर्मिनल से एक एप्लिकेशन खोलें और जब यह खत्म हो जाए, तो आवाज करें? क्या आपके पास उबंटू सर्वर है या आप GUI सॉफ्टवेयर का मतलब है?
लुसियो

2
हाँ बिल्कुल। उदाहरण के लिए, मैं एक कमांड लाइन कार्यक्रम शुरू करता हूं, और एक बार जब यह बाहर निकलता है और नियंत्रण टर्मिनल पर वापस आ जाता है, तो एक ध्वनि बनाई जाती है। मैं फिलहाल Ubuntu 12.10
Goaler444

जवाबों:


78

अपनी स्क्रिप्ट के अंत में सूटिंग कमांड डालकर इसे पूरा करने के लिए कम से कम तीन कमांड लाइन तरीके हैं जिन्हें आप अपने विवरण के लिए आमंत्रित कर सकते हैं:

  1. "शास्त्रीय" ध्वनि बजाने का तरीका पीसी स्पीकर के माध्यम से बीप का उपयोग करना बीप स्थापित करेंहै। हालांकि यह सभी मामलों में काम नहीं करेगा (जैसे कि मेरे सिस्टम में पीसी स्पीकर पूरी तरह से अक्षम हैं) और आपको कर्नेल मॉड्यूल को pscpkr को हटाने /etc/modprobe/blacklist.confऔर लोड करने की आवश्यकता होगी pcspkr

    sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
    sudo modprobe pcspkr
    beep [optional parameters]
    
  2. हम भी aplay (डिफ़ॉल्ट रूप से स्थापित) का उपयोग कर wav प्रारूप में किसी भी ध्वनि फ़ाइल खेल सकते हैं:

    aplay /usr/share/sounds/alsa/Side_Right.wav
    
  3. दूसरा तरीका यह है कि आपके सिस्टम में ( libsndfile) में किसी भी ध्वनि फ़ाइलों के प्लेबैक को सक्षम करने के लिए pulseaudio कमांड लाइन इंटरफेस का उपयोग डिफ़ॉल्ट ऑडियो फिटनेस पर पहचान करता है:

     paplay /usr/share/sounds/freedesktop/stereo/complete.oga
    

    हम डिफ़ॉल्ट ध्वनि फ़ाइलों का उपयोग कर सकते हैं /usr/share/sounds/, या किसी अन्य ध्वनि फ़ाइल का हमारे पास एक अलग स्थान हो सकता है।


बस इसका उल्लेख करने के लिए , जासूसी का दुरुपयोग करके इसे प्राप्त करने का एक और अच्छा तरीका है , जो कि डिफ़ॉल्ट रूप से उबंटू <= 12.04 में स्थापित है। निम्न उदाहरण देखें, या सुनें:

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

उबंटू में = = 12.10 ओरका स्पीक-डिस्पैचर का उपयोग करता है। हम तब जासूसी स्थापित कर सकते हैं जासूसी स्थापित करें, या वैकल्पिक रूप से उपयोग कर सकते हैं spd-say "Text"


1
@ टैक्कट मैं उबंटू 12.10 का उपयोग कर रहा हूं और एस्पेक वर्तमान में स्थापित नहीं है।
लुसियो

@ लुसियो: हाँ, अब जब कि आप इसे कहते हैं ... उन्होंने बोलने-भेजने के लिए स्विच किया। यदि यह काम करता है (यह मेरे सिस्टम पर नहीं है) तो उपयोग करने के लिए संपादन देखें spd-say
21

@Takkat spd-sayउपयोगिता डिफ़ॉल्ट रूप से स्थापित है और यह मेरे सिस्टम पर काम करती है।
लुसियो

इस Q / A
c0rp

1
मुझे अच्छी सफलता मिलीpaplay /usr/share/sounds/freedesktop/stereo/complete.oga
निकोलस डिपियाज़ा

73

मैं उपयोग करता हूं

make; spd-say done

जो भी लंबे समय से चल रही कमांड का आप उपयोग करते हैं, उससे "मेक" को बदलें।


तुमने मेरा दिन बना दिया!! : D
n0noob

5
spd-say 'get back to work'। और पहले से स्थापित के रूप में अच्छी तरह से आता है: रिलीज । और -wअनंत छोरों के लिए while true; do spd-say -w 'get back to work you lazy bum'; done:।
सिरो सेंटिल्ली 47 改造 iro i 事件 '

मुझे जितना हँसना चाहिए था, उससे कहीं अधिक हँसी-मजाक किया।
नेल्सनगॉन

15

टी एल; डॉ

कमांड खत्म होने के बाद ध्वनि बजाने के लिए:

long-running-command; sn3

(जहां sn3ध्वनि संख्या 3 है) इसे इसमें डालें .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
}

या अधिक विकल्पों के लिए नीचे पढ़ें:

त्रुटि और सफलता पर अलग ध्वनि

यहाँ मैं वही उपयोग करता हूं जो आप पूछते हैं - एक अंतर के साथ: यह न केवल एक ध्वनि बजाता है जब कमांड पूरा होता है, लेकिन यह सफलता और त्रुटि पर एक अलग ध्वनि निभाता है । (लेकिन अगर आप इसे पसंद नहीं करते हैं तो आप इसे बदल सकते हैं।)

मेरे पास एक बैश फ़ंक्शन है जिसे oksमैं लंबे समय तक चलने वाले कमांड के अंत में उपयोग करता हूं:

make && make test && make install; oks

यह एक ध्वनि बजाता है और पिछली कमांड के पूरा होने पर OK या ERROR (त्रुटि कोड के साथ) प्रदर्शित करता है।

सोर्स कोड

यहाँ दो सहायकों के साथ कार्य किया गया है:

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
}

स्थापना

आप इसे सीधे अपने ~ / .bashrc में डाल सकते हैं या किसी अन्य फ़ाइल में रख सकते हैं और फिर इस लाइन को अपने ~ / .ashashrc में डाल सकते हैं:

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

विन्यास

बदलें sound_okऔर sound_errorकुछ अन्य ध्वनियों के लिए।

आप soundबनाम के साथ प्रयोग कर सकते हैं soundbgऔर बदल सकते हैं sound_okऔर sound_errorकई ध्वनियों के अनुक्रमों का उपयोग कर सकते हैं जो आप चाहते हैं कि परिणाम प्राप्त करना पसंद करते हैं।

अच्छा लगता है

अपने सिस्टम पर कुछ अच्छी आवाज़ें खोजने के लिए आप कोशिश कर सकते हैं:

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

यहाँ कुछ ध्वनियाँ हैं जो मैं अक्सर उपयोग करता हूं जो डिफ़ॉल्ट रूप से उबंटू पर उपलब्ध हैं जो सूचनाओं के लिए अच्छे हैं - एसएन 1 जोर से और अच्छा है, स्न 2 बहुत जोर से है और अभी भी बहुत अच्छा है, एसएन 3 बहुत जोर से है और इतना अच्छा नहीं है:

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
}

फिर से, आप बदल सकते हैं soundकरने के लिए soundbgआप ध्वनि को समाप्त करने के लिए (उदाहरण के लिए, जब आप लगता है की एक बहुत खेलते हैं अपनी स्क्रिप्ट को धीमा नहीं करने के लिए) का इंतजार किए बिना पृष्ठभूमि में खेलने के लिए चाहते हैं।

मूक संस्करण

और बस के मामले में - यहाँ एक ही कार्य है, oksलेकिन बिना आवाज़ के:

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

प्रयोग

यहां बताया गया है कि आप इसका उपयोग कैसे करते हैं:

सफलता के साथ उदाहरण:

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

त्रुटि के साथ उदाहरण:

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

व्यवहार में निश्चित रूप से आदेश अधिक पसंद हैं:

make && make test && make install; oks

लेकिन मैंने इस्तेमाल किया lsताकि आप जल्दी से देख सकें कि यह कैसे काम करता है।

आप okइसके बजाय oksएक मूक संस्करण के लिए उपयोग कर सकते हैं ।

या आप उपयोग कर सकते हैं जैसे:

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

OK / ERROR प्रिंट करना

अपडेट करें

मैंने उन कार्यों को GitHub पर रखा, देखें:

स्रोत से डाउनलोड किया जा सकता है:

अपडेट २

मैंने soundloopउपरोक्त रेपो में एक फ़ंक्शन जोड़ा । यह एक ध्वनि बजाता है और इसे Ctrl + C द्वारा बाधित किया जा सकता है (एक साधारण के विपरीत जो while true; do paplay file.ogg; doneकाम करने की उम्मीद करेगा लेकिन यह नहीं है) जैसा कि टिप्पणियों में छाया द्वारा पूछा गया है । इसे इस प्रकार लागू किया जाता है:

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
}

यदि आपको लगता है कि यह जटिल है, तो कृपया अपनी शिकायतें PulseAudio डेवलपर्स के लिए निर्देशित करें।


मैंने इसे लगाने की कोशिश की while true; do paplay ...; doneताकि मेरे हिट होने तक ध्वनि दोहराई जाए Ctrl+C, लेकिन जब मैं करता हूं, तो यह टूटता नहीं है। मुझे यह पता लगाने के लिए कोई विशेष विकल्प नहीं मिल रहा man paplayहै कि यह कैसे काम करना है। कोई विचार?
shadi

@ शदी एक ध्वनि के साथ समाधान के लिए मेरा अद्यतन उत्तर देखें जो आपके Ctrl + C को हिट करने तक दोहराता है।
आरपी

14

के अनुसार इस\a चरित्र ASCII कोड 7, जो कंप्यूटर की बीप है निकल जाता है।

इसलिए echo $'\a'मेरे स्थानीय मशीन पर एक बीप साउंड बनाने के लिए काम करता है, तब भी जब इसे कंप्यूटर पर चलने वाले बैश शेल पर निष्पादित किया जाता है, जो कि मैं एक टर्मिनल इंटरफ़ेस के माध्यम से जुड़ा हुआ हूं जैसे कि PuTTY।


3
गजब का! यह सबसे आसान और सबसे अच्छा समाधान है (कम से कम मेरे लिए) क्योंकि इसे किसी भी 3-पार्टी एप्लिकेशन को स्थापित करने की आवश्यकता नहीं है और कमांड प्रॉम्प्ट पर ध्यान केंद्रित करने के बाद चलाने के लिए प्रक्रिया के बीच में टाइप / पेस्ट किया जा सकता है।
hlopetz

2
इस चरित्र की ध्वनि को डिफ़ॉल्ट रूप से अधिकांश आधुनिक टर्मिनलों में अक्षम किया गया है
phil294

6

माइकल कुरीज़ के उत्तर पर विस्तार करते हुए, आप बैश प्रिंट ए BEL( \a) के माध्यम से चरित्र बना सकते हैं PROMPT_COMMAND:

PROMPT_COMMAND='printf \\a'

PROMPT_COMMANDइस तरह से स्थापित करने printf \\aसे प्रत्येक कमांड के अंत में बैश को निष्पादित किया जाएगा, जो टर्मिनल को एक साउंड प्ले करेगा (हालाँकि जैसे कि मुरू बताते हैं, बस प्रॉम्प्ट के रिड्रालेवल को चालू करने से टर्मिनल को ध्वनि बजाएगा, अर्थात ध्वनि खेली जाएगी) हर बार एक नया संकेत तैयार किया जाता है, उदाहरण के लिए जब सिर्फ मार रहा हो ENTER)।

यह एक टर्मिनल विशेषता है, इसलिए यह सभी टर्मिनलों पर काम नहीं कर सकता है; उदाहरण के लिए यह कंसोल में काम नहीं करता है (लेकिन मुझे यकीन है कि यह काम करता है gnome-terminalऔर xterm)।


5
(कैविएट के साथ कि हर बार जब आप Enter दबाते हैं, तो आपको एक आवाज़ मिलेगी)
muru


2

यह वह नहीं है जो आपने पूछा था लेकिन आप इसके लिए अधिसूचना का उपयोग कर सकते हैं।

अन्य उत्तरों में दी गई कमांड को बदलें

notify-send "Process terminated" "Come back to the terminal, the task is over"

1
command && (say done ; echo done) || (echo error ; say error)

उदाहरण 1: echo alik && (say done ; echo done) || (echo error ; say error)एक किए गए शब्द में परिणाम होगा।

उदाहरण 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)एक त्रुटि शब्द के परिणामस्वरूप होगा।

* आवश्यकताएं gnustep-gui-runtime-

sudo apt-get install gnustep-gui-runtime

चीयर्स।


0

मैंने एक सरल और लगभग देशी स्क्रिप्ट बनाई जो साउंड बजाती है और उबंटू के लिए दिए गए संदेश और समय के साथ एक अधिसूचना प्रदर्शित करती है ( 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="$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

कैसे इस्तेमाल करे?

पहला रन - सेट अप:

  1. अपने घर पर एक नई निर्देशिका बनाएं और इसे कॉल करें noti

    mkdir ~/noti
    
  2. Noti.sh डाउनलोड करें और इसे उपरोक्त notiडायर पर निकालें ।

  3. टर्मिनल खोलें और निर्देशिका को बदलें noti

    cd ~/noti
    
  4. जारी करने के द्वारा noti.sh निष्पादित करें:

    sudo chmod +x noti.sh
    
  5. इस तरह एक टेस्ट चलाएं:

    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"

0

ffmpeg साइन वेव

वहां के न्यूनतम लोगों के लिए, आप 5 सेकंड के लिए 1000 हर्ट्ज साइन खेल सकते हैं:

sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

या हमेशा के लिए जब तक आप Ctrl-C नहीं करते:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

अधिक जानकारी: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684

उबंटू 18.04 में परीक्षण किया गया, ffmpeg 3.4.6।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.