Making a Soundboard in Emacs
While I’m running a role playing game, I really like having music and audio effects playing. I’ve noticed I can’t have very many apps running… I essentially want Emacs displaying my notes and—that’s it. So why not see if I can’t make a soundboard, a way to play music tracks and audio files easily.
Playing Sounds
Seems like my first step is to have a function that can play an audio file, but abstracted, so it can work with either my Mac or Linux system.
(defun soundboard-play (file &rest options) "Play an audio FILE. Any additional parameters affect how the audio should be played. - `:repeat' a integer number of times to play the FILE. - `:until' replace audio until variable given is t." (message "%s" options) (cond ((plist-get :repeat options) (soundboard-play-repeat file)) ((plist-get :until options) (message "Doing until")) (t (soundboard--play-audio file 'ignore)))) (soundboard-play "bubba" :until 'isay) (defun soundboard-play-repeat (file repeat) "Play audio FILE a number of REPEAT times." (when (> repeat 0) (soundboard--play-audio file (lambda (ignored) (soundboard-play-repeat file (1- repeat)))))) (defun soundboard--play-audio (file callback) "Play an audio FILE, and call CALLBACK when finished." (lexical-let ((command (if (equal system-type 'darwin) (format "afplay %s" file) (format "aplay %s" file)))) (async-start (lambda () (shell-command command "*soundboard-results*")) callback))) (soundboard--play-audio "afplay ~/Downloads/fountain.wav" 'ignore) (shell-command "afplay ~/Downloads/fountain.wav")