An implementation of FFmpeg for audio playback of almost any media format
When building, the FFmpeg libraries are dynamically linked by default, which means that you'll need a local installation of these libraries in order for the external to work.
Includes the following features:
- 
play/pause and seek functionality.
 - 
changing the speed of playback.
 - 
reading and iterating through m3u playlists.
- 
It reads pseudo m3u playlists. Each line in the m3u should be just the file name, preceded by a path relative to the location of the m3u if they don't reside in the same folder.
 - 
The m3u reader can also read nested m3u's. For example, an m3u could consist of the following three lines:
 
disc1.m3u disc2.m3u disc3.m3u - 
 - 
opening files from http urls.
 - 
retrieving metadata.
 
Creation args
- numeric list
- 
The channel layout. Defaults to stereo if no args given.
 - 
Numbers specified represent the bits of an audio channel bit-mask. A full list of available channels can be found here: https://github.com/FFmpeg/FFmpeg/blob/master/libavutil/channel_layout.h
 
 - 
 
Inlets
- 
bang - Play/pause the currently loaded track.
- Sends a 1 or 0 through the last outlet to indicate whether it's playing or paused.
 
float - (Re)start playback of a given track number
- Zero will stop playback.
 
anything - Look for matching metadata
- If metadata is found, it will be sent through the right-most outlet.
 
 
- A file must be successfully opened for any of the above to work
 
- signal - Change the playback speed.
- 
speed can be a factor between 16 and 1/16th.
 - 
speed can also be altered by sending the message [ speed $1 ( to the 1st inlet.
 
 - 
 
Outlets
- 
signal - Left channel
 - 
signal - Right channel
- The number of signal outlets there are depends on the number of creation args given, with the default being 2 signals for stereo.
 
 - 
list - Outputs various messages including information regarding whether a file was successfully opened, whether a track is currently playing, track metadata, etc.
 
Messages
- 
[ print $.. ( or [ info $.. ( - Prints metadata info.
- 
If no args given, it will print general info. Otherwise, it will print custom info.
 - 
metadata needs to be surrounded with percent signs.
- Example [ print %artist% - %title% (
 
 
 - 
 - 
[ send $.. ( - Sends metadata info through the
last outlet. - 
[ open $1 ( - Attempts to open a file.
- Sends a 1 or 0 through the last outlet to indicate success or failure.
 
 - 
[ seek $1 ( - Seek to a track position.
 - 
[ speed $1 ( - Set the playback speed.
 - 
[ play $1 ( - Set playback state to either playing or paused.
- Acts as a toggle when no args are given.
 - When an arg is given, state is forced to playing(1) or paused(0).
 
 - 
[ interp $1 ( - Change the interpolation algorithm.
- Options include:
- Sinc (good | medium | fast)
 - Zero-order hold
 - Linear (the default)
 
 
 - Options include:
 - 
[ stop ( - An alias for [ 0 (.
 - 
[ pos ( - Returns the track position.
 - 
Any unrecognized message is assumed to be a metadata term. If there is a match, the metadata will be sent through the last outlet.
 
Update - March 16 2022:
ffplay~ now uses Secret Rabbit Code for resampling, which makes playback speed transitions much smoother. Playback speed can also be manipulated with signals via the 2nd inlet.
ffplay~ is now available through deken. It is part of a larger library called quilt. Searching either "quilt" or "ffplay~" should give a result.
The FFmpeg libraries are still separate, but can be either easily downloaded or easily installed via a package manager.
For Windows users, the FFmpeg libraries can be downloaded here: https://github.com/myQwil/pd-quilt/releases/download/v0.7.7/ffmpeg.v4.4.1.Windows-amd64-32.zip.
For Linux and macOS users, A README file is included, which lists the dependencies for those platforms.
					
									
									

									
									