Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andrewrk/libgroove
streaming audio processing library
https://github.com/andrewrk/libgroove
Last synced: 9 days ago
JSON representation
streaming audio processing library
- Host: GitHub
- URL: https://github.com/andrewrk/libgroove
- Owner: andrewrk
- License: mit
- Created: 2013-09-09T02:01:56.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2024-03-28T02:17:35.000Z (8 months ago)
- Last Synced: 2024-04-13T22:26:25.137Z (7 months ago)
- Language: C
- Homepage: http://andrewrk.github.io/libgroove/
- Size: 9.05 MB
- Stars: 289
- Watchers: 22
- Forks: 35
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](http://ffmpeg.org/) for robust decoding and encoding. See
[supported file formats and codecs](http://ffmpeg.org/ffmpeg-formats.html).
* 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](http://tech.ebu.ch/loudness)
standard to detect loudness. The values it produces are compatible with the
[ReplayGain](http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification)
specification.
* **fingerprint sink** - Uses [chromaprint](http://acoustid.org/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](http://www.cmake.org/) >= 2.8.5
* [ffmpeg](http://ffmpeg.org/) >= 3.0
* suggested flags: `--enable-shared --disable-static --enable-libmp3lame --enable-libvorbis --enable-gpl`
* [libebur128](https://github.com/jiixyj/libebur128)
* make sure it is compiled with the speex dependency so that true peak
functions are available.
* [libsoundio](http://libsound.io/)
* [libchromaprint-dev](http://acoustid.org/chromaprint)```
mkdir build
cd build
cmake ..
make
sudo make install
```## Documentation
[API Reference](http://andrewrk.github.io/libgroove/)
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](https://github.com/andrewrk/groovebasin) 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](https://github.com/andrewrk/waveform) generates PNG waveform
visualizations.
* [node-groove](https://github.com/andrewrk/node-groove) provides
[Node.js](http://nodejs.org/) bindings to libgroove.
* [playa](https://github.com/moonwave99/playa) OS X Audio Player that thinks
in albums.
* [groove-rs](https://github.com/andrewrk/groove-rs) provides
[rust](http://rust-lang.org) bindings to libgroove.
* [ruby-groove](https://github.com/johnmuhl/ruby-groove) provides Ruby FFI
bindings to libgroove.
* [TrenchBowl](https://github.com/andrewrk/TrenchBowl) is a simple Qt GUI
on top of libgroove.