/emms-player-simple-mpv

An extension of emms-player-simple.el for mpv JSON IPC

Primary LanguageEmacs Lisp

https://melpa.org/packages/emms-player-simple-mpv-badge.svg https://stable.melpa.org/packages/emms-player-simple-mpv-badge.svg

emms-player-simple-mpv

emms-player-simple-mpv.el is an extension of emms-player-simple.el for mpv JSON IPC. It provides basic functions for interface defined in EMMS ( The Emacs Multimedia System ).

emms-player-simple-mpv-control-functions.el provides other functions to control mpv.

The following example configuration files are available:

  • emms-player-simple-mpv-e.g.time-display.el
  • emms-player-simple-mpv-e.g.playlist-fname.el
  • emms-player-simple-mpv-e.g.hydra.el

Table of contents

Requirements

Tested on GNU Emacs 25.3.1 (emacs-mac-app 6.7_0), EMMS 4.3, mpv v0.26.0.

Setup

(add-to-list 'load-path "/path/to/emms-player-simple-mpv")
(require 'emms-player-simple-mpv)
;; This plugin provides control functions (e.g. ab-loop, speed, fullscreen).
(require 'emms-player-simple-mpv-control-functions)

Usage

;; An example of setting like emms-player-mplayer.el
;; `emms-player-my-mpv' is defined in this case.
(define-emms-simple-player-mpv my-mpv '(file url streamlist playlist)
    (concat "\\`\\(http[s]?\\|mms\\)://\\|"
            (apply #'emms-player-simple-regexp
                   "aac" "pls" "m3u"
                   emms-player-base-format-list))
    "mpv" "--no-terminal" "--force-window=no" "--audio-display=no")

(emms-player-simple-mpv-add-to-converters
 'emms-player-my-mpv "." '(playlist)
 (lambda (track-name) (format "--playlist=%s" track-name)))

(add-to-list 'emms-player-list 'emms-player-my-mpv)

(dolist (map (list emms-playlist-mode-map
                   emms-stream-mode-map))
  (define-key map (kbd "m") 'emms-player-simple-mpv-mute)
  (define-key map (kbd "[") 'emms-player-simple-mpv-speed-decrease)
  (define-key map (kbd "]") 'emms-player-simple-mpv-speed-increase)
  (define-key map (kbd "{") 'emms-player-simple-mpv-speed-halve)
  (define-key map (kbd "}") 'emms-player-simple-mpv-speed-double)
  (define-key map (kbd "<backspace>") 'emms-player-simple-mpv-speed-normal)
  (define-key map (kbd "T") 'emms-player-simple-mpv-ontop)
  (define-key map (kbd "F") 'emms-player-simple-mpv-fullscreen)
  (define-key map (kbd "9") 'emms-volume-lower)
  (define-key map (kbd "0") 'emms-volume-raise))

(let ((map emms-playlist-mode-map))
  (define-key map (kbd ",") 'emms-player-simple-mpv-playlist-prev)
  (define-key map (kbd ".") 'emms-player-simple-mpv-playlist-next))
;; Playing YouTube playlist in reverse order.
;; `emms-player-my-mpv-ytpl-reverse' will be defined in this case.
(define-emms-simple-player-mpv my-mpv-ytpl-reverse '(url)
  "\\`http[s]://www\\.youtube\\.com/playlist\\?list="
  "mpv" "--no-terminal" "--force-window=no" "--audio-display=no"
  "--ytdl" "--ytdl-raw-options=playlist-reverse=")

(add-to-list 'emms-player-list 'emms-player-my-mpv-ytpl-reverse)

M-x emms-player-simple-mpv-playlist-popup can display playlist

Customization

Macro: define-emms-simple-player-mpv name types regex command &rest args

This macro emulates define-emms-simple-player. See EMMS Manual 11 Simple Players.

Function: emms-player-simple-mpv-add-to-converters player regexp types fn &optional appendp

This function adds a list (regexp types fn) to player’s mpv-track-name-converters. fn converts track name to input form when mpv needs specific format such as ffplay format for playing some protocols.

User Option: emms-player-simple-mpv-use-volume-change-function-p

Default value is t. If the variable is non-nil, emms-player-simple-mpv-volume-change is used as emms-volume-change-function while an emms simple player of mpv is running.

Minor Mode: emms-player-simple-mpv-keep-volume-mode

If it is non-nil, the last volume value is used when new track starts.

(emms-player-simple-mpv-keep-volume-mode 1) provides it.

M-x emms-player-simple-mpv-keep-volume-mode toggles it.

Minor Mode: emms-player-simple-mpv-keep-speed-mode

If it is non-nil, the last speed value is used when new track starts. Only track type of file is available.

(emms-player-simple-mpv-keep-speed-mode 1) provides it.

M-x emms-player-simple-mpv-keep-speed-mode toggles it.

User Option: emms-player-simple-mpv-keep-properties

Alist of property name, function and symbol which has the last value. The function which checks the last value is available takes no arguments and returns boolean.

User Option: emms-player-simple-mpv-ipc-dir

The directory name for IPC. If nil, temporary-file-directory will be used.

Default value is nil.

User Option: emms-player-simple-mpv-tq-event-pause-hook

Normal hook run when TQ process receives “pause” from mpv.

User Option: emms-player-simple-mpv-tq-event-unpause-hook

Normal hook run when TQ process receives “unpause” from mpv.

User Option: emms-player-simple-mpv-tq-event-playback-restart-hook

Normal hook run when TQ process receives “playback-restart” from mpv.

User Option: emms-player-simple-mpv-tq-event-property-change-functions-alist

Alist of property name and abnormal hook. When TQ process receives “property-change”, an abnormal hook is run.

User Option: emms-player-simple-mpv-tq-event-filename-functions

Abnormal hook run with one argument which is filename.

emms-player-simple-mpv-tq-event-property-change-functions-alist includes it.

User Option: emms-player-simple-mpv-tq-event-volume-functions

Abnormal hook run with one argument which is volume.

emms-player-simple-mpv-tq-event-property-change-functions-alist includes it.

User Option: emms-player-simple-mpv-tq-event-speed-functions

Abnormal hook run with one argument which is speed.

emms-player-simple-mpv-tq-event-property-change-functions-alist includes it.

User Option: emms-player-simple-mpv-tq-event-duration-functions

Abnormal hook run with one argument which is duration.

Example configuration files

emms-player-simple-mpv-e.g.time-display.el

This file is an example configuration for emms-playing-time-display to synchronize with time-pos of mpv.

(requre 'emms-player-simple-mpv-e.g.time-display) provides it.

emms-player-simple-mpv-e.g.playlist-fname.el

This file is an example configuration for displaying filename of mpv for each track when a playlist file is used.

(requre 'emms-player-simple-mpv-e.g.playlist-fname) provides it.

emms-player-simple-mpv-e.g.hydra.el

This file is an example configuration for hydra ( https://github.com/abo-abo/hydra ). It emulates default key bindings of mpv player.

(requre 'emms-player-simple-mpv-e.g.hydra) provides it.

;; This variable can be set before loading.
(setq emms-player-simple-mpv-hydra-docstring "mpv hydra\n")
(require 'emms-player-simple-mpv-e.g.hydra)

Some examples of defining specific emms simple players of mpv

emms-player-simple-mpv-playlist-mode

Major mode for displaying mpv playlist.

Setup

(require 'emms-player-simple-mpv-playlist-mode)

;; Some mpv control functions can be added to `emms-player-simple-mpv-playlist-mode-map'.
(emms-player-simple-mpv-playlist-mode-setup-keybinds)

Usage

M-x emms-player-simple-mpv-playlist-popup

Some commands are defined:

Customization

User Option: emms-player-simple-mpv-playlist-mode-display-action

This will be used for the action arg of display-buffer in emms-player-simple-mpv-playlist-popup.

Default value is

'((display-buffer-reuse-window
  display-buffer-at-bottom
  display-buffer-pop-up-window)
  (window-height . 0.3))

User Option: emms-player-simple-mpv-playlist-mode-format-function

This can be set to a function name which is used for formatting a entry. The function takes a entry and the position as arguments.

Default value is emms-player-simple-mpv-playlist-mode-default-format-function.

Variable: emms-player-simple-mpv-playlist-mode-map

Keymap for emms-player-simple-mpv-playlist-mode the parent of which is special-mode. The following keys are added.

KeyAction
RETPlay the entry at point.
dRemove the entry at point.
M-upMove up the entry at point.
M-downMove down the entry at point.
>Call playlist-next.
<Call playlist-prev.
rCall playlist-shuffle.
RCall playlist-shuffle and set playlist-pos to 0.
gReload the playlist.
.Refresh the playlist (point will move to the current entry.)
cGo to the current entry point.

Function: emms-player-simple-mpv-playlist-mode-setup-keybinds

The following keys will be added to emms-player-simple-mpv-playlist-mode-map.

KeyAction
mToggle mute.
pToggle pause.
<left>/Seek -5 sec.
<right>Seek +5 sec.
S-<left>Seek -1 sec.
S-<right>Seek +1 sec.
[Decrease speed.
]Increase speed.
{Halve speed.
}Double speed.
<backspace>Reset speed to normal.
TToggle ontop.
fToggle fullscreen
9Decrease volume
0Increase volume
lCall ab-loop.

References