Tôi đã bắt đầu một quá trình dài thông qua một thiết bị đầu cuối. Có thể làm cho thiết bị đầu cuối Ubuntu phát ra âm thanh sau khi quá trình hoàn tất? Bằng cách này, tôi không cần tiếp tục kiểm tra mà thay vào đó sẽ được thông báo qua âm thanh.
Tôi đã bắt đầu một quá trình dài thông qua một thiết bị đầu cuối. Có thể làm cho thiết bị đầu cuối Ubuntu phát ra âm thanh sau khi quá trình hoàn tất? Bằng cách này, tôi không cần tiếp tục kiểm tra mà thay vào đó sẽ được thông báo qua âm thanh.
Câu trả lời:
Có ít nhất ba cách dòng lệnh để thực hiện điều này bằng cách đặt lệnh phù hợp ở cuối tập lệnh của bạn, bạn có thể gọi cho quy trình dài của mình:
Cách "cổ điển" để phát âm thanh là sử dụng tiếng bíp qua loa PC. Tuy nhiên, điều này sẽ không hoạt động trong mọi trường hợp (ví dụ: trong hệ thống loa PC của tôi bị vô hiệu hóa hoàn toàn) và bạn sẽ cần xóa pscpkr khỏi /etc/modprobe/blacklist.conf
và tải pcspkr
mô-đun hạt nhân.
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Chúng tôi cũng có thể phát bất kỳ tệp âm thanh nào ở định dạng wav bằng cách sử dụng aplay (được cài đặt theo mặc định):
aplay /usr/share/sounds/alsa/Side_Right.wav
Một cách khác là sử dụng giao diện dòng lệnh pulseaudio để cho phép phát lại bất kỳ tệp âm thanh nào mà hệ thống của bạn (trong libsndfile
) nhận ra trên đầu ra âm thanh mặc định:
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Chúng tôi có thể sử dụng các tệp âm thanh mặc định từ /usr/share/sounds/
hoặc bất kỳ tệp âm thanh nào khác mà chúng tôi có thể có ở một vị trí khác.
Chỉ cần đề cập đến nó, có một cách hay khác để đạt được điều này bằng cách sử dụng sai đặc biệt , được cài đặt mặc định trong Ubuntu <= 12.04. Xem, hoặc đúng hơn là nghe ví dụ sau:
#! /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"
Trong Ubuntu> = 12.10 Orca sử dụng bộ phát ngôn. Sau đó chúng ta có thể cài đặt đặc biệt , hoặc sử dụng thay thế spd-say "Text"
.
spd-say
.
spd-say
Tiện ích được cài đặt theo mặc định và nó hoạt động trên hệ thống của tôi.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
tôi sử dụng
make; spd-say done
Thay thế "make" bằng bất kỳ lệnh chạy dài nào bạn sử dụng.
spd-say 'get back to work
'. Và cũng được cài đặt sẵn: phát hành.ubuntu.com/trusty/ , đối với người mù tôi cho rằng? Và -w
cho các vòng lặp vô hạn : while true; do spd-say -w 'get back to work you lazy bum'; done
.
Để phát âm thanh sau khi lệnh kết thúc:
long-running-command; sn3
( sn3
âm thanh số 3) đặt cái này vào .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
}
Hoặc đọc phần bên dưới để có thêm lựa chọn:
Đây là những gì tôi sử dụng cho chính xác những gì bạn yêu cầu - với một điểm khác biệt: nó không chỉ phát âm thanh khi lệnh kết thúc mà còn phát một âm thanh khác về thành công và lỗi. (Nhưng bạn có thể thay đổi nó nếu bạn không thích nó.)
Tôi có một hàm Bash được gọi là oks
tôi sử dụng ở cuối các lệnh chạy dài:
make && make test && make install; oks
Nó phát âm thanh và hiển thị OK hoặc ERROR (có mã lỗi) khi lệnh trước kết thúc.
Đây là chức năng với hai người trợ giúp:
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
}
Bạn có thể đặt nó trực tiếp vào ~ / .bashrc hoặc đặt nó vào một số tệp khác và sau đó đặt dòng này vào ~ / .bashrc:
. ~/path/to/file/with/function
Thay đổi sound_ok
và sound_error
một số âm thanh khác.
Bạn có thể thử nghiệm sound
so với soundbg
và thay đổi sound_ok
và sound_error
sử dụng chuỗi nhiều âm thanh mà bạn muốn để có được kết quả mà bạn muốn.
Để tìm một số âm thanh hay trên hệ thống của bạn, bạn có thể thử:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Dưới đây là một số âm thanh mà tôi thường sử dụng có sẵn trên Ubuntu theo mặc định rất tốt cho các thông báo - sn1 rất to và hay, sn2 rất to và vẫn khá đẹp, sn3 cực kỳ to và không hay lắm:
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
}
Một lần nữa, bạn có thể thay đổi sound
thành soundbg
nếu bạn muốn phát nó ở chế độ nền mà không cần chờ âm thanh kết thúc (ví dụ: không làm chậm các tập lệnh của bạn khi bạn phát nhiều âm thanh).
Và chỉ trong trường hợp - đây là chức năng tương tự oks
nhưng không có âm thanh:
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
Đây là cách bạn sử dụng nó:
Ví dụ với thành công:
ls / && ls /bin && ls /usr; oks
ví dụ có lỗi:
ls / && ls /bim && ls /usr; oks
Tất nhiên trong thực tế các lệnh giống như:
make && make test && make install; oks
nhưng tôi đã sử dụng ls
để bạn có thể nhanh chóng thấy nó hoạt động như thế nào.
Bạn có thể sử dụng ok
thay vì oks
cho một phiên bản im lặng.
Hoặc bạn có thể sử dụng, vd:
ls / && ls /bim && ls /usr; ok; sn1
để in OK / ERROR nhưng luôn phát cùng một âm thanh, v.v.
Tôi đặt các chức năng đó trên GitHub, xem:
Nguồn có thể được tải xuống từ:
Tôi đã thêm một soundloop
chức năng cho repo ở trên. Nó phát ra âm thanh và có thể bị gián đoạn bởi Ctrl + C (không giống như đơn giản while true; do paplay file.ogg; done
mà người ta mong đợi sẽ hoạt động nhưng không được) như yêu cầu của shadi trong các bình luận. Nó được thực hiện như:
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
}
Nếu bạn nghĩ nó phức tạp, vui lòng gửi khiếu nại của bạn đến các nhà phát triển PulseAudio.
while true; do paplay ...; done
để âm thanh lặp lại cho đến khi tôi nhấn Ctrl+C
, nhưng khi tôi làm vậy, nó không bị hỏng. Tôi không thể tìm thấy bất kỳ tùy chọn đặc biệt nào man paplay
để tìm ra cách để làm việc này. Có ý kiến gì không?
Theo đó , \a
nhân vật thoát khỏi mã ASCII 7, đó là tiếng bíp của máy tính.
Vì vậy, echo $'\a'
hoạt động để tạo ra tiếng bíp trên máy cục bộ của tôi, ngay cả khi nó được thực thi trên vỏ bash chạy trên máy tính mà tôi được kết nối qua giao diện đầu cuối như PuTTY.
Mở rộng câu trả lời của Michael Curries, bạn có thể khiến Bash in một ký tự BEL
( \a
) thông qua PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Cài đặt PROMPT_COMMAND
theo cách đó sẽ khiến Bash thực thi printf \\a
ở cuối mỗi lệnh, điều này sẽ khiến thiết bị đầu cuối phát âm thanh (mặc dù như muru chỉ ra, chỉ cần kích hoạt vẽ lại lời nhắc sẽ làm cho thiết bị đầu cuối phát âm thanh, tức là âm thanh sẽ được phát mỗi lần một dấu nhắc mới được rút ra, ví dụ ngay cả khi chỉ cần nhấn ENTER).
Đây là một tính năng của thiết bị đầu cuối, vì vậy nó có thể không hoạt động trên tất cả các thiết bị đầu cuối; ví dụ: nó không hoạt động trong bảng điều khiển (nhưng tôi chắc chắn rằng nó hoạt động trong gnome-terminal
và xterm
).
Lệnh
speaker-test
tạo ra một âm thanh ồn ào. Giải pháp đơn giản nhưng khó chịu. :-)
Nhìn vào hướng dẫn củaspeaker-test(1)
các tùy chọn để cấu hình tín hiệu nhiễu.
command && (say done ; echo done) || (echo error ; say error)
Ví dụ 1: echo alik && (say done ; echo done) || (echo error ; say error)
sẽ dẫn đến một từ được thực hiện.
Ví dụ 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
sẽ dẫn đến một từ lỗi.
* Nhu cầu gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Chúc mừng.
Tôi đã tạo một tập lệnh đơn giản và gần như nguyên bản để phát Âm thanh và hiển thị Thông báo với Thông báo và Thời gian cho Ubuntu ( 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
Tạo một thư mục mới tại nhà của bạn và gọi nó noti
mkdir ~/noti
Tải về noti.sh và giải nén nó vào noti
thư mục trên .
Mở Terminal và Change Directory thành noti
cd ~/noti
Làm cho noti.sh thực thi bằng cách phát hành:
sudo chmod +x noti.sh
Chạy thử nghiệm như thế này:
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"
sóng hình sin ffmpeg
Đối với những người theo chủ nghĩa tối giản ngoài kia, bạn có thể phát một hình sin 1000 Hz trong 5 giây:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
hoặc mãi mãi cho đến khi bạn làm Ctrl-C:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Thêm thông tin tại: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Đã thử nghiệm trong Ubuntu 18.04, ffmpeg 3.4.6.