ฉันได้เริ่มกระบวนการที่ยาวนานผ่านเทอร์มินัล เป็นไปได้ไหมที่จะทำให้เทอร์มินัล Ubuntu ทำเสียงดังขึ้นเมื่อกระบวนการเสร็จสมบูรณ์ ด้วยวิธีนี้ฉันไม่จำเป็นต้องตรวจสอบต่อไป แต่จะได้รับแจ้งผ่านเสียงแทน
ฉันได้เริ่มกระบวนการที่ยาวนานผ่านเทอร์มินัล เป็นไปได้ไหมที่จะทำให้เทอร์มินัล Ubuntu ทำเสียงดังขึ้นเมื่อกระบวนการเสร็จสมบูรณ์ ด้วยวิธีนี้ฉันไม่จำเป็นต้องตรวจสอบต่อไป แต่จะได้รับแจ้งผ่านเสียงแทน
คำตอบ:
มีวิธีบรรทัดคำสั่งอย่างน้อยสามวิธีในการทำสิ่งนี้โดยใส่คำสั่งสิ่งทอสำหรับทำชุดท้ายสคริปต์ของคุณคุณอาจเรียกใช้สำหรับกระบวนการที่ยาวนานของคุณ:
วิธี "คลาสสิค" ในการเล่นเสียงคือการใช้เสียงบี๊บ    ผ่านลำโพง PC อย่างไรก็ตามสิ่งนี้จะไม่ทำงานในทุกกรณี (เช่นในลำโพงระบบ PC ของฉันถูกปิดใช้งานอย่างสมบูรณ์) และคุณจะต้องลบ 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]
นอกจากนี้เรายังสามารถเล่นไฟล์เสียงใด ๆ ในรูปแบบ wav โดยใช้ aplay (ติดตั้งตามค่าเริ่มต้น):
aplay /usr/share/sounds/alsa/Side_Right.wav
อีกวิธีหนึ่งคือการใช้อินเทอร์เฟซบรรทัดคำสั่ง pulseaudio เพื่อเปิดใช้งานการเล่นไฟล์เสียงใด ๆ ที่ระบบของคุณ (ในlibsndfile) รู้จักกับเอาต์พุตเสียงเริ่มต้น:
 paplay /usr/share/sounds/freedesktop/stereo/complete.oga
เราสามารถใช้ไฟล์เสียงเริ่มต้นจาก/usr/share/sounds/หรือไฟล์เสียงอื่น ๆ ที่เราอาจมีอยู่ในตำแหน่งอื่น
เพียงแค่กล่าวถึงมันมีวิธีที่ดีอีกวิธีหนึ่งในการบรรลุเป้าหมายนี้โดยใช้espeak ที่ผิดซึ่งติดตั้งโดยค่าเริ่มต้นใน Ubuntu <= 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"ใน Ubuntu> = 12.10 Orca ใช้ speak-dispatcher จากนั้นเราสามารถติดตั้งespeak หรือใช้
spd-say "Text"แทน
spd-sayเห็นการแก้ไขสำหรับการใช้
                    spd-sayโปรแกรมอรรถประโยชน์ถูกติดตั้งตามค่าเริ่มต้นและทำงานบนระบบของฉัน
                    paplay /usr/share/sounds/freedesktop/stereo/complete.oga
                    ฉันใช้
make; spd-say done
แทนที่ "ทำ" ด้วยคำสั่งที่ใช้งานได้นาน
spd-say 'get back to work' และติดตั้งมาแล้วเช่นกัน: release.ubuntu.com/trusty/ …สำหรับคนตาบอดที่ฉันคิดว่า และสำหรับลูปไม่มีที่สิ้นสุด:-w while true; do spd-say -w 'get back to work you lazy bum'; done
                    ในการเล่นเสียงหลังจากคำสั่งเสร็จสิ้น:
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
}หรืออ่านด้านล่างเพื่อดูตัวเลือกเพิ่มเติม:
นี่คือสิ่งที่ฉันใช้กับสิ่งที่คุณขอ - โดยมีข้อแตกต่าง: มันไม่เพียง แต่เล่นเสียงเมื่อคำสั่งเสร็จสิ้น แต่มันจะเล่นเสียงที่แตกต่างในการประสบความสำเร็จและผิดพลาด (แต่คุณสามารถเปลี่ยนได้หากคุณไม่ชอบ)
ฉันมีฟังก์ชั่น Bash ที่เรียกoksว่าฉันใช้เมื่อสิ้นสุดคำสั่งที่รันนาน:
make && make test && make install; oksมันเล่นเสียงและแสดง OK หรือข้อผิดพลาด (พร้อมรหัสข้อผิดพลาด) เมื่อคำสั่งก่อนหน้านี้เสร็จสิ้น
นี่คือฟังก์ชันที่มีผู้ช่วยสองคน:
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 ของคุณโดยตรงหรือวางไว้ในไฟล์อื่น ๆ จากนั้นใส่บรรทัดนี้ใน ~ / .bashrc ของคุณ:
. ~/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นี่คือเสียงบางส่วนที่ฉันมักจะใช้ที่มีอยู่ใน Ubuntu โดยค่าเริ่มต้นซึ่งดีสำหรับการแจ้งเตือน - sn1 ดังและดี sn2 ดีมากและยังค่อนข้างดี sn3 ดังมากและไม่ค่อยดี:
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ฟังก์ชั่นไปที่ repo ด้านบน มันเล่นเสียงและสามารถถูกขัดจังหวะโดย Ctrl + C (ซึ่งแตกต่างจากแบบง่ายwhile true; do paplay file.ogg; doneที่คาดว่าจะทำงาน แต่มันไม่ได้) ตามที่shadiถามในความคิดเห็น มันถูกนำมาใช้เป็น:
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การหาวิธีการใช้งาน ความคิดใด ๆ
                    ตามนี้\aตัวละครหนีรหัส ASCII 7 ซึ่งเป็นเสียงเตือนของคอมพิวเตอร์
ดังนั้นecho $'\a'จะทำการส่งเสียงบี๊บบนเครื่องในพื้นที่ของฉันแม้ว่าจะถูกดำเนินการบน bash shell ที่รันบนคอมพิวเตอร์ที่ฉันเชื่อมต่อผ่านเทอร์มินัลอินเตอร์เฟสเช่น PuTTY
เมื่อเพิ่มคำตอบของ Michael Curries คุณสามารถสร้าง Bash print a BEL( \a) ตัวละครผ่านPROMPT_COMMAND:
PROMPT_COMMAND='printf \\a'
การตั้งค่าPROMPT_COMMANDด้วยวิธีนี้จะทำให้ Bash ดำเนินการprintf \\aในตอนท้ายของแต่ละคำสั่งซึ่งจะทำให้เทอร์มินัลเล่นเสียง (แม้ว่า muru จะชี้ให้เห็นเพียงแค่เรียกการวาดใหม่ของพรอมต์จะทำให้เทอร์มินัลเล่นเสียงเช่นเสียงที่จะเล่น ทุกครั้งที่มีพรอมต์ใหม่ถูกดึงออกมาตัวอย่างเช่นแม้เพียงแค่กดปุ่มENTER)
นี่คือคุณลักษณะของเทอร์มินัลดังนั้นจึงอาจไม่สามารถใช้งานได้ในทุกเทอร์มินัล เช่นมันไม่ทำงานในคอนโซล (แต่ฉันแน่ใจว่ามันใช้งานได้ในgnome-terminalและ   xterm)
คำสั่ง
 speaker-test
ทำให้เสียงรบกวน ทางออกที่ง่าย แต่น่ารำคาญ :-)
ดูคู่มือของspeaker-test(1)ตัวเลือกในการกำหนดค่าสัญญาณรบกวน
นี่ไม่ใช่สิ่งที่คุณถาม แต่คุณสามารถใช้การแจ้งเตือนได้
แทนที่คำสั่งที่ให้ในคำตอบอื่นด้วย
notify-send "Process terminated" "Come back to the terminal, the task is over"
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
ไชโย
ฉันสร้างสคริปต์ที่เรียบง่ายและเป็นภาษาแม่เกือบทั้งหมดที่เล่นเสียงและแสดงการแจ้งเตือนด้วยข้อความและเวลาที่กำหนดสำหรับ Ubuntu ( สรุปสาระสำคัญ ):
#!/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
สร้างไดเรกทอรีใหม่ที่บ้านของคุณและเรียกมัน noti
mkdir ~/noti
ดาวน์โหลดnoti.shและแตกไปยังnotidir ด้านบน
เปิด Terminal และเปลี่ยน Directory เป็น noti 
cd ~/noti
ทำให้ noti.sh สามารถเรียกใช้งานได้โดยการออก:
sudo chmod +x noti.sh
ทำการทดสอบแบบนี้:
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 คลื่นไซน์
สำหรับมินิมัลลิสต์นั้นคุณสามารถเล่น 1,000 Hz sine เป็นเวลา 5 วินาที:
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
ทดสอบใน Ubuntu 18.04, ffmpeg 3.4.6