2016-05-30 08:26:08 +00:00
# musikcube
2017-05-29 21:42:06 +00:00
a cross-platform audio engine and player written in c++.
2016-05-30 08:26:08 +00:00
# musikbox
2016-09-20 20:30:49 +00:00
a curses frontend to musikcube.
2016-05-30 08:26:43 +00:00
2017-05-29 21:42:06 +00: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 08:32:37 +00:00
2016-05-31 04:33:58 +00:00
it looks something like this on windows:
2016-08-10 07:02:39 +00:00
![windows screenshot ](https://raw.githubusercontent.com/clangen/clangen-projects-static/master/musikcube/screenshots/windows.png )
2016-05-31 04:33:58 +00:00
2017-05-29 21:42:06 +00:00
and this on macos:
2016-05-31 04:33:58 +00:00
2016-08-10 07:02:39 +00:00
![osx screenshot ](https://raw.githubusercontent.com/clangen/clangen-projects-static/master/musikcube/screenshots/osx.png )
2016-05-31 04:33:58 +00:00
2017-05-29 21:42:06 +00:00
and on linux:
2016-06-27 02:18:26 +00:00
2016-08-10 07:02:39 +00:00
![linux screenshot ](https://raw.githubusercontent.com/clangen/clangen-projects-static/master/musikcube/screenshots/linux.png )
2016-06-27 02:18:26 +00:00
2017-05-01 03:07:48 +00: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-19 05:57:58 +00:00
![android screenshot ](https://raw.githubusercontent.com/clangen/clangen-projects-static/master/musikcube/screenshots/android.png )
2017-07-01 02:16:47 +00:00
# installation
2017-05-29 21:42:06 +00:00
2017-07-01 02:16:47 +00:00
binaries are available in the [releases ](https://github.com/clangen/musikcube/releases ) page.
2017-05-29 21:42:06 +00:00
2017-07-01 02:16:47 +00:00
while macos binaries are provided, you can also install via homebrew as follows:
2017-02-20 08:35:51 +00:00
2017-07-01 02:16:47 +00:00
- `brew tap clangen/musikbox`
- `brew install musikbox`
- `musikbox`
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
# raspberry pi
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
musikbox runs well on a raspberry pi, connected to you home stereo. [see here for detailed setup instructions ](https://github.com/clangen/musikcube/wiki/raspberry-pi ).
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
# compiling
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
if you'd like to compile the project yourself, you can check out the [build instructions ](https://github.com/clangen/musikcube/wiki/building ).
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
# streaming server
2016-08-28 20:16:09 +00:00
2017-07-01 02:16:47 +00:00
**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.
2016-08-28 20:16:09 +00:00
2017-07-01 02:16:47 +00:00
the server also stores the password in plain text in a settings file on the local machine.
2016-08-28 20:16:09 +00:00
2017-07-01 02:16:47 +00:00
you can fix some of this using a reverse proxy to provide ssl termination. details in the [ssl-server-setup section ](https://github.com/clangen/musikcube/wiki/ssl-server-setup ). while this improves things, you should exercise caution exposing these services over the internet.
2016-05-31 01:36:41 +00:00
2017-07-01 02:16:47 +00:00
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.
2016-06-10 05:54:39 +00:00
2016-05-31 04:45:13 +00:00
## keyboard shortcuts
2017-07-01 02:25:22 +00:00
a list of all keyboard shortcuts can be found in the [user guide ](https://github.com/clangen/musikcube/wiki/user-guide )
2016-05-31 05:03:36 +00:00
2016-05-30 08:32:37 +00:00
# sdk
2017-07-01 02:25:22 +00:00
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 slimmed down. you can see what they currently look like here: https://github.com/clangen/musikcube/tree/master/src/core/sdk
2017-03-05 21:24:29 +00:00
# dependencies
2017-06-18 05:48:47 +00: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 21:24:29 +00:00
2017-07-01 02:05:45 +00:00
| core | decoders | outputs | metadata | networking | miscellaneous | ui |
|-----------------------------------------------------------|-----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------------|----------------------------------------------------------------------|
| [boost ](http://www.boost.org/ ) | [flac ](https://xiph.org/flac/ ) | [alsa ](https://www.alsa-project.org ) | [taglib ](http://taglib.org/ ) | [websocketpp ](https://github.com/zaphoyd/websocketpp ) | [rxjava ](https://github.com/ReactiveX/RxJava ) | [ncurses ](https://www.gnu.org/software/ncurses/ ) |
| [sqlite ](https://www.sqlite.org/ ) | [ogg/vorbis ](http://www.vorbis.com/ ) | [pulseaudio ](https://www.freedesktop.org/wiki/Software/PulseAudio/ ) | [glide ](https://github.com/bumptech/glide ) | [libmicrohttpd ](https://www.gnu.org/software/libmicrohttpd/ ) | [rxandroid ](https://github.com/ReactiveX/RxAndroid ) | [pdcurses (win32a variant) ](https://www.projectpluto.com/win32a.htm ) |
| [utfcpp ](https://github.com/nemtrif/utfcpp ) | [mad ](http://www.underbit.com/products/mad/ ) + [nomad ](https://github.com/cmus/cmus/tree/master/ip ) | [core audio ](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html ) | | [libcurl ](https://curl.haxx.se/libcurl/ ) | [recycler-fast-scroll ](https://github.com/plusCubed/recycler-fast-scroll ) | |
| [json.hpp ](https://github.com/nlohmann/json ) | [faad2 ](http://www.audiocoding.com/faad2.html ) | [wasapi ](https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85 ).aspx) | | [libressl ](https://www.libressl.org/ ) | | |
| [kissfft ](http://kissfft.sourceforge.net/ ) | [exoplayer ](https://github.com/google/ExoPlayer ) | [directsound ](https://msdn.microsoft.com/en-us/library/windows/desktop/ee416960(v=vs.85 ).aspx) | | [nv-websocket-client ](https://github.com/TakahikoKawasaki/nv-websocket-client ) | | |
| [sigslot ](http://sigslot.sourceforge.net/ ) | | [waveout ](https://msdn.microsoft.com/en-us/library/windows/desktop/dd743876(v=vs.85 ).aspx) | | [okhttp ](http://square.github.io/okhttp/ ) | | |
| [wcwidth.c ](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c ) | | | | | | |