Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


streaming audio processing library

Subscribe to updates I use libgroove

Statistics on libgroove

Number of watchers on Github 230
Number of open issues 21
Average time to close an issue about 2 months
Main language C
Average time to merge a PR about 3 hours
Open pull requests 3+
Closed pull requests 1+
Last commit about 3 years ago
Repo Created over 6 years ago
Repo Last Updated about 2 years ago
Size 13.2 MB
Homepage http://andrewrk.g...
Organization / Authorandrewrk
Page Updated
Do you use libgroove? Leave a review!
View open issues (21)
View libgroove activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating libgroove for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


This library provides decoding and encoding of audio on a playlist. It is intended to be used as a backend for music player applications. That said, it is also generic enough to be used as a backend for any streaming audio processing utility.


  • Uses ffmpeg for robust decoding and encoding. See supported file formats and codecs.
  • Add and remove entries on a playlist for gapless playback.
  • Supports idempotent pause, play, and seek.
  • Per-playlist-item gain adjustment so you can implement loudness compensation without audio glitches.
  • Read and write metadata tags.
  • Choose between smooth mode and exact mode during playback.
    • smooth mode - open the audio device once and resample everything to fit that sample rate and format.
    • exact mode - open and close the audio device as necessary in effort to open the audio device with parameters matching the incoming audio data.
  • Extensible sink-based interface. A sink provides resampling and keeps its buffer full. Types of sinks:
    • raw sink - Provides reference-counted raw audio buffers you can do whatever you like with. For example a real-time audio visualization. All other sink types are built on top of this one.
    • player sink - Sends frames to a sound device.
    • encoder sink - Provides encoded audio buffers. For example, you could use this to create an HTTP audio stream.
    • loudness scanner sink - Uses the EBU R 128 standard to detect loudness. The values it produces are compatible with the ReplayGain specification.
    • fingerprint sink - Uses chromaprint to generate unique song IDs that can be used with the acoustid service.
    • waveform sink - Generates a visual representation of a song.
  • Example programs included:
    • playlist - Play a series of songs with gapless playback.
    • metadata - Read or update song metadata.
    • replaygain - Report the suggested replaygain for a set of files.
    • transcode - Transcode one or more files into one output file.
    • fingerprint - Generate acoustid fingerprints for one or more files.
    • metadata_checksum - Read or update song metadata. This program scans the audio of the file before the metadata change, changes the metadata in a temporary file, scans the audio of the temporary file to make sure it matches the original, and then atomically renames the temporary file over the original file.

Building From Source


  • cmake >= 2.8.5
  • ffmpeg >= 3.0
    • suggested flags: --enable-shared --disable-static --enable-libmp3lame --enable-libvorbis --enable-gpl
  • libebur128
    • make sure it is compiled with the speex dependency so that true peak functions are available.
  • libsoundio
  • libchromaprint-dev
mkdir build
cd build
cmake ..
sudo make install


API Reference

Join #libgroove on irc.freenode.org and ask questions.

To build the documentation:

make doc

Projects Using libgroove

Feel free to make a pull request adding yours to this list.

  • Groove Basin is a music player with lazy multi-core replaygain scanning, a web interface inspired by Amarok 1.4, http streaming, upload, download and a dynamic playlist mode.
  • waveform generates PNG waveform visualizations.
  • node-groove provides Node.js bindings to libgroove.
  • playa OS X Audio Player that thinks in albums.
  • groove-rs provides rust bindings to libgroove.
  • ruby-groove provides Ruby FFI bindings to libgroove.
  • TrenchBowl is a simple Qt GUI on top of libgroove.
libgroove open issues Ask a question     (View All Issues)
  • over 3 years Fails to build on macOS Sierra
  • almost 4 years libgroove cannot be compiled with Visual C++
  • almost 4 years PPA is out of date
  • about 4 years player deadlock
  • over 4 years API for getting album art metadata
  • over 4 years use ffmpeg's built-in EBU R 128 filter
  • over 4 years no libgroove package available in the PPA for Ubuntu 12.04 LTS
  • over 4 years support building for windows
  • almost 5 years encoding ogg vorbis file resulted in glitchy sound
  • almost 5 years gapless playback regression
  • almost 5 years saving updated metadata corrupts audio for some files
  • almost 6 years encoder: expose compression_level
  • almost 6 years encoder: ability to set av option flags
  • almost 6 years encoding ALAC causes crash
  • almost 6 years loudness: ability to query the loudness info before scanning is complete
  • over 6 years ability to crossfade between tracks on the playlist
  • over 6 years expose the list of supported formats and codecs
  • over 6 years Ability to trash non-audio streams when updating metadata
libgroove open pull requests (View All Pulls)
  • Update to Chromaprint 1.4 API
  • Issues in playlist when adding items on top of the queue
  • correct spelling mistake
libgroove list of languages used
Other projects in C