スクリプトの最後にRのビープ音を鳴らしたり音を鳴らしたりする方法はありますか?


149

Rスクリプトを実行するとき、別のデスクトップで何か他のことをします。頻繁にチェックしないと、いつ終了するかわからない。システムビープなどのビープ音を鳴らしたり、スクリプトの最後のコードでRに音を鳴らしたり、うなり声を通知したりする方法はありますか?

回答:


98
alarm()

アラーム機能。\aコンソールに送信することで機能します


1
シンプルで完璧ですが、PCスピーカーを無効にしている場合は役に立ちません。それがWindowsでどのように実行されるか私にはわかりませんが。
aL3xa 2010

@Mulone:私、MacOSX 10.11.1、R 3.2.2で機能します。かすかな「ポン」という音が聞こえます。
ベンジャミン

5
Windows 7、x64、R 3.2.2では動作しません。beepr以下のパッケージは問題なく動作します。
オーガスティン

159

beeprクロスプラットフォームで動作する通知サウンドをRで作成することのみを目的としたパッケージ()があります。次のコマンドを実行してbeeprをインストールし、音を出します。

install.packages("beepr")
library(beepr)
beep()

githubの詳細:https : //github.com/rasmusab/beepr


1
ねえラスムス、クールに見えます。このページには多くの可視性があるので、私はここで尋ねると思いました:オプションからbeeprを呼び出すことができます、つまり、options(error = beepr(sound = 9))?実行が成功した後に呼び出すと便利ですが、コードがクラッシュした場合に呼び出すと便利です...乾杯!
dez93_2000

4
承知しました!次のような関数にラップする必要がありますoptions(error = function() {beep(9)})
でも非常に

3
やったー!他のいくつかの提案がうまくいかなかったとき、それは私のWindows 7マシンで動作します。
jeramy townsley、2015

5
これは私のお気に入りのパッケージとしてdplyrを追い越しました:D
Mullefa

2
@lukeA while (1) beepr::beep(3) それは私にとってもあなたにとっても奇妙でしたか?:}
rawr

59

MacOSXでは、コンピュータに話させることができます:

system("say Just finished!")

また、発声する人工音声を変更することもできます。

system("say -v Kathy Just finished!")

コンピュータで利用可能な任意の音声を選択できます。ヨセミテでは、システム環境設定->ディクテーション&スピーチ->テキスト読み上げでインストールされている音声を確認できます。


50

2
ケン:それは素晴らしいことです!同じ部屋にいる必要もなくなりました。ハッピーアワーに行って、コードが完了したとdmが言うdmが表示されるまで、ビールを1杯または数杯飲むことができます。私はそれを試してみました、そしてそれは素晴らしい働きをします。
マイアサウラ2010

33

alarm 私のWindowsマシンでは動作しないため、実際にノイズを発生させる関数を作成しました。

beep <- function(n = 3){
    for(i in seq(n)){
        system("rundll32 user32.dll,MessageBeep -1")
        Sys.sleep(.5)
    }
}

これは明らかにWindowsでのみ機能する可能性がありますが、任意のWindowsコンピューターで実行できることさえ保証できません。私はそれを自分のマシンでテストしただけですが、誰かがalarm私と同じ問題を抱えている場合に備えて投稿すると思っていました。


1
変だ。alarm()私のマシンを騒がせます(XP、Rをインタラクティブに実行)
BenBarnes 2012

1
DasonのコードがWindows 7マシンで動作しないようです。
russellpierce 2013

@drknexus他のオプションは私のマシンでは動作しませんでした。これは私のマシンで動作しました。私はそれが任意のマシンで動作すると主張したことalarm()はありませんが、私のマシンでは動作しなかったために提供しただけで、何らかの理由でこれは動作しました。
Dason

29

cat( 'Hello world!\ a')


マリオは申し訳ありませんが、それはまったく役に立ちません。画面を見ることができれば、いつ完了したかを確実に知ることができます。これ以上何も出力する必要はありません。聞こえるものを探していました。申し訳ありませんが、あなたの答えを隠しました(元に戻すことはできません)
マイアサラ2010

5
なぜこれが反対投票になるのですか?見てalarm、ソースとあなたは何それがないことがちょうどであることがわかりますcat("\a")コール。
nico 2010

さて、あなたは何を知っていますか...ここに説明があります:ユーザーに可聴信号または視覚信号を与えます。しかし、それはと同じですcat("foo\a")。たぶんユーザーはこれを読んだことがありcat("Hello world!\n")ますか?
わかりにくい

2
ヒントをありがとう、alarm()= cat( '\ a')に気づかなかった。補足として、CとC ++で '\ a'を​​実行することもできます(これは、実行中のことを通知するためにこれを使用してきた方法です)。OS Xを使用していて、[システム環境設定]> [ユニバーサルアクセス]> [聴覚]> [画面をフラッシュする...]を有効にしている場合は、aを実行すると画面全体が点滅します。
mpk

17

それだけでなく、プログラムがループしたときにYoutubeからいくつかの壮大な音楽を入れることもできます:)(Ubuntu / Debianの場合:)

system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'")

はい、残念ながら...削除されました...しかし、アイデアは明確です:)
モルドバ共和国

1
私はこれを試したいです、別のコピーを見つけてください!:)
Waldir Leoncio 2013

12

shell.exec("url")WindowsでYouTubeクリップを開くために使用してください


これはアプローチが過小評価されていることです。比較的長い信号ですが、生成された信号は簡単に消音されます(短い/ aとは対照的に)
russellpierce 2013

...私は、Windows以外のプラットフォームで機能する同じタイプの回答を以下に示します。
russellpierce 2018

11

更新:

macOS 10.9(Mavericks)以降では、プレーンなAppleScriptを使用して通知を投稿できます。

theTitle <- "A Title"
theMsg <- "A message here"

cmd <- paste("osascript -e ", "'display notification ", '"', theMsg, '"', ' with title ', '"', theTitle, '"', "'", sep='')
system(cmd)

これにより、terminal-notifier以下で参照するをインストールする必要がなくなります。

-

私が持っている端末通知は、コマンドラインからデスクトップ通知を得るために、私のMacにインストールされています。次に、system()次のようなコマンドの呼び出しをまとめます(明らかにパスを変更します)。

notify <- function(msgString='Message from R', titleString='Message from R', speakIt=FALSE) {
    cmd <- paste('~/terminal-notifier/terminal-notifier.app/Contents/MacOS/terminal-notifier -message ', '"', msgString, '"  -title "', titleString, '"', sep='')
    system(cmd)

    if (speakIt) {
        system(paste('say', msgString))
    }

}

このような関数を呼び出すことができます

notify("R is done", "Message from R", speakIt=TRUE)

このようなメッセージを取得するには:

ここに画像の説明を入力してください

更新:@VLCのsayコマンドが含まれています。


10

GUIとWebブラウザーを備えたOSに対して、OSに依存しないものはどうでしょうか?RStudio Serverでも動作します!

browseURL('https://www.youtube.com/watch?v=QH2-TGUlwu4')

4
私は半分がリックロールを期待していた
Ic3fr0g

8

または、GNU / Linuxディストリビューションを使用していて、pcspkrモジュールをブラックリストに登録している場合(PCスピーカーは常に私を困らせていました)、systemいくつかの監査/視覚通知と組み合わせてみてください。

system("aplay -t wav /usr/share/sounds/phone.wav") # for auditive bell (an I mean it literary)
system("zenity --title=\"R script info\" --text=\"Script has finished with zero exit status\" --info") # for GTK dialog

あなたは確認することができzenityを使うと、あなたがでアラートを好む場合は、マニュアルを、言って、通知領域...しかし、してsystem機能を、あなたはほとんど何でも行うことができます、マシンをリブートし、他のいくつかのスクリプトを実行し、電子メールを送信するsudo rm -rf *.*など、何でも ...そして私はそれを意味します。

しかし、これが唯一の立っているのIFあなたはGNU / Linuxの(またはUNIX)ディストリビューションを実行している、そうでない場合は、Windowsの特定のコマンドにスティックが、その場合にも、私はあなたに多くの情報を与えることはできません...


7
これまでのMacOSXと同等であるgrowlnotifyうなり声(とパッケージ化スクリプト(growl.info):system("growlnotify -t 'R script info' -m 'Finished!'")
マイケル・ダン

6

に触発されてbeepr、これは私がこれらの種類の問題のために私が現在使用している機能です:D

work_complete <- function() {
  cat("Work complete. Press esc to sound the fanfare!!!\n")
  on.exit(beepr::beep(3))

  while (TRUE) {
    beepr::beep(4)
    Sys.sleep(1)
  }
}


5

このパッケージを見てください:RPushBullet

コンピューター、携帯電話、タブレット間の高速かつ効率的な通知(およびファイル転送)を提供するPushbulletメッセージングサービスへのRインターフェイス

RPushbulletは完全に無料のマルチプラットフォームです。あなたの質問については、このライブラリを使用してブラウザにプッシュを送信できますが、不在時に通知できるものが必要な場合は明らかに驚くべきことになります。さらに、Rパッケージの作成者は、よく知られているRcpp、Dirk Eddelbuettelと同じです。それは一撃の価値があると思います!



0

これらの多くのアイデアのため、私はWindowsでVPNクライアントを使用するため、インターネットアクセスなしのソリューションを作成しました。そのため、Windowsオペレーティングシステムの通常のWindowsサウンドを再生します。

#Function with loop, press Esc to stopp      
    alarm2 <- function(){
      while(TRUE){
        system("cmd.exe",input="C:/Windows/WinSxS/amd64_microsoft-windows-shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
        Sys.sleep(1)
      }
    }

ループのない機能

    alarm3 <- function(){
        system("cmd.exe",input="C:/Windows/WinSxS/amd64_microsoft-windows-shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
        Sys.sleep(1)
    }

1
この質問には適切な形式で回答していますが、より良い回答方法
v8-E 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.