From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Sexton Subject: Audio/video file playback in org mode Date: Thu, 9 Jun 2011 21:55:17 +0000 (UTC) Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([140.186.70.92]:40724) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QUnCX-0007Jf-0h for emacs-orgmode@gnu.org; Thu, 09 Jun 2011 17:55:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QUnCU-00025F-Vp for emacs-orgmode@gnu.org; Thu, 09 Jun 2011 17:55:40 -0400 Received: from lo.gmane.org ([80.91.229.12]:49322) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QUnCU-000257-Gj for emacs-orgmode@gnu.org; Thu, 09 Jun 2011 17:55:38 -0400 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1QUnCL-0003Ab-Q8 for emacs-orgmode@gnu.org; Thu, 09 Jun 2011 23:55:32 +0200 Received: from rp.young.med.auckland.ac.nz ([130.216.140.20]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 09 Jun 2011 23:55:29 +0200 Received: from psexton by rp.young.med.auckland.ac.nz with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 09 Jun 2011 23:55:29 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org 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 "") 'bongo-pause/resume) (define-key org-mode-map (kbd "") 'bongo-pause/resume) ;; Numpad Ctrl-.: stop current track, or restart from beginning if stopped (define-key org-mode-map (kbd "") 'bongo-start/stop) (define-key org-mode-map (kbd "") 'bongo-start/stop) ;; Numpad Ctrl-PgUp, Ctrl-PgDn: raise/lower volume (define-key org-mode-map (kbd "") 'bongo-volume-raise) (define-key org-mode-map (kbd "") 'bongo-volume-lower) (define-key org-mode-map (kbd "") 'bongo-volume-raise) (define-key org-mode-map (kbd "") 'bongo-volume-lower) ;; Numpad Ctrl-left, Ctrl-right: skip back/forward 10 seconds (define-key org-mode-map (kbd "") 'bongo-seek-backward-10) (define-key org-mode-map (kbd "") 'bongo-seek-forward-10) (define-key org-mode-map (kbd "") 'bongo-seek-backward-10) (define-key org-mode-map (kbd "") 'bongo-seek-forward-10)