I have spent a few hours figuring this out so I thought I would post it for the benefit of others.
I am learning a language, and wanted to include hyperlinks to audio files within my org document, and be able to play each file by clicking on the link. I eventually discovered the variable 'org-file-apps' which allows you to associate particular applications with particular file types. I am using Bongo (https://github.com/dbrock/bongo) as the media player. EMMS is another actively developed media player, but setup looked too complicated at first glance. I am using MPlayer as the actual media player. This supports almost all audio and video file formats. Most importantly, it works on Windows as well as on Linux (VLC has a Windows port but it doesn't work with Bongo as the 'fake-tty' interface is not implemented on Windows.) My current setup means that clicking on a link such as [[file:song.mp3]] adds it to the active Bongo playlist (in another buffer) and immediately starts playing it. Playback can be paused, fast-forwarded etc using Bongo. When Bongo plays a file it puts some icons in the modeline that resemble the 'play', 'stop' etc symbols, and can be used to control playback using the mouse. I found these worked erratically outside the actual Bongo playlist buffer, so I have instead bound some org-mode keys (ctrl + numpad keys) to the relevant functions. This is optional of course. I have only tested this with mp3 files, but it ought to work with video as well. My setup follows: ------------------- ;;; Part 1. Bongo setup (add-to-list 'load-path "/path/to/bongo")) (autoload 'bongo "bongo" "Start Bongo by switching to a Bongo buffer." t) (setq bongo-mplayer-program-name (case system-type ((windows-nt cygwin) "c:\\Program Files\\MPlayer for Windows\\MPlayer.exe") (t "mplayer"))) (setq bongo-enabled-backends '(mplayer)) ;;; Part 2. Org setup (defvar av-file-regex (concat "\\." (regexp-opt (append bongo-audio-file-name-extensions bongo-video-file-name-extensions)) "$")) (add-to-list 'org-file-apps (cons av-file-regex '(org-play-media-file file))) (defun org-play-media-file (filename) (with-bongo-buffer (bongo-insert-file filename) (backward-char) (bongo-play))) ;;; Part 3. Keybindings to allow control of playback within Org buffer ;;; (optional) ;; Numpad Ctrl-0: pause/resume (define-key org-mode-map (kbd "<C-kp-0>") 'bongo-pause/resume) (define-key org-mode-map (kbd "<C-kp-insert>") 'bongo-pause/resume) ;; Numpad Ctrl-.: stop current track, or restart from beginning if stopped (define-key org-mode-map (kbd "<C-kp-decimal>") 'bongo-start/stop) (define-key org-mode-map (kbd "<C-kp-delete>") 'bongo-start/stop) ;; Numpad Ctrl-PgUp, Ctrl-PgDn: raise/lower volume (define-key org-mode-map (kbd "<C-kp-prior>") 'bongo-volume-raise) (define-key org-mode-map (kbd "<C-kp-next>") 'bongo-volume-lower) (define-key org-mode-map (kbd "<C-kp-9>") 'bongo-volume-raise) (define-key org-mode-map (kbd "<C-kp-3>") 'bongo-volume-lower) ;; Numpad Ctrl-left, Ctrl-right: skip back/forward 10 seconds (define-key org-mode-map (kbd "<C-kp-left>") 'bongo-seek-backward-10) (define-key org-mode-map (kbd "<C-kp-right>") 'bongo-seek-forward-10) (define-key org-mode-map (kbd "<C-kp-4>") 'bongo-seek-backward-10) (define-key org-mode-map (kbd "<C-kp-6>") 'bongo-seek-forward-10)