ฉันได้เริ่มกระบวนการที่ยาวนานผ่านเทอร์มินัล เป็นไปได้ไหมที่จะทำให้เทอร์มินัล 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และแตกไปยังnoti
dir ด้านบน
เปิด 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