All Projects → derselbst → ANMP

derselbst / ANMP

Licence: GPL-2.0 License
multi-channel loopable video game music player for nerds and audiophiles

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to ANMP

Html Midi Player
🎹 Play and display MIDI files on the web
Stars: ✭ 158 (+887.5%)
Mutual labels:  music-player, midi, audio-player
audioStreamDemo
A music player created in swift using AVPlayer to stream audio from server.
Stars: ✭ 33 (+106.25%)
Mutual labels:  music-player, audio-player
TonUINO
Alternative TonUINO Firmware
Stars: ✭ 112 (+600%)
Mutual labels:  music-player, audio-player
MusicFolderPlayer
An elegant HTML5 web folder player for parties and/or private music collections, with playlist management that's just better.
Stars: ✭ 89 (+456.25%)
Mutual labels:  music-player, audio-player
Swift Radio Pro
Professional Radio Station App for iOS!
Stars: ✭ 2,644 (+16425%)
Mutual labels:  music-player, audio-player
minimal-player
This is a minimal, clean audio/music/mp3 player with spinning cover images, built with jQuery, TweenMax.js and SVG images.
Stars: ✭ 48 (+200%)
Mutual labels:  music-player, audio-player
JetTunes-Desktop-Music-Player
Material design music player made with javafx
Stars: ✭ 36 (+125%)
Mutual labels:  music-player, audio-player
LabMidi
Midi IN and OUT. Standard midi file parser and player. Midi Softsynth implementation.
Stars: ✭ 38 (+137.5%)
Mutual labels:  music-player, midi
facet
Facet is a live coding system for algorithmic music
Stars: ✭ 72 (+350%)
Mutual labels:  midi, audio-player
violin
🎵 Minimalistic music player for desktop devices.
Stars: ✭ 40 (+150%)
Mutual labels:  music-player, audio-player
React H5 Audio Player
React audio player component with UI. It provides time indicator on both desktop and mobile devices.
Stars: ✭ 226 (+1312.5%)
Mutual labels:  music-player, audio-player
Qt5-MusicPlayer
基于Qt5开发的一个小巧精美的本地音乐播放器。代码注释详细,适合作为一个用于入门的Qt5实战项目。
Stars: ✭ 136 (+750%)
Mutual labels:  music-player, qt5
Musikcube
a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++
Stars: ✭ 2,663 (+16543.75%)
Mutual labels:  music-player, audio-player
purescript-school-of-music
Port of the Haskell School of Music to Purescript
Stars: ✭ 21 (+31.25%)
Mutual labels:  music-player, midi
Audiomotion.js
High-resolution real-time spectrum analyzer and music player using Web Audio and Canvas APIs.
Stars: ✭ 177 (+1006.25%)
Mutual labels:  music-player, audio-player
pushtape-player.js
Customizable JS audio page player with global playback controls and autoscan (mutationobserver), built on Soundmanager2.
Stars: ✭ 27 (+68.75%)
Mutual labels:  music-player, audio-player
Sbplayerclient
支持全格式的mac版视频播放器
Stars: ✭ 110 (+587.5%)
Mutual labels:  music-player, audio-player
Cog
Cog - A Free and Open Source Audio Player for macOS 10.13+
Stars: ✭ 152 (+850%)
Mutual labels:  music-player, audio-player
nfluidsynth
libfluidsynth C# binding
Stars: ✭ 18 (+12.5%)
Mutual labels:  midi, fluidsynth
SwimplyPlayIndicator
Animated PlayIndicator written in SwiftUI. Inspired by Apple's Music Player.
Stars: ✭ 52 (+225%)
Mutual labels:  music-player, audio-player

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

  • muting multichannel audio files
  • gapless playback (for most streamed audio formats)
  • arbitrary (forward) looping of songs (i.e. even nested loops)
  • synthesizing MIDI files using fluidsynth
    • multi-channel audio rendering
    • overlapping notes do not kill each other
    • unrolling looped MIDI tracks
    • volume response compatible to N64's software synth
    • supports an IIR lowpass filter compatible to Rareware's N64 games (Conkers Bad Fur Day, Jet Force Gemini)
  • native support for the Ultra64 Compressed MIDI Format (.cmf files) as used in many games (used by Rareware and others)
  • support for cue sheets
  • support for audio normalization based on EBU R 128
  • exposes basic commands via D-Bus

ANMP does NOT...

  • crawl through your music library, building a huge useless database for all artists, albums, genres, titles, etc., just because the user wants to have a nice overview over what is on his HDD (SSD); the filesystem is our database!
  • mess around with any audio files, i.e. no changing of ID3 tags, no writing of ReplayGain or whatever; additional info will always be written to separate files and ONLY then, when the user explicitly says so (e.g. by executing anmp-normalize)
  • support ReplayGain tags, since video game codecs don't do (instead it uses a custom approach using helper files to handle loudness normalization independently from audio formats)
  • provide a multilingual GUI; everything is done in English!

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

  • cmake >= 3.1.0
  • a C99 and C++11 compilant compiler (e.g. clang >= 3.5 or gcc >= 4.8)
  • Qt5Widgets and Qt5DBus (highly recommended for GUI support, since there currently is no CLI)

At least one of the following codec libraries

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

  • libsndfile (strongly recommended to play most common audio formats)
  • mad >= 0.15.1b (to play mp3 files)
  • ffmpeg >= 3.1.0 (specifically libavcodec, libavformat, libavutil, libswresample)
  • lazyusf2 (to play Ultra64 Sound Format (usf))
  • libgme (Famicom (nsf), SuperFamicon (spc), GameBoy (gbs), etc.)
  • vgmstream (various audio formats from sixth generation video game consoles and following)
  • aopsf (Portable Sound Format (PSF1 and PSF2))
  • modplug or libopenmpt (Tracker formats, like MOD, IT, XM, ...)
  • fluidsynth and libsmf (synthesize and play MIDI files)

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

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

  • ALSA (audio playback on Linux only)
  • Jack (low latency audio playback; also requires libsamplearate >= 0.1.9)
  • PortAudio (for crossplatform audio playback support)

Optional

  • libcue (for cuesheet support)
  • libebur128 (for generating loudness normalization files (*.ebur128) using anmp-normalize)
  • Qt5OpenGL (for nice blinky audio visualizers)

Building from Source (Linux)

mkdir build && cd build
cmake ..
make

Also see [Wiki] About the buildsystem

TODO

  • support loading playlists (.m3u !)
  • serialize playlist to file on close, restore on open
  • support surround and quadraphonic files

Legal

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

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].