Music organisation and streaming system in Go
Tchaik is an open source music organisation and streaming system. The backend is written in Go, the frontend is built using React, Flux and PostCSS.
If you haven't setup Go before, you need to first set a
GOPATH(see https://golang.org/doc/code.html#GOPATH).
To fetch and build the code for Tchaik:
$ go get tchaik.com/cmd/...
This will fetch the code and build the command line tools into
$GOPATH/bin(assumed to be in your
PATHalready).
Building the UI:
$ cd $GOPATH/src/tchaik.com/cmd/tchaik/ui $ npm install $ gulp
Alternatively, if you want the JS and CSS to be recompiled and have the browser refreshed as you change the source files:
$ WS_URL="ws://localhost:8080/socket" gulp serve
Then browse to
http://localhost:3000/to use tchaik.
To start Tchaik you first need to move into the
cmd/tchaikdirectory:
$ cd $GOPATH/src/tchaik.com/cmd/tchaik
The easiest way to begin is to build a Tchaik library on-the-fly and start the UI in one command:
$ tchaik -itlXML ~/path/to/iTunesLibrary.xml
You can also convert the iTunes Library into a Tchaik library using the
tchimporttool:
$ tchimport -itlXML ~/path/to/iTunesLibrary.xml -out lib.tch $ tchaik -lib lib.tch
NB: A Tchaik library will generally be smaller than its corresponding iTunes Library. Tchaik libraries are stored as gzipped-JSON (rather than Apple plist) and contain a subset of the metadata used by iTunes.
Alternatively you can build a Tchaik library on-the-fly from a directory-tree of audio files. Only files with supported metadata (see github.com/dhowden/tag) will be included in the index:
$ tchaik -path /all/my/music
To avoid rescanning your entire collection every time you restart, you can build a Tchaik library using the
tchimporttool:
$ tchimport -path /all/my/music -out lib.tch $ tchaik -lib lib.tch
A full list of command line options is available from the
--helpflag:
$ tchaik --help Usage of tchaik: -add-path-prefix prefix add prefix to every path -artwork-cache path path to local artwork cache (content addressable) -auth-password password password to use for HTTP authentication -auth-user user user to use for HTTP authentication (set to enable) -checklist file checklist file (default "checklist.json") -cursors file cursors file (default "cursors.json") -debug print debugging information -favourites file favourites file (default "favourites.json") -itlXML file iTunes Library XML file -lib file Tchaik library file -listen address bind address for main HTTP server (default "localhost:8080") -local-store path path to local media store (prefixes all paths) (default "/") -media-cache path path to local media cache -path directory directory containing music files -play-history file play history file (default "history.json") -playlists file playlists file (default "playlists.json") -remote-store address address for remote media store: tchstore server :, s3://:/path/to/root for S3, or gs:///path/to/root for Google Cloud Storage -tls-cert file certificate file, must also specify -tls-key -tls-key file certificate key file, must also specify -tls-cert -trace-listen address bind address for trace HTTP server -trim-path-prefix prefix remove prefix from every path -ui-dir directory UI asset directory (default "ui")
Set
-local-storeto the local path that contains your media files. You can use
trim-path-prefixand
add-path-prefixto rewrite paths used in the Tchaik library so that file locations can still be correctly resolved.
Set
-remote-storeto the URI of a running tchstore server (
hostname:port). Instead, S3 paths can be used:
s3://:/path/to/root(set the environment variables
AWS_ACCESS_KEY_IDand
AWS_SECRET_ACCESS_KEYto pass credentials to the S3 client), or Google Cloud Storage paths:
gs:///path/to/root(set environment variable
GOOGLE_APPLICATION_CREDENTIALSto point to the JSON credentials file).
Set
-media-cacheto cache all files loaded from
-remote-store(or
-local-storeif set).
Set
-artwork-cacheto create/use a content addressable filesystem for track artwork. An index file will be created in the path on first use. The folder should initially be empty to ensure that no other files interfere with the system.
Set
-trace-listento a suitable bind address (i.e.
localhost:4040) to start an HTTP server which defines the
/debug/requestsendpoint used to inspect server requests. Currently we only support tracing for media (track/artwork/icon) requests. See https://godoc.org/golang.org/x/net/trace for more details.
The default value for parameter
-local-storeis
/which does not work on Windows. When all library music is organised under a common path you can set
-local-storeand
-trim-path-prefixto get around this (for instance
-local-store C:\Path\To\Music -trim-path-prefix C:\Path\To\Music).
Development is on-going and the codebase is changing very quickly. If you're interested in contributing then it's safest to jump into our gitter room and chat to people before getting started!