Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here

libgroove

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 over 2 years ago
Repo Created about 6 years ago
Repo Last Updated over 1 year ago
Size 13.2 MB
Homepage http://andrewrk.g...
Organization / Authorandrewrk
Contributors10
Page Updated
Do you use libgroove? Leave a review!
View open issues (21)
View libgroove activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating libgroove for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

libgroove

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.

Features

  • 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

Dependencies:

  • 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 ..
make
sudo make install

Documentation

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)
  • about 3 years Fails to build on macOS Sierra
  • over 3 years libgroove cannot be compiled with Visual C++
  • over 3 years PPA is out of date
  • over 3 years player deadlock
  • almost 4 years API for getting album art metadata
  • about 4 years use ffmpeg's built-in EBU R 128 filter
  • about 4 years no libgroove package available in the PPA for Ubuntu 12.04 LTS
  • about 4 years support building for windows
  • about 4 years encoding ogg vorbis file resulted in glitchy sound
  • about 4 years gapless playback regression
  • over 4 years saving updated metadata corrupts audio for some files
  • over 5 years encoder: expose compression_level
  • over 5 years encoder: ability to set av option flags
  • over 5 years encoding ALAC causes crash
  • over 5 years loudness: ability to query the loudness info before scanning is complete
  • over 5 years ability to crossfade between tracks on the playlist
  • over 5 years expose the list of supported formats and codecs
  • about 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