OVERVIEW
fmedia is a fast audio player/recorder/converter for Windows, macOS, Linux and FreeBSD. It provides smooth playback and recording even if devices are very slow. It's highly customizable and can be easily extended with additional plugins. Its low CPU & memory consumption saves energy when running on a notebook's battery. Play or convert audio files, record new audio tracks from microphone, save songs from Internet radio, and much more! fmedia is free and open-source project, and you can use it as a standalone application or as a library for your own software. fmedia can read: .mp3, .ogg (Vorbis/Opus), .opus, .mp4/.m4a/.mov (AAC/ALAC/MPEG), .mka/.mkv/.webm (AAC/ALAC/MPEG/Vorbis/Opus/PCM), .caf (AAC/ALAC/PCM), .avi (AAC/MPEG/PCM), .aac, .mpc, .flac, .ape, .wv, .wav; .m3u, .pls, .cue. fmedia can write: .mp3, .ogg, .opus, .m4a (AAC), .flac, .wav, .aac (--stream-copy only). You'll find more detailed information about fmedia in README file inside the package.
ARTICLES
- Audio API Quick Start Guide: Playing and Recording Sound on Linux, Windows, FreeBSD and macOS (Apr 2022)
- Architecture of fmedia (Apr 14, 2018)
- Audio Formats Comparison (upd. Mar 27, 2017)
- How To Easily Record Sound On Windows And Linux (upd. Feb 13, 2018)
- How To Convert Audio Files (upd. Dec 11, 2016)
DOWNLOAD
Choose fmedia package for your OS and CPU:
Self-contained. fmedia uses modified versions of 3rd party libraries: libALAC, libfdk-aac, libFLAC, libMAC, libmp3lame, libmpg123, libmpc, libogg, libopus, libsoxr, libvorbisenc, libvorbis, libwavpack, libDynamicAudioNormalizer, libzstd. Everything is inside the package, so no additional dependencies are required to be installed on your system.
Portable. No installation, just uncompress the package anywhere you want!
Open-source. You can download the sourcecode from here: https://github.com/stsaz/fmedia
* fmedia/Android is experimental and still needs much more work. There's only a small portion of source-code shared between Android app and the full-featured fmedia app for desktops. It relies on the default audio decoding/playback capabilities Android OS provides (just like any other ordinary audio player). Use it if you want the audio player for Android with minimum features and minimum system resources consumption.
CHANGES
fmedia v1.31 - May 21, 2023 + --http-ctl="<IP>": Enable HTTP server for handling remote commands This option allows fmedia to be remotely controlled using web browser. Server address is "http://<IP>:7314/". Supported commands: "POST /api/pause": Pause "POST /api/unpause": Unpause "POST /api/next": Play next track + --playlist-heal="": Auto-correct the paths to files inside a .m3u playlist * TUI: colored output * GUI: compress auto-loaded playlists with zstd ("listN.m3uz") * Recording: support --dev=... together with --record * Restore support for old AMD64 CPU (without SSE4.2 support) - Recording: finalize the output file while recording after --globcmd=stop - .mp4(AAC) write: don't write incorrect VBR bitrate & sample rate values - .ogg write: fix (v1.30 bug)
fmedia/Android v0.12 - May 7, 2023 * compress auto-loaded playlists with zstd ("/storage/fmedia/list1.m3uz") + playlist view: show artist-title-duration info + "File: Quick Move" command - .mp4(AAC) write: don't write incorrect VBR bitrate & sample rate valuesSee full history
INSTALL ON WINDOWS
-
Unpack archive to the directory of your choice, e.g. to
"C:\Program Files\fmedia"
- Right click on fmedia package file (e.g.
fmedia-1.0-win-x64.zip
) in Explorer - Choose "Extract All..." in the popup menu
- Follow the Wizard steps
- Right click on fmedia package file (e.g.
-
Optionally, run the following command from console (cmd.exe):
"C:\Program Files\fmedia\fmedia.exe" --install
This command will:
- add fmedia directory into user's environment
- create a desktop shortcut to
fmedia-gui.exe
-
Run
fmedia-gui.exe
to open graphical interface; or execute commands viafmedia.exe
from console (cmd.exe).
INSTALL ON LINUX
-
Unpack archive to the directory of your choice, e.g. to your home directory (
~/bin/fmedia-1
):mkdir -p ~/bin tar Jxf ./fmedia-1.*-linux-amd64.tar.xz -C ~/bin
-
Run
~/bin/fmedia-1/fmedia --gui
to open graphical interface; or execute commands via~/bin/fmedia-1/fmedia
from console. -
Optionally, create a symbolic link:
ln -s ~/bin/fmedia-1/fmedia ~/bin/fmedia
-
Now you can run
fmedia --gui
to open graphical interface; or execute commands viafmedia
from console.
INSTALL ON ANDROID
- To be able to install .apk you need to enable "Allow installation from unknown sources" option in your phone's settings (you can disable it again after installation).
- Download .apk file to your phone's storage and install it.
- Click Install button and wait a couple seconds.
- You can also install .apk file from PC with
adb install
.
FEATURES
fmedia consists of many different modules that are joined together in a chain (or conveyer) to get things done. After the user issues a command to fmedia, the core module builds the chain of modules needed to perform the task and then starts the conveyer. The processing moves back and forth between the modules until the job is done. Graphical representation of fmedia's architecture.
Here's the text-only diagram that shows fmedia's abilities:
INPUT
- File
- Directory
- ICY
- HLS
- WASAPI
- Windows Direct Sound
- ALSA
- CoreAudio
- JACK
FORMATS
Multimedia:
- .mp4/.m4a
- .mkv/.mka
- .avi
Audio:
- .ogg/.opus
- .caf
- .mp3
- .aac
- .mpc
- .flac
- .ape
- .wv
- .wav
Playlists:
- .m3u/.m3u8
- .pls
- .cue
DECODERS
Lossy:
- MPEG
- Vorbis
- Opus
- AAC LC/HE/HEv2
- Musepack
Lossless:
- FLAC
- ALAC
- WavPack
- APE
PROCESSING
- Converter
- Analyzer
- Mixer
- Silence generator
- Length cutter
- Signal gain modifier
- Signal gain chain controller
- Dynamic Audio Normalizer
- Terminal UI bridge
- Graphical UI bridge
ENCODERS
Lossy:
- MPEG
- Vorbis
- Opus
- AAC LC/HE/HEv2
Lossless:
- FLAC
FORMATS
- .m4a
- .ogg/.opus
- .mp3
- .flac
- .wav
OUTPUT
- File
- WASAPI
- Windows Direct Sound
- ALSA
- Pulse Audio
- CoreAudio
- OSS
fmedia/Android features:
- Playback: .m4a, .mp3, .flac, .ogg, .opus (depends on OS)
- Recording: .m4a(AAC-LC)
- Convert: .mp3(decode), .m4a(AAC-LC decode/encode), .flac(decode/encode)
- Convert (stream copy): .mp3, .m4a
- GUI: list of meta tags
- GUI: file explorer
- GUI: 2 playlists
USE-CASES
Note the difference between UNIX and Windows terminals when you use special characters and spaces:
-
Use single quotes ('') on Linux (sh, bash), e.g.:
fmedia './my file.ogg' fmedia file.wav -o '$filename.ogg'
-
Use double quotes ("") on Windows (cmd.exe), e.g.:
fmedia "./my file.ogg"
PLAY
Play files, directories, Internet-radio streams
fmedia ./file.ogg ./*.mp3
fmedia ./Music
fmedia http://radio-stream:80/
Play (mix) multiple streams simultaneously
fmedia --mix ./file1.ogg ./file2.ogg
Play wav file with a corrupted header
fmedia ./file.raw --fseek=44
CONVERT
Convert with parameters
fmedia ./file.ogg --out=./file.wav --format=int16
fmedia ./file.wav --out=./file.ogg --vorbis.quality=7.0
fmedia ./file.wav --out=./file.mp3 --mpeg-quality=0 --rate=48000
Convert all .wav files from the current directory to .ogg
fmedia ./*.wav --out=.ogg
Convert file and override meta info
fmedia ./file.flac --out=.ogg --meta='artist=Artist Name;comment=My Comment'
Extract several tracks from .cue file
fmedia ./album.flac.cue --track=3,7,13 --out='$tracknumber. $artist - $title.flac'
Split audio file
fmedia ./file.wav --seek=00:35 --until=01:35 --out=./file-1.wav
Cut compressed audio without re-encoding
fmedia ./file.ogg --out=./out.ogg --seek=1:00 --until=2:00 --stream-copy
Copy left channel's audio from a stereo source
fmedia ./stereo.ogg -o left.wav --channels=left
Change sound volume in an audio file
fmedia --gain=5.0 ./file.wav --out=./file-loud.wav
RECORD
Capture audio from the default audio input device until stopped
fmedia --record --out=rec.flac
Record with the specific audio format
fmedia --record -o rec.wav --format=int24 --channels=mono --rate=48000
Record for 60 seconds then stop
fmedia --record --out=rec.flac --until=60
Record while playing
fmedia ./file.ogg --record --out=./rec.wav
Live output
fmedia --record
Record audio from Internet radio (without re-encoding)
fmedia http://radio-stream:80/ -o ./radio.mp3 --stream-copy
Play AND record audio from Internet radio into separate files (without re-encoding)
fmedia http://radio-stream:80/ --out-copy -o './$time. $artist - $title.mp3' --stream-copy
OTHER FUNCTIONS
Print audio meta info
fmedia --info ./file.mp3
Print audio meta info and all tags
fmedia --info --tags ./file.mp3
Show PCM information
fmedia input.ogg --pcm-peaks
Create a playlist file from directory:
fmedia ./Music -o music.m3u8