aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--NEWS4
-rw-r--r--README16
-rw-r--r--doc/developer-release.txt16
-rw-r--r--doc/emms.texinfo99
-rw-r--r--emms-tag-editor.el106
-rw-r--r--emms.el4
-rw-r--r--emms.info198
8 files changed, 331 insertions, 114 deletions
diff --git a/Makefile b/Makefile
index 25585b6..546a355 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ INSTALLINFO = /usr/bin/install-info --info-dir=$(INFODIR)
CHANGELOG_CMD = git log --pretty=medium --no-merges
# The currently released version of EMMS
-VERSION=6.00
+VERSION=6.03
.PHONY: all install docs clean
.PRECIOUS: %.elc
diff --git a/NEWS b/NEWS
index 24f0420..2e8592b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+News since version 6.2
+
+ - Updated documentation
+
News since version 5.4
- Emms is now available via the GNU ELPA repository.
diff --git a/README b/README
index 238d4f8..ceeb86c 100644
--- a/README
+++ b/README
@@ -1,3 +1,13 @@
-Please read the fine manual which is available in the doc
-directory. We do our best to make sure that it's up to date and
-informative.
+Emms is the Emacs Multimedia System. Emms displays and plays
+multimedia from within GNU/Emacs using a variety of external players
+and from different sources.
+
+Emms can run as a minimalist player and controlled with a handful of
+M-x Emacs commands, or a fully-fledged, interactive media
+browser. Emms can display album art, play streaming audio, tag music
+files, search for lyrics, provide MPD connectivity, control the
+volume, and more.
+
+Please read the info fine manual which is shipped with Emms and
+available in the doc directory. We do our best to make sure that it's
+up to date and informative.
diff --git a/doc/developer-release.txt b/doc/developer-release.txt
index a09081b..d32e4ae 100644
--- a/doc/developer-release.txt
+++ b/doc/developer-release.txt
@@ -1,25 +1,19 @@
This is an explanation of how to make a release for Emms. Emms is
-currently distributed in three different ways: via the Git repo on
-Savannah, as a tarball from GNU, and via GNU ELPA.
+developed at Savannah (https://savannah.gnu.org/projects/emms/) and
+distributed via Emacs ELPA (https://elpa.gnu.org/).
* Increase the version number in emms.el (variable, elpa header), Makefile
* Update NEWS
-* Push version updates to git repo
+* Update the manual, then copy compiled emms.info to root directory
+
+* Push version updates to VCS
* Tag release in VCS, for example `git tag -a 4.2 -m "4.2"'
* Push tag to VCS if needed, for example `git push --tags origin "4.2"'
-* Run make release
-
-* Run make upload
-
-* Update copy of emms.info in root directory
-
-* Update online manual (cvs commit -m "update manual" manual/index.html)
-
* Update website (cvs commit -m "update website" index.html)
* Push to GNU ELPA:
diff --git a/doc/emms.texinfo b/doc/emms.texinfo
index 1480eba..425b4e3 100644
--- a/doc/emms.texinfo
+++ b/doc/emms.texinfo
@@ -15,7 +15,7 @@
@copying
@copyright{} 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2014,
- 2015, 2016, 2020 Free Software Foundation, Inc.
+ 2015, 2016, 2020, 2021 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
@@ -143,22 +143,22 @@ Emms, an online version of the manual is available at:
The basic functionality of Emms consists of three parts: The core, the
sources, and the players.
-The core resides in @file{emms.el}, and provides a simple playlist and the
-basic functionality to use all the other features of Emms. It provides
-the common user commands and interfaces for other parts. It thinks in
-tracks, where a track is the combination of a type and a name - e.g.
-the track type 'file has a name that is the file name. Other track
-types are possible.
+The core resides in @file{emms.el}, provides a simple playlist, and
+the basic functionality to use all the other features of Emms. It
+provides the common user commands and interfaces for other parts. It
+thinks in tracks, where a track is the combination of a type and a
+name - e.g. the track type 'file has a name that is the file
+name. Other track types are possible.
To get to tracks, the core needs sources. The file @file{emms-source-file.el}
provides simple sources to interact with the file system.
When Emms finally has the sources in the playlist, it needs a player
-to play them. @file{emms-player-simple.el} defines a few useful players, and
-allows you to define your own in a very simple way.
+to play them. @file{emms-player-simple.el} defines a few useful
+players and provides a straightforward way of providing your own.
-The Emms core comes with many additional features to extend its
-functionality.
+The Emms comes with many additional features to extend the
+functionality beyond the core.
The way Emms works is easy to customize with your own code or by using
`M-x customize' or by changing the variables directly.
@@ -172,7 +172,8 @@ This chapter demonstrates how to setup Emms so that you can start
listening to your music without having to read all of the
documentation first. This is the tl;dr version of the manual.
-The first thing you have to do is telling Emacs where Emms is
+The first thing you do is to load Emms via GNU ELPA. But if you are
+installing manually, then start by telling Emacs where Emms is
located. Let's say you have it in @file{~/elisp/emms/}. So add this
line to your @file{.emacs}:
@@ -185,7 +186,7 @@ installation chapter, @xref{Installation}.
You'll then want to load Emms into Emacs. To achieve this you invoke
the @code{emms-all} setup function by adding the following three lines
-to your @file{.emacs}.
+to your Emacs initialization file.
@lisp
(require 'emms-setup)
@@ -208,16 +209,16 @@ the name of the file) of the music you listen to. Emms can use a
number of pieces of software and libraries as sources for track info,
see @xref{Track Information} for more.
-The last thing to do is to tell Emms where your music is; the root
+The last thing to do is to tell Emms where is your music; the root
directory of our music collection. Let's say all your music is in
-@file{~/Music} or in subdirectories thereof.
+@file{~/Music} or in subdirectories thereof:
@lisp
(setq emms-source-file-default-directory "~/Music/")
@end lisp
-OK, now we've set up Emms. Reload your @file{.emacs} or restart Emacs to
-let the changes have an effect.
+OK, now we've set up Emms. Reload your Emacs initialization file or
+restart Emacs to let the changes have an effect.
Now we will add all our music to a playlist by invoking @kbd{M-x
emms-add-directory-tree RET ~/Music/ RET}. We do this because then
@@ -226,9 +227,9 @@ is also required for the Emms browser, @xref{The Browser}.)
To switch to the playlist buffer, invoke @kbd{M-x
emms-playlist-mode-go} or simply @kbd{M-x emms}. You may see that some
-tracks are displayed with their file name, but as Emms populates its
-tag cache, track by track, the filenames get replaced with the artist
-and track name of the file's tag.
+tracks are displayed with their file name, but as Emms asynchronously
+populates its tag cache, track by track, the filenames get replaced
+with the artist and track name of the file's tag.
Go ahead and navigate to a track and hit @kbd{RET} on it to start
playback.
@@ -371,6 +372,7 @@ Another way to change Emms variables is to use the M-x
@menu
* Finding files and speed:: Finding files quickly or portably.
+* Setup Examples:: Examples of ways to setup Emms.
@end menu
@@ -398,6 +400,63 @@ The method Emms will use is defined in the customisable variable
@var{emms-source-file-directory-tree-function}.
+@node Setup Examples
+@section Setup Examples
+
+@cindex example
+@cindex configuration
+
+What follow are samples from real-world Emms configurations which show
+some of the variety and breadth of modifications people make to the
+default Emms setup.
+
+The following excerpt includes dbus integration, defining a "recent"
+filter for the @xref{The Browser}, persistent playlist via
+@file{emms-history.el}, and enabling sending track information with
+@file{emms-librefm-stream.el}:
+
+@lisp
+ ;; notifications
+ (require 'emms-dbus)
+ (emms-dbus-enable)
+ ;; covers
+ (setq emms-browser-covers #'emms-browser-cache-thumbnail-async)
+ (setq emms-browser-thumbnail-small-size 64)
+ (setq emms-browser-thumbnail-medium-size 128)
+ ;; filters
+ (emms-browser-make-filter "all" #'ignore)
+ (emms-browser-make-filter "recent"
+ (lambda (track) (< 30
+ (time-to-number-of-days
+ (time-subtract (current-time)
+ (emms-info-track-file-mtime track))))))
+ (emms-browser-set-filter (assoc "all" emms-browser-filters))
+ ;; history
+ (emms-history-load)
+ ;; libre-fm
+ (emms-librefm-scrobbler-enable)
+@end lisp
+
+
+In the following it is possible to see how some of defaults are set
+regarding saving playlists, playlist interaction, as well as adding
+special arguments to a specific player backend.
+
+@lisp
+ (setq-default
+ emms-source-file-default-directory "/mnt/db/mediaCore/sound_music/"
+
+ emms-source-playlist-default-format 'm3u
+ emms-playlist-mode-center-when-go t
+ emms-playlist-default-major-mode 'emms-playlist-mode
+ emms-show-format "NP: %s"
+
+ emms-player-list '(emms-player-mpv)
+ emms-player-mpv-environment '("PULSE_PROP_media.role=music")
+ emms-player-mpv-parameters '("--quiet" "--really-quiet" "--no-audio-display" "--force-window=no" "--vo=null"))
+@end lisp
+
+
@c -------------------------------------------------------------------
@node Getting Help
@chapter Getting Help
diff --git a/emms-tag-editor.el b/emms-tag-editor.el
index ee9b2cb..52a8046 100644
--- a/emms-tag-editor.el
+++ b/emms-tag-editor.el
@@ -1,8 +1,9 @@
-;;; emms-tag-editor.el --- Edit track tags.
+;;; emms-tag-editor.el --- Edit track tags. -*- lexical-binding: t; -*-
-;; Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2021 Free Software Foundation, Inc.
;;
-;; Author: Ye Wenbin <wenbinye@163.com>
+;; Original Author: Ye Wenbin <wenbinye@163.com>
+;; Authors: the Emms developers (see AUTHORS file)
;; This file is part of EMMS.
@@ -37,6 +38,12 @@
(require 'emms-playlist-mode)
(require 'emms-mark)
(require 'format-spec)
+(require 'subr-x)
+
+(defcustom emms-tag-editor-tag-ogg-program "vorbiscomment"
+ "*The name/path of the ogg editor program."
+ :type 'string
+ :group 'emms-tag-editor)
(defvar emms-tag-editor-tags
'((info-artist . "a")
@@ -147,7 +154,7 @@ See also `emms-tag-editor-tag-file' and `emms-tag-editor-tag-ogg'.")
(require 'emms-info-metaflac)
(with-temp-buffer
(let ((tags '("artist" "composer" "performer" "title" "album" "tracknumber" "discnumber" "date" "genre" "note"))
- need val)
+ val)
(mapc (lambda (tag)
(let ((info-tag (intern (concat "info-" tag))))
(when (> (length (setq val (emms-track-get track info-tag))) 0)
@@ -175,7 +182,7 @@ See also `emms-tag-editor-tag-file' and `emms-tag-editor-tag-ogg'.")
(setq args (append (list "-t" (concat (upcase tag) "=" val)) args)))))
'("artist" "composer" "performer" "title" "album" "tracknumber" "date" "genre" "note"))
(when args
- (apply #'call-process "vorbiscomment" nil
+ (apply #'call-process emms-tag-editor-tag-ogg-program nil
(get-buffer-create emms-tag-editor-log-buffer)
nil
"-w"
@@ -537,7 +544,7 @@ Available tags are:
match "[^-]+"))
(setq compiled (concat compiled "\\(" match "\\)")
index (1+ index))
- (add-to-list 'registers (cons register index)))
+ (push (cons register index) registers))
(t (setq compiled (concat compiled (char-to-string c))))))
(if (/= paren 0) (error "Paren not match!"))
(cons compiled registers)))
@@ -783,5 +790,92 @@ Then it's the callers job to apply them afterwards with
(define-key emms-playlist-mode-map "R" 'emms-tag-editor-rename)
+(defvar emms-tag-editor-pipe-config
+ '(("mid3iconv -e gbk <file>"
+ :command "mid3iconv"
+ :arguments ("-e" "gbk" name)))
+ "Config of tag editor pipe.
+
+A pipe is defined like below:
+
+ (\"piper-name\" :command xxx :arguments xxx)
+
+:command is a command string, this command can not change file name.
+:arguments is a list or a function return list, for example:
+
+ (\"--track-name\" name (\"--year\" info-year))
+ (lambda (track) (list (emms-track-name track 'name)))
+
+1. symbols can be 'name or elements of (mapcar 'car emms-tag-editor-tags),
+ which will be replaced to track info before run command.
+2. sublist used to deal with group args, for example, (\"--year\" info-year), when
+ track's info-year is nil, the \"--year\" will be removed too.")
+
+(defun emms-tag-editor-pipe-get (pipe-name key)
+ "Get the pipe value of KEY named PIPE-NAME in `emms-tag-editor-pipe-config'."
+ (let ((config emms-tag-editor-pipe-config))
+ (plist-get (cdr (assoc pipe-name config)) key)))
+
+(defun emms-tag-editor-pipe ()
+ "Select and run pipe command to track at point or all marked tracks."
+ (interactive)
+ (let* ((pipe-name (completing-read "Please choise pipe: " emms-tag-editor-pipe-config)))
+ (when pipe-name
+ (if (emms-mark-has-markedp)
+ (emms-tag-editor-marked-track-pipe pipe-name)
+ (emms-tag-editor-track-pipe
+ (emms-tag-editor-track-at) pipe-name)))))
+
+(defun emms-tag-editor-track-pipe (track pipe-name)
+ "Run command of pipe nameed PIPE-NAME to TRACK."
+ (if (eq (emms-track-get track 'type) 'file)
+ (let* ((coding-system-for-read 'utf-8)
+ (command (emms-tag-editor-pipe-get pipe-name :command))
+ (arguments (emms-tag-editor-pipe-get pipe-name :arguments)))
+ (when (functionp arguments)
+ (setq arguments (funcall arguments track)))
+ (setq arguments
+ (when (listp arguments)
+ (mapcar
+ #'(lambda (x)
+ (cond ((symbolp x)
+ (emms-track-get track x))
+ ((listp x)
+ (let ((list (mapcar
+ #'(lambda (y)
+ (if (symbolp y)
+ (emms-track-get track y)
+ y))
+ x)))
+ (if (member nil list)
+ (list nil)
+ list)))
+ (t x)))
+ arguments)))
+ (setq arguments
+ (flatten-tree
+ (remove (list nil) arguments)))
+ (if (and command (listp arguments))
+ (if (member nil arguments)
+ (message "Warn: skip run %S" (string-join `(,command ,@(remove nil arguments)) " "))
+ (if (zerop (apply #'call-process
+ command nil nil nil arguments))
+ (progn
+ (message "Run command: %S" (string-join `(,command ,@arguments) " "))
+ (run-hook-with-args 'emms-info-functions track))
+ (message "Fail to run command: %S" (string-join `(,command ,@arguments) " "))))
+ (message "No command or arguments are found.")))
+ (message "Only support files.")))
+
+(defun emms-tag-editor-marked-track-pipe (pipe-name)
+ "Run command of pipe named PIPE-NAME to marked tracks."
+ (let ((tracks (emms-mark-mapcar-marked-track
+ 'emms-tag-editor-track-at t)))
+ (if (null tracks)
+ (message "No track marked!")
+ (dolist (track tracks)
+ (emms-tag-editor-track-pipe track pipe-name)))))
+
+
(provide 'emms-tag-editor)
;;; Emms-tag-editor.el ends here
diff --git a/emms.el b/emms.el
index 6f378fa..dd8a69d 100644
--- a/emms.el
+++ b/emms.el
@@ -5,7 +5,7 @@
;; Author: Jorgen Schäfer <forcer@forcix.cx>, the Emms developers (see AUTHORS file)
;; Maintainer: Yoni Rabkin <yrk@gnu.org>
-;; Version: 6.02
+;; Version: 6.03
;; Keywords: emms, mp3, ogg, flac, music, mpeg, video, multimedia
;; Package-Type: multi
;; Package-Requires: ((cl-lib "0.5") (seq))
@@ -45,7 +45,7 @@
;;; Code:
-(defvar emms-version "6.00"
+(defvar emms-version "6.03"
"EMMS version string.")
diff --git a/emms.info b/emms.info
index fc1ecfe..d18b9a7 100644
--- a/emms.info
+++ b/emms.info
@@ -123,7 +123,7 @@ Emms, an online version of the manual is available at:
The basic functionality of Emms consists of three parts: The core,
the sources, and the players.
- The core resides in 'emms.el', and provides a simple playlist and the
+ The core resides in 'emms.el', provides a simple playlist, and the
basic functionality to use all the other features of Emms. It provides
the common user commands and interfaces for other parts. It thinks in
tracks, where a track is the combination of a type and a name - e.g.
@@ -135,11 +135,11 @@ types are possible.
system.
When Emms finally has the sources in the playlist, it needs a player
-to play them. 'emms-player-simple.el' defines a few useful players, and
-allows you to define your own in a very simple way.
+to play them. 'emms-player-simple.el' defines a few useful players and
+provides a straightforward way of providing your own.
- The Emms core comes with many additional features to extend its
-functionality.
+ The Emms comes with many additional features to extend the
+functionality beyond the core.
The way Emms works is easy to customize with your own code or by
using 'M-x customize' or by changing the variables directly.
@@ -154,9 +154,10 @@ This chapter demonstrates how to setup Emms so that you can start
listening to your music without having to read all of the documentation
first. This is the tl;dr version of the manual.
- The first thing you have to do is telling Emacs where Emms is
-located. Let's say you have it in '~/elisp/emms/'. So add this line to
-your '.emacs':
+ The first thing you do is to load Emms via GNU ELPA. But if you are
+installing manually, then start by telling Emacs where Emms is located.
+Let's say you have it in '~/elisp/emms/'. So add this line to your
+'.emacs':
(add-to-list 'load-path "~/elisp/emms/lisp/")
@@ -165,7 +166,7 @@ installation chapter, *Note Installation::.
You'll then want to load Emms into Emacs. To achieve this you invoke
the 'emms-all' setup function by adding the following three lines to
-your '.emacs'.
+your Emacs initialization file.
(require 'emms-setup)
(emms-all)
@@ -185,14 +186,14 @@ the name of the file) of the music you listen to. Emms can use a number
of pieces of software and libraries as sources for track info, see *Note
Track Information:: for more.
- The last thing to do is to tell Emms where your music is; the root
+ The last thing to do is to tell Emms where is your music; the root
directory of our music collection. Let's say all your music is in
-'~/Music' or in subdirectories thereof.
+'~/Music' or in subdirectories thereof:
(setq emms-source-file-default-directory "~/Music/")
- OK, now we've set up Emms. Reload your '.emacs' or restart Emacs to
-let the changes have an effect.
+ OK, now we've set up Emms. Reload your Emacs initialization file or
+restart Emacs to let the changes have an effect.
Now we will add all our music to a playlist by invoking 'M-x
emms-add-directory-tree RET ~/Music/ RET'. We do this because then Emms
@@ -201,9 +202,9 @@ required for the Emms browser, *Note The Browser::.)
To switch to the playlist buffer, invoke 'M-x emms-playlist-mode-go'
or simply 'M-x emms'. You may see that some tracks are displayed with
-their file name, but as Emms populates its tag cache, track by track,
-the filenames get replaced with the artist and track name of the file's
-tag.
+their file name, but as Emms asynchronously populates its tag cache,
+track by track, the filenames get replaced with the artist and track
+name of the file's tag.
Go ahead and navigate to a track and hit 'RET' on it to start
playback.
@@ -329,9 +330,10 @@ mechanism provided by Emacs.
* Menu:
* Finding files and speed:: Finding files quickly or portably.
+* Setup Examples:: Examples of ways to setup Emms.

-File: emms.info, Node: Finding files and speed, Up: Configuration
+File: emms.info, Node: Finding files and speed, Next: Setup Examples, Up: Configuration
5.1 Finding files and speed
===========================
@@ -353,6 +355,57 @@ installed.
EMMS-SOURCE-FILE-DIRECTORY-TREE-FUNCTION.

+File: emms.info, Node: Setup Examples, Prev: Finding files and speed, Up: Configuration
+
+5.2 Setup Examples
+==================
+
+What follow are samples from real-world Emms configurations which show
+some of the variety and breadth of modifications people make to the
+default Emms setup.
+
+ The following excerpt includes dbus integration, defining a "recent"
+filter for the *Note The Browser::, persistent playlist via
+'emms-history.el', and enabling sending track information with
+'emms-librefm-stream.el':
+
+ ;; notifications
+ (require 'emms-dbus)
+ (emms-dbus-enable)
+ ;; covers
+ (setq emms-browser-covers #'emms-browser-cache-thumbnail-async)
+ (setq emms-browser-thumbnail-small-size 64)
+ (setq emms-browser-thumbnail-medium-size 128)
+ ;; filters
+ (emms-browser-make-filter "all" #'ignore)
+ (emms-browser-make-filter "recent"
+ (lambda (track) (< 30
+ (time-to-number-of-days
+ (time-subtract (current-time)
+ (emms-info-track-file-mtime track))))))
+ (emms-browser-set-filter (assoc "all" emms-browser-filters))
+ ;; history
+ (emms-history-load)
+ ;; libre-fm
+ (emms-librefm-scrobbler-enable)
+
+ In the following it is possible to see how some of defaults are set
+regarding saving playlists, playlist interaction, as well as adding
+special arguments to a specific player backend.
+
+ (setq-default
+ emms-source-file-default-directory "/mnt/db/mediaCore/sound_music/"
+
+ emms-source-playlist-default-format 'm3u
+ emms-playlist-mode-center-when-go t
+ emms-playlist-default-major-mode 'emms-playlist-mode
+ emms-show-format "NP: %s"
+
+ emms-player-list '(emms-player-mpv)
+ emms-player-mpv-environment '("PULSE_PROP_media.role=music")
+ emms-player-mpv-parameters '("--quiet" "--really-quiet" "--no-audio-display" "--force-window=no" "--vo=null"))
+
+
File: emms.info, Node: Getting Help, Next: Formats and Freedom, Prev: Configuration, Up: Top
6 Getting Help
@@ -3370,12 +3423,14 @@ Concept Index
* compiling: Compiling Emms. (line 6)
* complex player: More Complex Player. (line 6)
* Configuration: Configuration. (line 6)
+* configuration: Setup Examples. (line 6)
* core file: The Core File. (line 6)
* core functions: Core Functions. (line 6)
* defining info methods: Defining Info Methods. (line 6)
* defining new players: New Player. (line 6)
* defining players: Extending Emms. (line 6)
* display emms information: Emms Mode Line. (line 6)
+* example: Setup Examples. (line 6)
* FDL, GNU Free Documentation License: The GNU FDL. (line 6)
* files: Finding files and speed.
(line 6)
@@ -3757,59 +3812,60 @@ Keybinding Index
Tag Table:
Node: Top695
Node: Introduction4442
-Node: Quickstart Guide5901
-Node: Installation8652
-Node: Compiling Emms9201
-Node: Setup9889
-Node: Configuration10875
-Node: Finding files and speed12286
-Node: Getting Help13132
-Node: Formats and Freedom13710
-Node: Basic Commands14915
-Node: The Core File18296
-Node: User Variables18730
-Node: Hooks19706
-Node: Core Functions21132
-Node: Sources24132
-Node: Simple Players26265
-Node: Playlists27322
-Node: Track Information28603
-Node: Using tinytag31490
-Node: Using exiftool31919
-Node: Using TagLib32291
-Node: Defining Info Methods33400
-Node: Interactive Playlists34182
-Node: Markable Playlists37224
-Node: Extending Emms39695
-Node: New Player40131
-Node: Simple Player for `play'40520
-Node: More Complex Player42248
-Node: The Browser45255
-Node: Browser Interface46231
-Node: Filtering Tracks48645
-Node: Displaying Covers50423
-Node: Changing Looks52437
-Node: Sorting Playlists55415
-Node: Persistent Playlists56884
-Node: Editing Tracks58043
-Node: Emms Mode Line61717
-Node: Limiting62885
-Node: Music Player Daemon65224
-Node: Lyrics68737
-Node: Volume70785
-Node: Streaming Audio72573
-Ref: Streaming Audio-Footnote-173165
-Node: APE / FLAC Commands73516
-Node: Bookmarks74223
-Node: Managing Playlists74934
-Node: GNU FM75957
-Node: Uploading Track Information77311
-Node: GNU FM Streaming78193
-Node: Copying78693
-Node: The GNU FDL116210
-Node: Concept Index138598
-Node: Function Index143529
-Node: Variable Index159221
-Node: Keybinding Index161564
+Node: Quickstart Guide5910
+Node: Installation8778
+Node: Compiling Emms9327
+Node: Setup10015
+Node: Configuration11001
+Node: Finding files and speed12476
+Node: Setup Examples13345
+Node: Getting Help15278
+Node: Formats and Freedom15856
+Node: Basic Commands17061
+Node: The Core File20442
+Node: User Variables20876
+Node: Hooks21852
+Node: Core Functions23278
+Node: Sources26278
+Node: Simple Players28411
+Node: Playlists29468
+Node: Track Information30749
+Node: Using tinytag33636
+Node: Using exiftool34065
+Node: Using TagLib34437
+Node: Defining Info Methods35546
+Node: Interactive Playlists36328
+Node: Markable Playlists39370
+Node: Extending Emms41841
+Node: New Player42277
+Node: Simple Player for `play'42666
+Node: More Complex Player44394
+Node: The Browser47401
+Node: Browser Interface48377
+Node: Filtering Tracks50791
+Node: Displaying Covers52569
+Node: Changing Looks54583
+Node: Sorting Playlists57561
+Node: Persistent Playlists59030
+Node: Editing Tracks60189
+Node: Emms Mode Line63863
+Node: Limiting65031
+Node: Music Player Daemon67370
+Node: Lyrics70883
+Node: Volume72931
+Node: Streaming Audio74719
+Ref: Streaming Audio-Footnote-175311
+Node: APE / FLAC Commands75662
+Node: Bookmarks76369
+Node: Managing Playlists77080
+Node: GNU FM78103
+Node: Uploading Track Information79457
+Node: GNU FM Streaming80339
+Node: Copying80839
+Node: The GNU FDL118356
+Node: Concept Index140744
+Node: Function Index145821
+Node: Variable Index161513
+Node: Keybinding Index163856

End Tag Table