sound-wav 20160725.724(in MELPA)
Play wav file

概要

プログラミング中に効果音があってもいいのではないでしょうか?
キーを叩くと同時にタイプライターの音が鳴るというのも、
なかなかオツなものではないでしょうか?

このsound-wavパッケージはvimのvim-soundプラグインの移植版です。

これを使えばEmacsを使っていても音を鳴らせます。

作者は主にquickrun(レビュー)などのvimプラグインを
多数移植されているsyohexさんです。

エントリポイントは sound-wav-play のみです。
この関数にwavファイルのフルパスを渡します。
現時点では「~」を指定できないため expand-file-name
使う必要があります。

Unix系OSならばafplayまたはaplayを使ってwavファイルを再生します。
Windowsを使っているならばPowerShellをインストールすれば軽快になります。

Vimでの先人たち。

そういえば僕も同じようなことをやっていました。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてsound-wavを使う方は
以下のコマンドを実行します。

M-x package-install sound-wav

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name sound-wav

タイプライターの音源を手に入れる

http://www.videocopilot.net/blog/2013/08/free-typewriter-model-sound-fx/
からDownload Typewriter Sound FXをダウンロードすればいろいろなSEが手に入ります。

$ cd ~
$ mkdir -p sound; cd sound
$ wget http://www.videocopilot.net/assets/public/misc/Typewriter_Sound_FXs.zip
$ unzip Typewriter_Sound_FXs.zip

これで ~/sound/Typewriter_Sound_FXs/ 以下に音源が展開されます。

サブディレクトリに Typewriter_Sound_FXs/ と
Antique_Typewriter_Sound_FXs/ がありますので
好きなSEを選んでください。

mp3他ならばmplayerで再生させてみよう

もしMPlayer を持っているならばアドバイスをかけることで
wav以外のファイルも再生できます。

(defun sound-wav--do-play-by-mplayer (files)
  (deferred:$
    (apply 'deferred:process "mplayer" files)))
(advice-add 'sound-wav--do-play :override 'sound-wav--do-play-by-mplayer)

設定 160817113854.sound-wav.el(以下のコードと同一)

;;; ファイルを開くときの効果音
(defun find-file-hook--sound ()
  (sound-wav-play
   (expand-file-name
    "~/sound/Typewriter_Sound_FXs/Antique_Typewriter_Sound_FXs/Paper_load.wav")))
(add-hook 'find-file-hook 'find-file-hook--sound)

;;; キーを叩くたびに音を出す(うるさいので注意(笑))
(defun post-command-hook--sound ()
  (ignore-errors
    (sound-wav-play
     (expand-file-name
      (cl-case last-command-event
        (?\s "~/sound/Typewriter_Sound_FXs/Typewriter_Sound_FXs/Spacebar.wav")
        ('backspace "~/sound/Typewriter_Sound_FXs/Typewriter_Sound_FXs/Backspace.wav")
        ((?\C-m 'return) "~/sound/Typewriter_Sound_FXs/Typewriter_Sound_FXs/Return.wav")
        ;; やかましいので2回に1回のペースで鳴らすか
        (t (when (zerop (random 2))
             "~/sound/Typewriter_Sound_FXs/Typewriter_Sound_FXs/1_click.wav")))))))
(add-hook 'post-command-hook 'post-command-hook--sound)

実行方法

$ wget http://rubikitch.com/f/160817113854.sound-wav.el
$ emacs -Q -f package-initialize -l 160817113854.sound-wav.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。