ルギア君の戯言

雑多な記事。

twittering-mode で新しいリプライがあった時に音を鳴らす (追加)

d:id:lugia:20110609:1307570201 のつづき。わざわざ @ さんにコメントをいただいたので (じつは既にリンクは張ってあるんですが)、そのお礼も兼ねて。

まずは C-c C-e の時に鳴らさない方法

といってもさほど迷惑なわけではない。

(add-hook 'twittering-new-tweets-hook
	  (lambda ()
	    (if (and (string=
		      (twittering-timeline-spec-to-string 
		       twittering-new-tweets-spec) 
		      ":replies")
		     (not (eq 
		      (length 
		       (twittering-current-timeline-data 
			twittering-new-tweets-spec)) 
		      twittering-new-tweets-count)
		     ))
		(start-process "twittering-notify-sound" nil "paplay"
			       "/usr/share/sounds/KDE-Im-User-Auth.ogg"
			       "--volume=20000")
	      )
	    )
	  )

Emacs 内蔵の再生機能を使う (そんなものまで持っていたとは…)

(add-hook 'twittering-new-tweets-hook
	  (lambda ()
	    (if (and (string=
		      (twittering-timeline-spec-to-string 
		       twittering-new-tweets-spec) 
		      ":replies")
		     (not (eq 
		      (length 
		       (twittering-current-timeline-data 
			twittering-new-tweets-spec)) 
		      twittering-new-tweets-count)
		     ))
                (play-sound-file "/usr/share/sounds/purple/recieve.wav")
	      )
	    )
	  )

鳴るねぇ。確かに。でももとのままでいいや。そんなに遅延気にならないし。
詳しくは Sound Output - GNU Emacs Lisp Reference Manual
wav か au ファイルということだが、PCM のみなのか ADPCM などにも対応しているのかなどはこのマニュアルには載っていない。

あらかじめ開いておく

これは EmacsWiki: Twittering Mode を参照。
面倒なわけではないが、メモリを食うので止めておく。
(メモリを食うのは twittering-mode というよりは Emacs の問題で、バッファの中身を全部メモリに展開している (と思われる) ことによる)

音量

個人的にはハードコードしたくはない (研究室ではイヤホン、家ではヘッドホンで、インピーダンスが違うため。さすがにこの判別は無理なのでw)。

Emacs Lisp
(play-sound-file "foo.wav" [音量]) ;; 0.0 〜 1.0 / 浮動小数点数
paplay
$ paplay foo.wav --volume=[音量]   # 0 〜 65535 / 整数値
mplayer
$ mplayer foo.wav -volume=[音量]  # -1 〜 100 / 整数値
ffplay

ない。よく考えたら、これスペクトルでるのね。

xine
$ xine --no-splash -I -H --auto-play=hq -S volume=[音量] /usr/share/sounds/KDE_Error.wav
  # 0 〜 100 / 整数値

手元の環境下だと --auto-play のオプションが Segmentation Fault を起こす。再生はされる模様だが音は出ず。(KDE で使っているせい?)

cvlc
$ cvlc --volume [音量] --play-and-exit /usr/share/sounds/KDE_Logout_2.ogg
  # 0 〜 1024 / 整数値

手元の環境だと音量調整は効かず。