2016-05-30 01:26:08 -07:00
# musikcube
2017-05-29 14:42:06 -07:00
a cross-platform audio engine and player written in c++.
2016-05-30 01:26:08 -07:00
# musikbox
2016-09-20 13:30:49 -07:00
a curses frontend to musikcube.
2016-05-30 01:26:43 -07:00
2017-05-29 14:42:06 -07:00
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.
2016-05-30 01:32:37 -07:00
2016-05-30 21:33:58 -07:00
it looks something like this on windows:
2016-08-10 00:02:39 -07:00

2016-05-30 21:33:58 -07:00
2017-05-29 14:42:06 -07:00
and this on macos:
2016-05-30 21:33:58 -07:00
2016-08-10 00:02:39 -07:00

2016-05-30 21:33:58 -07:00
2017-05-29 14:42:06 -07:00
and on linux:
2016-06-26 19:18:26 -07:00
2016-08-10 00:02:39 -07:00

2016-06-26 19:18:26 -07:00
2017-04-30 20:07:48 -07:00
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:
2017-02-18 21:57:58 -08:00

2017-02-20 00:35:51 -08:00
# raspberry pi
2017-05-29 14:42:42 -07:00
want to run musikbox on a raspberry pi, connected to you home stereo? [see here ](https://github.com/clangen/musikcube/wiki/raspberry-pi ).
2017-05-29 14:42:06 -07:00
# streaming server documentation
if you're interested in writing your own frontend, [api documentation is available here ](https://github.com/clangen/musikcube/wiki/remote-api-documentation ). the streaming server api uses a combination of websockets and vanilla http, and is included in every `musikbox` distribution.
2017-02-20 00:35:51 -08:00
2016-05-30 18:36:41 -07:00
# compiling
## windows
2017-04-09 00:02:58 -07:00
- grab the [Visual Studio 2017 Community Edition ](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx ) and install the 32-bit c++ compiler.
2016-05-30 18:36:41 -07:00
- clone the musikcube sources: `git clone https://github.com/clangen/musikcube.git`
2017-06-07 19:52:50 -07:00
- install the [32 bit version of boost 1.64 ](https://sourceforge.net/projects/boost/files/boost-binaries/1.64.0/boost_1_64_0-msvc-14.1-32.exe/download ). ensure it shares the same parent directory with musikcube. e.g: `c:\src\musikcube` and `c:\src\boost_1_64_0` -- the project's solution will reference it via relative path.
2016-05-30 21:38:10 -07:00
- open `musikcube.sln` and build/run.
2016-05-30 18:36:41 -07:00
## mac
2016-05-30 21:38:54 -07:00
you'll need [homebrew ](http://brew.sh/ ) to install the required dependencies.
2016-05-30 18:36:41 -07:00
2016-08-28 13:16:09 -07:00
### automatic
2016-08-28 14:59:51 -07:00
- `brew tap clangen/musikbox`
- `brew install musikbox`
2016-08-28 13:16:09 -07:00
- `musikbox`
### manual
2017-04-18 00:45:03 -07:00
- `brew install cmake boost libogg libvorbis flac faad2 libmicrohttpd`
2016-05-30 18:36:41 -07:00
- `git clone https://github.com/clangen/musikcube.git`
- `cd musikcube`
- `cmake .`
- `make`
- `cd bin`
2016-05-30 20:09:38 -07:00
- `./musikbox`
2016-05-30 18:36:41 -07:00
2016-06-09 22:54:39 -07:00
## linux
2017-05-29 17:34:56 -07:00
- install the following libraries and their development packages: `cmake boost libogg vorbis flac faad2 ncurses zlib asound pulse libcurl libmicrohttpd libmp3lame`
2016-06-09 22:54:39 -07:00
- `git clone https://github.com/clangen/musikcube.git`
- `cd musikcube`
- `cmake .`
- `make`
2016-08-28 13:16:09 -07:00
- `sudo make install`
- `musikbox`
2016-06-09 22:54:39 -07:00
2016-05-30 21:45:13 -07:00
## keyboard shortcuts
2016-08-22 21:28:56 -07:00
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.
2017-03-05 13:24:29 -08:00
you may also change hotkeys by editing `~/.musikcube/hotkeys.json` and restarting the app. a hotkey tester is provided in the settings screen.
2016-05-30 21:45:13 -07:00
2016-06-23 22:22:26 -07:00
- `TAB` select next window
- `SHIFT+TAB` select previous window
2016-08-22 21:28:56 -07:00
- `~` switch to console view
- `a` switch to library view
- `s` switch to settings view
- `i` volume up 5%
- `k` volume down 5%
2016-11-19 21:41:43 -08:00
- `m` toggle volume mute
2016-08-22 21:28:56 -07:00
- `j` previous track
- `l` next track
- `u` back 10 seconds
- `o` forward 10 seconds
2016-11-08 16:10:24 -08:00
- `v` show / hide visualizer
2016-08-22 21:28:56 -07:00
- `r` repaint the screen
2016-09-20 12:17:15 -07:00
- `.` toggle repeat mode (off/track/list)
- `,` (un)shuffle play queue
2016-05-30 21:45:13 -07:00
- `CTRL+p` pause/resume (globally)
2016-06-25 11:40:24 -07:00
- `CTRL+x` stop (unload streams, free resources)
2016-05-30 21:45:13 -07:00
- `CTRL+d` quit
2016-06-03 22:29:01 -07:00
and a couple hotkeys that are specific to the library view:
2016-08-22 21:28:56 -07:00
- `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
2016-11-19 21:41:43 -08:00
- `x` jump to playing artist/album/genre in browse view
2016-06-03 22:29:01 -07:00
- `SPACE` pause/resume
2016-05-30 22:03:36 -07:00
*important*: on OSX make sure you configure your terminal emulator to treat your left alt key as "+Esc" or "Meta".
2016-05-30 01:32:37 -07:00
# sdk
2017-03-05 13:29:44 -08:00
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
2017-03-05 13:24:29 -08:00
# dependencies
2017-04-16 00:37:01 -07:00
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:
2017-03-05 13:24:29 -08:00
core:
* [boost ](http://www.boost.org/ )
* [sqlite ](https://www.sqlite.org/ )
* [utfcpp ](https://github.com/nemtrif/utfcpp )
* [json.hpp ](https://github.com/nlohmann/json )
* [kissfft ](http://kissfft.sourceforge.net/ )
* [sigslot ](http://sigslot.sourceforge.net/ )
* [wcwidth.c ](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c )
ui:
* [ncurses ](https://www.gnu.org/software/ncurses/ )
* [pdcurses (win32a variant) ](https://www.projectpluto.com/win32a.htm )
decoders:
* [flac ](https://xiph.org/flac/ )
* [ogg/vorbis ](http://www.vorbis.com/ )
2017-03-05 13:29:14 -08:00
* [mad ](http://www.underbit.com/products/mad/ ) + [nomad ](https://github.com/cmus/cmus/tree/master/ip )
2017-03-05 13:24:29 -08:00
* [faad2 ](http://www.audiocoding.com/faad2.html )
2017-04-30 00:16:49 -07:00
* [exoplayer ](https://github.com/google/ExoPlayer )
2017-03-05 13:24:29 -08:00
outputs:
* [pulseaudio ](https://www.freedesktop.org/wiki/Software/PulseAudio/ )
* [alsa ](https://www.alsa-project.org )
* [core audio ](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html )
* [wasapi ](https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85 ).aspx)
* [directsound ](https://msdn.microsoft.com/en-us/library/windows/desktop/ee416960(v=vs.85 ).aspx)
* [waveout ](https://msdn.microsoft.com/en-us/library/windows/desktop/dd743876(v=vs.85 ).aspx)
metadata-related:
* [taglib ](http://taglib.org/ )
* [glide ](https://github.com/bumptech/glide )
networking:
* [websocketpp ](https://github.com/zaphoyd/websocketpp )
2017-04-16 00:36:31 -07:00
* [libmicrohttpd ](https://www.gnu.org/software/libmicrohttpd/ )
2017-04-18 00:43:16 -07:00
* [libcurl ](https://curl.haxx.se/libcurl/ )
* [libressl ](https://www.libressl.org/ )
2017-03-05 13:24:29 -08:00
* [nv-websocket-client ](https://github.com/TakahikoKawasaki/nv-websocket-client )
* [okhttp ](http://square.github.io/okhttp/ )
2017-04-29 21:15:10 -07:00
miscellaneous
* [rxjava ](https://github.com/ReactiveX/RxJava )
2017-04-30 00:16:49 -07:00
* [rxandroid ](https://github.com/ReactiveX/RxAndroid )
2017-04-30 15:52:06 -07:00
* [recycler-fast-scroll ](https://github.com/plusCubed/recycler-fast-scroll )