emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Audio/video file playback in org mode
@ 2011-06-09 21:55 Paul Sexton
  2011-06-09 22:22 ` Eric Schulte
  2011-06-10  8:28 ` Michael Brand
  0 siblings, 2 replies; 11+ messages in thread
From: Paul Sexton @ 2011-06-09 21:55 UTC (permalink / raw)
  To: emacs-orgmode

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)

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-06-12  9:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-09 21:55 Audio/video file playback in org mode Paul Sexton
2011-06-09 22:22 ` Eric Schulte
2011-06-10  8:28 ` Michael Brand
2011-06-10 16:10   ` brian powell
2011-06-11  4:57     ` Paul Sexton
2011-06-11 14:00       ` Memnon Anon
2011-06-11 23:55         ` Alan E. Davis
2011-06-12  8:23           ` Christian Moe
2011-06-12  9:34             ` Michael Brand
2011-06-11  4:53   ` Paul Sexton
     [not found]   ` <4DF2F3B6.2030400@xnet.co.nz>
2011-06-11  6:23     ` Michael Brand

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).