Free as in Freedom: Codeberg.org. Create your repos!
A library with audio decoder and TOC parser adapters for libarcstk
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tristero 4d12fb3a50
Start to implement "modern" cmake exports
1 day ago
cmake/Modules Fix caching of version variables 3 days ago
doc Correct home section formatting 1 week ago
examples/albumcalc Fix link 4 weeks ago
src Some fixes for build process 1 week ago
test Bugfix: build tests with older versions of cmake 1 week ago
thirdparty Move to Catch2 v2.7.0 1 month ago
.clang Initial commit 2 months ago
.gitignore Initial commit 2 months ago
API.md Initial commit 2 months ago
BUILD.md Change dependency on libarcs to libarcstk 1 month ago
CMakeLists.txt Start to implement "modern" cmake exports 1 day ago
LICENSE Add MIT license file 2 months ago
LibarcsdecConfig.cmake.in Start to implement "modern" cmake exports 1 day ago
README.md Fix libarcstk Project-URL 3 weeks ago
TODO.md Remove unfinished libsndfile and libcdio stuff from master 3 weeks ago
libarcsdec.pc.in Change dependency on libarcs to libarcstk 1 month ago

README.md

Audio decoder and TOC parser adapters for libarcstk

MIT licensed

What libarcsdec is

  • A high-level API for sample and metadata input for libarcstk
  • A bunch of decoder and parser adapters to let you calculate ARCSs on your already archived lossless audio data
  • Facility to read virtually any lossless codec from virtually any container file (by the use of external dependencies)
  • Lets you recalculate ARCSs of a CD image at any time after ripping
  • You define the task like “Take this audio and this TOC and just give me the checksums”
  • Hides completely the concrete decoding of audio data
  • Hides completely the parsing of metadata files

The following features are planned, but not yet implemented:

  • Metadata parser for compact discs (based on libcdio)
  • Metadata parser for cdrdao’s TOC format
  • Generic audio reader based on libsndfile (just as an alternative to ffmpeg)
  • Add OGG support to the audio reader for FLAC/FLAC
  • Add support for embedded CUE sheets to the audio reader for FLAC/FLAC

Current codecs and formats

Libarcsdec contains:

  • TOC/Metadata parser for CUE sheets (based on libcue >= 2.0.0)
  • Generic audio reader (based on ffmpeg >= 3.1, for any lossless codec in any container, e.g. ALAC/M4, ALAC/CAF, APE/APE, AIFF/AIFF, FLAC/OGG … you name it)
  • Audio reader for FLAC/FLAC files (based on flac/libFLAC++)
  • Audio reader for lossless Wavpack/WV files (based on libwavpack)
  • Native audio reader for RIFFWAV/PCM files

What libarcsdec does not

  • Libarcsdec does not alter your files in any way and cannot be used for tagging etc.
  • Libarcsdec does not contribute to tasks like verifying/matching, computing of the AccurateRip identifier, parsing the AccurateRip response etc. The API for those things is already provided by libarcstk
  • Libarcsdec does not rip CDs
  • Libarcsdec offers no network facilities and is not supposed to do so. The actual HTTP request for fetching the reference values from AccurateRip is better performed by the HTTP networking client of your choice.

How to Build

Mandatory buildtime dependencies:

  • cmake >= 3.9.6

Mandatory build- and runtime dependencies:

  • libarcstk >= 0.1.0-alpha.1
  • libcue >= 2.0.0

Optional default build- and runtime dependencies:

  • FLAC++ headers >= 1.3.1
  • libwavpack >= 5.0.0
  • ffmpeg >= 3.1

If you do not need any of the optional default dependencies, you can switch them off independently from each other:

  • build without FLAC support by -DWITH_FLAC=OFF
  • build without WavPack support by -DWITH_WVPK=OFF
  • build without ffmpeg support by -DWITH_FFMPEG=OFF

You cannot switch off libcue since this would leave libarcsdec unable to parse any TOC data, rendering it effectively useless.

Configure and start build

Build and install to just use the libarcsdec API:

$ cd libarcsdec     # your libarcsdec root directory where README.md resides
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..  # use any build switches you need
$ cmake --build .
$ sudo make install # installs to /usr/local

See a detailed HowTo explaining different build scenarios and all build switches.

How to Use

Current Limitations

  • Consider this pre-alpha quality
  • No production release yet - will be 1.0.0
  • API is not considered stable before 1.0.0 (may change any time in any way until then)
  • The strategy to select a reader for a given input is rudimentary: just the first reader that passes the format tests is selected. So the reader appearing accepting codec/format X occurring first in the list “shadows” all subsequent readers that would also be able to read the input.
  • The readers try to guess the channel ordering to recognize swapped channels. The default channel assignment left/right (with left = channel 0, right = channel 1) works well but scenarios with different channel assignment are not well tested
  • Some readers may be more robust than others, especially the very fast RIFF/WAV PCM reader should be considered a last resort (it is valuable for debugging and testing)
  • Handling of data tracks is not implemented and data tracks are just processed like audio tracks. What happens is completely untested.
  • Untested on big endian plattforms
  • Never built, installed or tested on Windows or Mac OS X

Bugs

  • No sufficient unit tests yet