derselbst / ANMP

multi-channel loopable video game music player for nerds and audiophiles
GNU General Public License v2.0
32 stars 3 forks source link
audio-files audio-formats audio-normalization audio-player cuesheet ebur128 fluidsynth frontend gapless linux looping loops midi music-player n64 nintendo64 pcm qt5 video-game-music

ANMP

Another Nameless Music Player

Build Status Project Stats SonarCloud

ANMP Screenshot

Features

ANMP aims to be a versatile but lightweight audio player, just as the other hundred thousands out there. It is written in C++11. As being only a frontend, ANMP itself doesnt know anything about audio formats and how to decode them. That's why it uses 3rd party libraries to decode them. By using VgmStream, GameMusicEmu, LazyUSF and supporting looped songs natively, ANMP is esp. suited to play various audio formats from video games. Moreover it supports Looped Midi Tracks.

Main Features

ANMP does NOT...

ANMP handles audio differently than others: Instead of retrieving only small buffers that hold the raw PCM data, ANMP fetches the PCM of the whole file and puts that into memory. Todays computers have enough memory to hold raw PCM of even longer audio files. Uncompressing big audio files can take a long time, though. Thus filling the PCM buffer is usually done asynchronously. When the next song shall be played, the PCM buffer of the former song is released.

However, ANMP also supports rendering PCM to a small buffer. This method will be used if there is not enough memory available to hold a whole song in memory. This is esp. true, if the user requests infinite playback and the underlying song supports that but doesnt specify any loop points (as it applies to emulated sound formats like the Ultra64 Sound Format (USF)). In this case PCM gets rendered to a small buffer. Whenever this method is used, there will be no seeking within the song possible though.

Cue sheets will just add the same song file multiple times to a playlist, but with different file-offsets.

Implementing new formats shall be done by deriving the abstract base class Song. By that a wrapper for any library that actually supports this format is written.

The core of ANMP (i.e. everything in src/) is strictly keept free of any QT5 dependencies. Makes reuseage a lot easier.

Get ANMP

See HERE for precompiled packages. Due to a lack of vgmstream and lazyusf on ArchLinux and Debian/Ubuntu, only the RPM packages are built with all features and codec support available for ANMP.

Build Dependencies

At least one of the following codec libraries

(depending on which audio formats ANMP shall be able to play)

For audio playback: at least one of the following audio I/O libraries

(if none of them, only WAVE files can be written)

Optional

Building from Source (Linux)

mkdir build && cd build
cmake ..
make

Also see [Wiki] About the buildsystem

TODO

Legal

ANMP is licensed under the terms of the GNU GENERAL PUBLIC LICENSE Version 2, see LICENSE.

Copyright (C) 2016-2022 Tom Moebert (derselbst)