79e1fcc490535353fe240437ec748e646176292b
[gnus] / lisp / gnus-audio.el
1 ;;; gnus-audio.el --- Sound effects for Gnus
2 ;; Copyright (C) 1996, 2000, 2003 Free Software Foundation
3
4 ;; Author: Steven L. Baur <steve@miranova.com>
5 ;; Keywords: news, mail, multimedia
6
7 ;; This file is part of GNU Emacs.
8
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
12 ;; any later version.
13
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 ;; GNU General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
21 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 ;; Boston, MA 02110-1301, USA.
23
24 ;;; Commentary:
25
26 ;; This file provides access to sound effects in Gnus.
27 ;; This file is partially stripped to support earcons.el.
28
29 ;;; Code:
30
31 (require 'nnheader)
32
33 (defgroup gnus-audio nil
34   "Playing sound in Gnus."
35   :version "21.1"
36   :group 'gnus-visual
37   :group 'multimedia)
38
39 (defvar gnus-audio-inline-sound
40   (or (if (fboundp 'device-sound-enabled-p)
41           (device-sound-enabled-p))     ; XEmacs
42       (fboundp 'play-sound))            ; Emacs 21
43   "Non-nil means try to play sounds without using an external program.")
44
45 (defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds")
46   "The directory containing the Sound Files."
47   :type '(choice directory (const nil))
48   :group 'gnus-audio)
49
50 (defcustom gnus-audio-au-player (executable-find "play")
51   "Executable program for playing sun AU format sound files."
52   :group 'gnus-audio
53   :type '(choice file (const nil)))
54
55 (defcustom gnus-audio-wav-player (executable-find "play")
56   "Executable program for playing WAV files."
57   :group 'gnus-audio
58   :type '(choice file (const nil)))
59
60 ;;; The following isn't implemented yet.  Wait for Millennium Gnus.
61 ;;(defvar gnus-audio-effects-enabled t
62 ;;  "When t, Gnus will use sound effects.")
63 ;;(defvar gnus-audio-enable-hooks nil
64 ;;  "Functions run when enabling sound effects.")
65 ;;(defvar gnus-audio-disable-hooks nil
66 ;;  "Functions run when disabling sound effects.")
67 ;;(defvar gnus-audio-theme-song nil
68 ;;  "Theme song for Gnus.")
69 ;;(defvar gnus-audio-enter-group nil
70 ;;  "Sound effect played when selecting a group.")
71 ;;(defvar gnus-audio-exit-group nil
72 ;;  "Sound effect played when exiting a group.")
73 ;;(defvar gnus-audio-score-group nil
74 ;;  "Sound effect played when scoring a group.")
75 ;;(defvar gnus-audio-busy-sound nil
76 ;;  "Sound effect played when going into a ... sequence.")
77
78
79 ;;;###autoload
80 ;;(defun gnus-audio-enable-sound ()
81 ;;  "Enable Sound Effects for Gnus."
82 ;;  (interactive)
83 ;;  (setq gnus-audio-effects-enabled t)
84 ;;  (gnus-run-hooks gnus-audio-enable-hooks))
85
86 ;;;###autoload
87                                         ;(defun gnus-audio-disable-sound ()
88 ;;  "Disable Sound Effects for Gnus."
89 ;;  (interactive)
90 ;;  (setq gnus-audio-effects-enabled nil)
91 ;;  (gnus-run-hooks gnus-audio-disable-hooks))
92
93 ;;;###autoload
94 (defun gnus-audio-play (file)
95   "Play a sound FILE through the speaker."
96   (interactive "fSound file name: ")
97   (let ((sound-file (if (file-exists-p file)
98                         file
99                       (expand-file-name file gnus-audio-directory))))
100     (when (file-exists-p sound-file)
101       (cond ((and gnus-audio-inline-sound
102                  (condition-case nil
103                      ;; Even if we have audio, we may fail with the
104                      ;; wrong sort of sound file.
105                      (progn (play-sound-file sound-file)
106                             t)
107                    (error nil))))
108             ;; If we don't have built-in sound, or playing it failed,
109             ;; try with external program.
110             ((equal "wav" (file-name-extension sound-file))
111              (call-process gnus-audio-wav-player
112                            sound-file
113                            0
114                            nil
115                            sound-file))
116             ((equal "au" (file-name-extension sound-file))
117              (call-process gnus-audio-au-player
118                            sound-file
119                            0
120                            nil
121                            sound-file))))))
122
123
124 ;;; The following isn't implemented yet, wait for Red Gnus
125 ;;(defun gnus-audio-startrek-sounds ()
126 ;;  "Enable sounds from Star Trek the original series."
127 ;;  (interactive)
128 ;;  (setq gnus-audio-busy-sound "working.au")
129 ;;  (setq gnus-audio-enter-group "bulkhead_door.au")
130 ;;  (setq gnus-audio-exit-group "bulkhead_door.au")
131 ;;  (setq gnus-audio-score-group "ST_laser.au")
132 ;;  (setq gnus-audio-theme-song "startrek.au")
133 ;;  (add-hook 'gnus-select-group-hook 'gnus-audio-startrek-select-group)
134 ;;  (add-hook 'gnus-exit-group-hook 'gnus-audio-startrek-exit-group))
135 ;;;***
136
137 (defvar gnus-startup-jingle "Tuxedomoon.Jingle4.au"
138   "Name of the Gnus startup jingle file.")
139
140 (defun gnus-play-jingle ()
141   "Play the Gnus startup jingle, unless that's inhibited."
142   (interactive)
143   (gnus-audio-play gnus-startup-jingle))
144
145 (provide 'gnus-audio)
146
147 (run-hooks 'gnus-audio-load-hook)
148
149 ;;; arch-tag: 6f129e78-3416-4fc9-973f-6cf5ac8d654b
150 ;;; gnus-audio.el ends here