11 KiB
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 also runs well on a raspberry pi with raspbian, and can be setup as a streaming audio server.
it looks something like this on windows:
and this on macos:
and on linux:
you can also stream audio from, or remote control musikbox using the musikdroid
android app, which can be downloaded in the releases
section above. it looks like this:
raspberry pi
want to run musikbox on a raspberry pi, connected to you home stereo? see here.
streaming server documentation
if you're interested in writing your own frontend, api documentation is available here. the streaming server api uses a combination of websockets and vanilla http, and is included in every musikbox
distribution.
compiling
windows
- grab the Visual Studio 2017 Community Edition and install the 32-bit c++ compiler.
- clone the musikcube sources:
git clone https://github.com/clangen/musikcube.git
- install the 32 bit version of boost 1.64. ensure it shares the same parent directory with musikcube. e.g:
c:\src\musikcube
andc:\src\boost_1_64_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 libmicrohttpd lame
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 libcurl libmicrohttpd libmp3lame
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 windowSHIFT+TAB
select previous window~
switch to console viewa
switch to library views
switch to settings viewi
volume up 5%k
volume down 5%m
toggle volume mutej
previous trackl
next tracku
back 10 secondso
forward 10 secondsv
show / hide visualizerr
repaint the screen.
toggle repeat mode (off/track/list),
(un)shuffle play queueCTRL+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 viewn
show play queuef
show album/artist/genre searcht
show track search1
browse by artist2
browse by album3
browse by genre4
browse by album artist5
browse by playlistM-n
create a new empty playlistM-s
save the currently selected playlistDEL
(BACKSPACE
on macos) in the playlists pane: delete the selected playlistM-r
rename the selected playlistM-UP
(CTRL-UP
on macos) move the selected track upM-DOWN
(CTRL-DOWN
on macos) move the selected track downDEL
(BACKSPACE
on macos) in the tracks pane: delete the selected track
x
jump to playing artist/album/genre in browse viewM-ENTER
show a context menu for the currently selected item (album, artist, genre, track)SPACE
pause/resume
you can manipulate the play play queue
as follows:
M-s
save current queue as a playlistM-l
load a previously saved playlistM-x
delete a previously saved playlistM-r
rename a playlistM-UP
(CTRL-UP
on macos) move the selected track upM-DOWN
(CTRL-DOWN
on macos) move the selected track downDEL
(BACKSPACE
on macos) delete the selected track
a couple important notes:
- on macos make sure you configure your terminal emulator to treat your left alt key as "+Esc" or "Meta"
ALT
is theM
odifier key in the windows build
sdk
the musikcube sdk is a set of small, pure-virtual c++ classes and a handful of enums and constants. they're still in the process of being refined. you can see what they currently 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 (in the case of some macos and win32 APIs) non-free projects and libraries:
core | decoders | outputs | metadata | networking | miscellaneous | ui |
---|---|---|---|---|---|---|
boost | flac | alsa | taglib | websocketpp | rxjava | ncurses |
sqlite | ogg/vorbis | pulseaudio | glide | libmicrohttpd | rxandroid | pdcurses (win32a variant) |
utfcpp | mad + nomad | core audio | libcurl | recycler-fast-scroll | ||
json.hpp | faad2 | wasapi | libressl | |||
kissfft | exoplayer | directsound | nv-websocket-client | |||
sigslot | waveout | okhttp | ||||
wcwidth.c |