a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++
Go to file
casey langen 2dac91c429 Added SDK support for plugins that can index their own audio content.
- Added IIndexerSource interface: plugins will be able to implement this
  interface to add tracks to the library that will be indexed and
  maintained like all other tracks
- Added IIndexerWriter interface: IIndexerSource plugins will use this
  interface to add/remove/update track info with the main app
- Added IIndexerNotifier: interface used to notify the app that it needs
  to be re-indexed.
- Added "source_id" , "external_id", and "visible" column to the tracks
  table, with appropriate indexes.
- Updated all queries to take "source_id" and "visible" into account
- Extracted TrackMetadataQuery from TrackList. Never should have been
  there to begin with, but was due to some technical limitations that no
  longer exist.
- Fixed a really old indexer bug where the reported number of file scanned
  was not accurate. Strange this wasn't noticed before.
- Added "SetIndexerNotifier" injection method
- Fixed a bug in TrackMetadataQuery -- it was unnecessarily relying upon
  the paths table, which was causing query errors when the table was
  empty.
- Use a cache for local file paths instead of requiring an async round
  trip when adding/removing
- Remove use of manual "ANALYZE", it was causing strange performance
  degradation issues. Instead, move to a set of PRAGMAs that instructs
  sqlite to run these optimizations when necessary.
- Updated ::GetInt32 and ::GetUint32 return types to be explicit as to play
  more nicely with clang -- may as well, we're updating the SDK version
  anyway.
2017-03-31 21:45:14 -07:00
src Added SDK support for plugins that can index their own audio content. 2017-03-31 21:45:14 -07:00
.gitignore Added a (crappy) app icon to win32 musikbox build. 2017-02-25 21:59:49 -08:00
archive-macos.sh Updated CHANGELOG for release, and tweaked the archive filenames. 2017-03-26 20:53:05 -07:00
archive-win32.sh Updated CHANGELOG for release, and tweaked the archive filenames. 2017-03-26 20:53:05 -07:00
CHANGELOG.txt Fixed clang 7.3 compile error. 2017-03-27 10:30:45 -07:00
CMakeLists.txt Fixed clang 7.3 compile error. 2017-03-27 10:30:45 -07:00
CONTRIBUTORS.txt dang 2017-03-27 00:50:52 -07:00
LICENSE.txt Updated LICENSE.txt 2016-06-11 18:22:59 -07:00
musikcube.sln Added the websocket client. 2017-02-14 22:05:44 -08:00
README.md Update README.md 2017-03-25 12:08:49 -07:00

musikcube

a cross-platform audio engine and player written in C++.

musikbox

a curses frontend to musikcube.

musicbox compiles and runs easily on Windows, macOS and Linux.

it looks something like this on windows:

windows screenshot

and this on macOS:

osx screenshot

and linux:

linux screenshot

you can also remote control musikbox using the musikdroid android app, which can be downloaded in the releases section above. it looks like this:

android screenshot

raspberry pi

interested in running musikbox on a raspberry pi, connected to you home stereo? see here!

compiling

windows

  • grab the Visual Studio 2017 Community Edition and install the 32-bit c++ compiler, plus the "v140" tools package.
  • clone the musikcube sources: git clone https://github.com/clangen/musikcube.git
  • install the 32 bit version of boost 1.60. ensure it shares the same parent directory with musikcube. e.g: c:\src\musikcube and c:\src\boost_1_60_0 -- the project's solution will reference it via relative path.
  • open musikcube.sln and build/run.

mac

you'll need homebrew to install the required dependencies.

automatic

  • brew tap clangen/musikbox
  • brew install musikbox
  • musikbox

manual

  • brew install cmake boost libogg libvorbis flac faad2
  • git clone https://github.com/clangen/musikcube.git
  • cd musikcube
  • cmake .
  • make
  • cd bin
  • ./musikbox

linux

  • install the following libraries and their development packages: cmake boost libogg vorbis flac faad2 ncurses zlib asound pulse
  • git clone https://github.com/clangen/musikcube.git
  • cd musikcube
  • cmake .
  • make
  • sudo make install
  • musikbox

keyboard shortcuts

the hotkeys listed below can generally be used at any time; however, if an input field is focused some may not work. you can enter command mode by pressing ESC, which will highlight the bottom command bar and accept all hotkeys. command mode may be deactivated by pressing ESC again.

you may also change hotkeys by editing ~/.musikcube/hotkeys.json and restarting the app. a hotkey tester is provided in the settings screen.

  • TAB select next window
  • SHIFT+TAB select previous window
  • ~ switch to console view
  • a switch to library view
  • s switch to settings view
  • i volume up 5%
  • k volume down 5%
  • m toggle volume mute
  • j previous track
  • l next track
  • u back 10 seconds
  • o forward 10 seconds
  • v show / hide visualizer
  • r repaint the screen
  • . toggle repeat mode (off/track/list)
  • , (un)shuffle play queue
  • CTRL+p pause/resume (globally)
  • CTRL+x stop (unload streams, free resources)
  • CTRL+d quit

and a couple hotkeys that are specific to the library view:

  • b show browse view
  • n show play queue
  • f show album/artist/genre search
  • t show track search
  • 1 browse by artist
  • 2 browse by album
  • 3 browse by genre
  • x jump to playing artist/album/genre in browse view
  • SPACE pause/resume

important: on OSX make sure you configure your terminal emulator to treat your left alt key as "+Esc" or "Meta".

sdk

musikcube is built around its own SDK interfaces. they're still in the process of being refined. you can see what they look like here: https://github.com/clangen/musikcube/tree/master/src/core/sdk

dependencies

musikcube would not be possible without the following excellent free, open source, and non-free (in the case of macOS and win32 APIs) projects and libraries:

core:

ui:

decoders:

outputs:

metadata-related:

networking: