/wavepipe

Cross-platform media server, written in Go. MIT Licensed.

Primary LanguageGoMIT LicenseMIT

Deprecated: this project is no longer being maintained.

This was one of my first Go projects, and I am no longer maintaining it. Feel free to fork if you'd like to continue working with it.

wavepipe Build Status GoDoc

Cross-platform media server, written in Go. MIT Licensed.

API documentation may be found in doc/API.md. Full code documentation may be found on GoDoc.

wavepipe currently has no official web UI, but it can be used with a variety of Subsonic clients. Follow the guide under doc/Subsonic.md to set wavepipe up for use with Subsonic clients!

wavepipe is a spiritual successor to WaveBox, and much of its design and ideas are inspired from the WaveBox project. This being said, wavepipe is an entirely new project, with its own goals.

Installation

wavepipe can be built using Go 1.3+, but also has a dependency on TagLib for its ability to read media metadata. The TagLib static libraries can be installed on Ubuntu as follows:

$ sudo apt-get install libtagc0-dev

Once the TagLib library is installed, wavepipe can be downloaded, built, and installed, simply by running:

$ go get github.com/mdlayher/wavepipe

To aid in debugging, the current git commit revision can be injected into wavepipe via the Go linker. If wavepipe is built without the proper flags, it will log a warning stating "empty git revision", and ask to be built using make. For this reason, it is recommended to build and install wavepipe using the included Makefile:

$ make
$ make install

To enable wavepipe's transcoding functionality, you must have ffmpeg installed. In order to enable MP3 and Ogg Vorbis transcoding, ffmpeg must have the libmp3lame and libvorbis codecs, respectively. If the codec is missing, transcoding to that codec will be disabled.

On newer versions of Ubuntu, ffmpeg with libmp3lame and libvorbis can be installed as follows:

$ sudo apt-get install ffmpeg libavcodec-extra-53

Configuration

On first run, wavepipe will attempt to create its sqlite database using the option set via the -sqlite flag. The default location is ~/.config/wavepipe/wavepipe.db. Once this is done, the user must at least specify the -media command line flag, to allow wavepipe to scan and watch a media folder. Here is an example of the default command-line configuration, with the media folder specified as the user's home media folder:

$ wavepipe -host :8080 -sqlite ~/.config/wavepipe/wavepipe.db -media ~/Music/

These options will:

  • Bind wavepipe to localhost on port 8080
  • Use the specified location for its sqlite database
  • Scan and watch media in the specified folder

The host and sqlite database will use the above configuration by default, but the media folder must be specified.

$ wavepipe -media ~/Music/

Recommendations

For the best possible experience while using wavepipe, it is recommended that you follow these tips:

  • Run wavepipe using SSL. In order to effectively secure your wavepipe session, SSL is a must. The most simple way to accomplish this is to proxy requests to wavepipe via nginx, with nginx configured to use SSL.
  • Ensure your media is properly tagged. wavepipe will provide a much better experience for users who ensure that their media is consistently tagged. Proper artist and album naming are especially key, in order to enable the best possible experience.

FAQ

Q: Where's the web UI?

A: My frontend skills are very limited, but I am in the process of learning Ember.js. If you'd like to help contribute code for an official wavepipe web UI, I'd love to hear from you! Feel free to contact me at mdlayher (at) gmail (dot) com!

Q: Does wavepipe recognize the ALBUMARTIST tag?

A: Not yet, but it will in the future! I am currently developing a native Go audio tag parser, inspired by TagLib. The project is called taggolib, and I intend to use it with wavepipe to completely remove the need for Cgo and TagLib bindings. Once taggolib is able to parse a wide variety of media formats, the dev_taggolib branch will be merged into master, providing additional functionality and much more tagging flexibility.