;; This is very similar to chess-announce, except it uses specific
;; .WAV files instead of text-to-speech.
;;
-;; $Revision$
(require 'chess-game)
:group 'chess-sound)
(defsubst chess-sound (file)
- (funcall chess-sound-play-function
- (expand-file-name (concat file ".wav")
- chess-sound-directory)))
+ (ignore-errors
+ (funcall chess-sound-play-function
+ (expand-file-name (concat file ".wav")
+ chess-sound-directory))))
(defsubst chess-sound-play (file)
(apply 'call-process chess-sound-program
(file-readable-p (expand-file-name "move.wav"
chess-sound-directory))
(or (eq chess-sound-play-function 'play-sound-file)
- (file-executable-p chess-sound-program))))
+ (and chess-sound-program
+ (file-executable-p chess-sound-program)))))
((eq event 'move)
(let* ((ply (chess-game-ply game (1- (chess-game-index game))))
(chess-sound "move"))
(let* ((source (chess-ply-source ply))
(target (chess-ply-target ply))
- (s-piece (chess-pos-piece pos source))
- (t-piece (chess-pos-piece pos target))
+ (s-piece (and source (chess-pos-piece pos source)))
+ (t-piece (and target (chess-pos-piece pos target)))
(which (chess-ply-keyword ply :which))
text)
(cond
(chess-sound "O-O"))
((chess-ply-keyword ply :long-castle)
(chess-sound "O-O-O"))
- ((= t-piece ? )
+ ((and s-piece t-piece (= t-piece ? ) target)
(if which
(chess-sound (char-to-string which)))
(chess-sound (format "%c_" (downcase s-piece)))
(chess-sound (chess-index-to-coord target)))
- (t
+ ((and s-piece t-piece target)
(if which
(chess-sound (char-to-string which)))
(chess-sound (format "%c_" (downcase s-piece)))
(chess-sound (format "%c_" (downcase t-piece)))
(chess-sound (chess-index-to-coord target))))
+ (if (chess-ply-keyword ply :promote)
+ (chess-sound
+ (format "%c_" (downcase
+ (chess-ply-keyword ply :promote)))))
(if (chess-ply-keyword ply :en-passant)
(chess-sound "enpassant"))
(if (chess-ply-keyword ply :check)