私はターミナルを介して長いプロセスを開始しました。プロセスが完了したら、Ubuntuターミナルで音を出すことは可能ですか?この方法では、チェックを続ける必要はありませんが、代わりに音で通知されます。
長いプロセスのために呼び出すことができるスクリプトの最後に適切なコマンドを配置することにより、これを達成するためのコマンドライン方法が少なくとも3つあります。
サウンドを再生する「古典的な」方法は、 beep 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]
また、aplay(デフォルトでインストール)を使用してwav形式のサウンドファイルを再生できます。
aplay /usr/share/sounds/alsa/Side_Right.wav
もう1つの方法は、pulseaudioコマンドラインインターフェイスを使用して、システム(libsndfile
内)がデフォルトのオーディオ出力で認識するサウンドファイルの再生を有効にすることです。
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
/usr/share/sounds/
のデフォルトのサウンドファイル、または別の場所にあるその他のサウンドファイルを使用できます。
言及しただけで、Ubuntu <= 12.04にデフォルトでインストールされるespeakを誤用することでこれを達成する別の素晴らしい方法があります。次の例を参照するか、むしろ聞いてください。
#! /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"
を使用します。
私が使う
make; spd-say done
「make」を、使用する長期実行コマンドに置き換えます。
コマンドの終了後にサウンドを再生するには:
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
}
または、以下のオプションをご覧ください。
ここに私があなたが求めるものに正確に使用するものがあります-1つの違いがあります:コマンドが終了したときに音を再生するだけでなく、成功時とエラー時にdifferent音を再生します(ただし、気に入らない場合は変更できます。)
oks
というBash関数があり、長時間実行するコマンドの最後に使用します。
make && make test && make install; oks
前のコマンドが終了すると、サウンドが再生され、OKまたはERROR(エラーコード付き)が表示されます。
以下に、2つのヘルパーを持つ関数を示します。
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
関数を追加しました。サウンドを再生し、shadiで尋ねられたように、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開発者に苦情を伝えてください。
this によれば、\a
文字はコンピューターのビープ音であるASCIIコード7をエスケープします。
したがって、echo $'\a'
は、PuTTYなどのターミナルインターフェイスを介して接続しているコンピューターで実行されているbashシェルで実行された場合でも、ローカルマシンでビープ音を鳴らします。
Michael Curriesの答えを拡張すると、Bashに\a
を介してBEL
(Prompt_COMMAND
)文字を印刷させることができます。
Prompt_COMMAND='printf \\a'
Prompt_COMMAND
をこのように設定すると、各コマンドの最後にBashがprintf \\a
を実行し、端末がサウンドを再生します(muruが指摘するように、単にプロンプトの再描画をトリガーすると端末が作成されます)サウンドを再生します。たとえば、新しいプロンプトが描画されるたびにサウンドが再生されます。たとえば、単にヒットした場合でも ENTER)。
これは端末の機能であるため、すべての端末で機能するとは限りません。たとえば、コンソールでは機能しません(ただし、gnome-terminal
およびxterm
で機能するはずです)。
コマンド
speaker-test
ノイズ音を出します。最もシンプルだが迷惑なソリューション。 :-)
ノイズ信号を設定するオプションについては、 manual of 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)
は、完成したWordになります。
例2:non_existing_command_error && (say done ; echo done) || (echo error ; say error)
はエラーWordになります。
* gnustep-gui-runtime
が必要-
Sudo apt-get install gnustep-gui-runtime
乾杯。
ffmpegサイン波
ミニマリストのために、1000 Hzのサインを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でテスト済み。
サウンドを再生し、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
自宅で新しいディレクトリを作成し、noti
と呼びます
mkdir ~/noti
noti.sh をダウンロードし、上記のnoti
dirに展開します。
ターミナルを開き、ディレクトリを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"