GNU-devel ELPA - listen (original) (raw)

To install this package from Emacs, use package-install or list-packages.

Table of Contents

listen.svg listen.svg

This package aims to provide a simple audio/music player for Emacs. It should "just work," with little-to-no configuration, have intuitive commands, and be easily extended and customized. (Contrast to setting up EMMS, or having to configure external players like MPD.) A Transient menu, under the command listen, is the primary entry point.

The only external dependency is either MPV or VLC, which are the supported player backends. Track metadata is read using EMMS's native Elisp metadata library, which has been imported into this package.

Queues are provided as the means to play consecutive tracks, and they are shown in a vtable-based view buffer. They are persisted between sessions using the persist library, and they may be bookmarked.

The primary interface to one's music library is through the filesystem, by selecting a file to play, or by adding files and directories to a queue. Although MPD is not required, support is provided for finding files from a local MPD server's library using MPD's metadata searching.

A simple "library" view is provided that shows a list of files organized into a hierarchy by genre, date, artist, album, etc. (This will be made more configurable and useful in the future.)

Note a silly limitation: a track may be present in a queue only once (but who would want to have a track more than once in a playlist).

1. Contents

2. Screenshots

screenshot-modus-vivendi-tinted.png

3. Installation

Requirements:

GNU ELPA

Listen.el is published in GNU ELPA as listen, so it may be installed in Emacs with the command M-x package-install RET listen RET. This is the recommended way to install Listen.el, as it will install the current stable release.

The latest development build may be installed from ELPA-devel or from Git (see below).

Git

The master branch of the Git repository is intended to be usable at all times; only minor bugs are expected to be found in it before a new stable release is made.

To install from Git, it is recommended to use quelpa-use-package, like this (using this helpful command for upgrading versions):

;; Install and load `quelpa-use-package'. (package-install 'quelpa-use-package) (require 'quelpa-use-package)

;; Install Listen. (use-package listen :quelpa (listen :fetcher github :repo "alphapapa/listen.el"))

One might also use systems like Elpaca or Straight (which is also used by DOOM), but the author cannot offer support for them.

4. Configuration

Listen is intended to work with little-to-no configuration. You can set the listen-directory to the location of your music library if it's not at ~/Music. See M-x customize-group RET listen RET.

5. Usage

Use the command listen to show the Transient menu. From there, it is–hopefully–self-explanatory. Please feel free to give feedback if it doesn't seem so. For more information, see the following sections.

Queues

While listen can simply play one track and stop, playing multiple tracks sequentially is provided by queues (what other players may call playlists). A queue is a list of tracks, each of which is backed by a file on disk, and which may have associated metadata (provided by reading the file in Emacs with the listen-info library, or from an external source, like an MPD server).

Queues are automatically persisted to disk in the variable listen-queues.

A new, empty queue may be made with the command listen-queue-new, but it's usually more convenient to use a command that adds tracks to a queue and enter a new queue name.

A queue's tracks may be de-duplicated using the command listen-queue-deduplicate. Tracks that appear to have the same metadata (artist, album, and title, compared case-insensitively) are de-duplicated. Also, any tracks no longer backed by a file are removed.

Adding tracks to a queue

Tracks can be added to a queue from various sources using these commands:

Queue buffer

A queue may be shown in a buffer with the command listen-queue, which shows its tracks in a vtable with columns for metadata and filename.

Queue list buffer

The queue list buffer may be shown with the command listen-queue-list. In the list buffer, you can use these commands:

Show queue's buffer listen-queue (RET)
Move point forward/backward forward-line (n) / previous-line (p)
Rename a queue listen-queue-rename (R)
Discard a queue listen-queue-discard (C-k)
Show queue's tracks in library buffer listen-library-from-queue (l)
Revert the queue list listen-queue-list (g)
Pause the player listen-pause (SPC)
Show the menu listen-menu (?)

Library

To help with exploring and managing a music library, listen provides various "library" features. Tracks can be passed between library and queue buffers and operated on with similar commands and bindings.

listen does not maintain its own database of audio files; they are simply read from the filesystem as needed. But if a local MPD server is available, tracks can be loaded from its database (which does a fine job of indexing audio files and their metadata); this is generally much faster, because it avoids having to read tracks' metadata with Emacs Lisp or their durations with ffprobe.

listen does not provide features to modify tracks' metadata, but it provides commands to run shell commands on tracks' filenames, which works well with external tools like Picard.

Library buffer

A library buffer provides a hierarchical view of tracks grouped by their metadata using Taxy, rendered with Magit Section. Each section can be folded, and it shows the number of tracks in it and its subgroups.

Players

listen supports audio playback via MPV or VLC backends. Internally, any number of simultaneous player instances could be controlled, but listen's UI provides the means to control one at a time.

Controlling the player is mainly done through the main Transient menu, through the command listen. However, all of the commands provided in it are also available as interactive commands, which could be bound by the user in any keymap (see, e.g. M-x apropos-command RET ^listen- RET).

The player is run in a child process, which is started when playback begins. The listen-quit command terminates the player process.

Volume

The listen-volume command is used to set the current player's volume. Its argument should be an integer percentage. Some players, e.g. VLC, may allow settings above 100% to boost output beyond normal levels.

Seeking

The listen-seek command is used to seek to a position in the current track. Its argument should be a timestamp in MM:SS format, and it may include a - or + prefix to indicate a position relative to the current one.

Repeat modes

Three repeat modes are provided, controlled by the option listen-queue-repeat-mode, which may have these values:

nil

No repeating. When the last track in the current queue finishes playing, playback stops.

queue

The current queue is repeated when its last track finishes playing.

shuffle

When the last track in the current queue finishes playing, the queue is shuffled and played again.

The repeat mode is most easily set using the commands in the listen menu.

Mode

The listen-mode minor mode runs a timer which plays the next track in the current queue when a track finishes playing (when playing a queue). It is automatically activated when playing a queue. It also shows the current track in the global-mode-string, which may be displayed in the mode line or tab bar.

Tips

6. Changelog

v0.10-pre

Additions

Fixes

v0.9

Released without additional changes due to change in ELPA recipe.

Fixes

v0.8.1

Fixes

v0.8

Additions

Changes

Fixes

v0.7

Additions

Changes

Fixes

v0.6

Additions

Changes

Fixes

v0.5.1

Fixes

v0.5

Additions

Changes

Fixes

v0.4

Additions

Fixes

v0.3

Additions

Changes

Fixes

Credits

v0.2

Additions

Fixes

7. Development

Feedback and patches are welcome.

Listen.el is published in GNU ELPA and is considered part of GNU Emacs. Therefore, cumulative contributions of more than 15 lines of code require that the author assign copyright of such contributions to the FSF. Authors who are interested in doing so may contact assign@gnu.org to request the appropriate form.

Known issues