10 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:
installation
binaries are available in the releases page.
while macos binaries are provided, you can also install via homebrew as follows:
brew tap clangen/musikbox
brew install musikbox
musikbox
raspberry pi
musikbox runs well on a raspberry pi, connected to you home stereo. see here for detailed setup instructions.
compiling
if you'd like to compile the project yourself, you can check out the build instructions.
streaming server
it's important to understand that, out of the box, the remote api should NOT be considered safe for use outside of a local network. the websockets service only supports a simple password challenge, and the audio http server just handles Basic authorization. it does not provide ssl or tls.
the server also stores the password in plain text in a settings file on the local machine.
you can fix some of this using a reverse proxy to provide ssl termination. details in the ssl-server-setup section. while this improves things, you should exercise caution exposing these services over the internet.
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.
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 |