1Table of Contents
2=================
3
4 1. Introduction
5 2. Dependencies
6 3. Building
7 4. Bugs
8 5. Translations
9 6. Covers
10 7. CUE Files
11 8. Streams
12 9. MultiMedia Keys
1310. DBUS Actions
1411. Dynamic Helper Script - Local Mode
1512. Dynamic Helper Script - Server Mode
1613. Source Code
1714. Debug Logging
1815. Credits
1916. Windows
2017. Mac OSX
21
22
23
241. Introduction
25===============
26
27Cantata is a graphical client for MPD. It contains the following features:
28
29 1. Support for Linux, MacOSX, and Windows.
30 2. Multiple MPD collections.
31 3. Highly customisable layout.
32 4. Songs grouped by album in play queue.
33 5. Context view to show artist, album, and song information of current track.
34 6. Simple tag editor.
35 7. File organizer - use tags to organize files and folders.
36 8. Ability to calculate ReplyGain tags. (Linux only, and if relevant libraries
37    installed)
38 9. Dynamic playlists.
3910. Online services; Jamendo, Magnatune, SoundCloud, and Podcasts.
4011. Radio stream support - with the ability to search for streams via TuneIn,
41    ShoutCast, or Dirble.
4212. USB-Mass-Storage and MTP device support. (Linux only, and if relevant
43    libraries installed)
4413. Audio CD ripping and playback. (Linux only, and if relevant libraries
45    installed)
4614. Playback of non-MPD songs - via simple in-built HTTP server if connected
47    to MPD via a standard socket, otherwise filepath is sent to MPD.
4815. MPRISv2 DBUS interface.
4916. Basic support for touch-style interface (views are made 'flickable')
5017. Scrobbling.
5118. Ratings support.
52
53Cantata started off as a fork of QtMPC, however, the code (and user interface)
54is now *very* different to that of QtMPC.
55
56Unlike most other MPD clients, Cantata caches a copy of the MPD music library.
57This is so that it can create a proper hierarchy of artists and albums (where
58Cantata will use the AlbumArtist tag if found, otherwise it will fallback to
59the Artist tag), to provide album counts, tracks counts, etc in the browser
60views and tooltips, and also to help with copying songs to/from devices.
61
62This cache is updated only when MPD indicates that its version of the collection
63is different to Cantata's.
64
65
662. Dependencies
67===============
68
69Cantata requires the following Qt libraries:
70
711. QtCore
722. QtGui
733. QtNetwork
744. QtXml
755. QtSql
766. QtDBus (Only for Linux builds)
777. QtWidgets (Qt5 builds - where widgets are now separated from QtGui)
788. QtMultimedia / libVLC - depends on ENABLE_HTTP_STREAM_PLAYBACK and
79   ENABLE_LIBVLC
809. QtSvg
81
82Cantata may also use the following optional libraries:
83
841. TagLib - Tag edit dialog, replaygain, track organizer, and UMS device
85            support.
862. LibMTP - MTP devices.
873. FFMPEG (libavcodec) - ReplayGain detection code.
884. MPG123 - ReplayGain detection code.
895. CDParanoia - Read/rip Audio CDs.
906. CDDB - either this or MusicBrainz5 required for Audio CDs
917. MusicBrainz5 - either this or CDDB required for Audio CDs
928. LibEbur128 - ReplayGain detection code. If this is not found on the
93   system then Cantata will use its own bundled copy.
949. libavahi-common / libavahi-client - Avahi support (automatic mpd discovery)
95
96
973. Building
98===========
99
100Please refer to the INSTALL file for general build instructions. Details on how
101Cantata is build for Windows can be found in section 16, and Mac OSX in section
10217.
103
104
1054. Bugs
106=======
107
108Before reporting bugs, please check that this is not an MPD related issue with
109your system - e.g. please try recreating the issue with another MPD client,
110such as MPDroid, GMPC, etc.
111
112To report bugs please visit https://github.com/CDrummond/cantata
113
114When reporting a bug, please mention the Cantata version number, the Cantata
115build type (Linux, Windows, Mac), any cmake options you specified
116(other than the defaults listed at the top of the INSTALL file), and the
117version of MPD you are using.
118
119
1205. Translations
121===============
122
123As of version 2.1.0, Cantata uses Qt5's translation framework.
124
125To generate a new translation for Cantata:
126
1271. Copy translations/blank.ts to cantata_LANG_CODE.ts
128   (Replace LANG_CODE with the language code for the desired language, e.g.
129   'fr' for French - so this would be cantata_fr.ts)
1302. Open your new ts file with Qt Linguist.
1313. In Qt Linguist set the target language and country.
1324. Update the translations.
1335. Either email me the new translation (address is in the AUTHORS file), or
134   create a pull request on github.
135
136
1376. Covers
138=========
139
140When displaying covers, Cantata will load album covers in the following order:
141
142${configuredName} is either:
143a. cover - if not configured in Cantata's config dialog
144b. Setting from cantata with the following replacements:
145    %albumartist% => Album Artist
146    %artist% => Track Artist
147    %album% => Album Name
148    Any other % removed
149
150...if configured to 'Cache scaled covers', Cantata will check its scaled-covers
151   cache folder (~/.cache/cantata/covers-scaled/SIZE) for:
152
153 1. ${albumArtist}/${album}.png
154
155...if MPD folder exists, is not specified as a http URL, and is readable, then
156   cantata will look for the following within the folder containing the song:
157
158 2. ${configuredName}.jpg - if set
159 3. ${configuredName}.png - if set
160 4. cover.jpg
161 5. cover.png
162 6. AlbumArt.jpg
163 7. AlbumArt.png
164 8. folder.jpg
165 9. folder.png
16610. ${albumArtist} - ${album}.jpg
16711. ${albumArtist} - ${album}.png
16812. ${album}.jpg
16913. ${album}.png
17014. Image embedded within current song's tags.
17115. ANY other jpg, or png
172
173...then Cantata will check its cache folder (~/.cache/cantata/covers), for :
174
17516. ${albumArtist}/${album}.jpg
17617. ${albumArtist}/${album}.png
177
178...if the MPD folder was specified as a http URL
179
18018. ${url}/${dirFromFile}/cover.jpg
181    - or ${url}/${dirFromFile}/${configuredName}.jpg (if set)
18219. ${url}/${dirFromFile}/cover.png
183    - or ${url}/${dirFromFile}/${configuredName}.png (if set)
184
185...lastly, if user has enabled downloading via last.fm
186
18720. Query last.fm using ${albumArtist} and ${album}. Cantata will attempt to
188    download the image specified with the "extralarge" size.
189
190Downloaded images will be saved as ${configuredName}.jpg/png (if set), or
191cover.jpg/png, within the song folder if possible. If not, then they will be
192saved in Cantata's cache folder.
193
194If configured to 'Cache scaled covers', then the resized cover (as displayed)
195will be saved as a PNG within covers-scaled.
196
197
198For artist images:
199
200${configuredName} is either:
201a. artist - if configured Album cover ${configuredName} is empty, or does not
202   contain %
203b. ${albumArtist} - if configured Album cover ${configuredName} contains % and
204   ${albumArtist} is not 'Various Artists'
205c. ${basicArtist} if configured Album cover ${configuredName} contains % and
206   ${albumArtist} is 'Various Artists'
207
208...if configured to 'Cache scaled covers', Cantata will check its scaled-covers
209   cache folder (~/.cache/cantata/covers-scaled/SIZE) for:
210
211 1. ${albumArtist}.png
212
213...if MPD folder exists, is not specified as a http URL, and is readable, then
214   cantata will look for the following within the folder containing the song:
215
216 2. ${basicArtist}.jpg
217 3. ${basicArtist}.png
218 4. ${configuredName}.jpg
219 5. ${configuredName}.png
220
221...the above will be repeated for the parent folder
222
223...if song is from a Various Artists album, or file is a non-MPD file, then
224   cantata will look for the following within the MPD root folder:
225
226 6. ${basicArtist}/${basicArtist}.jpg
227 7. ${basicArtist}/${basicArtist}.png
228 8. ${basicArtist}/${configuredName}.jpg
229 9. ${basicArtist}/${configuredName}.png
230
231...then Cantata will check its cache folder (~/.cache/cantata/covers), for :
232
23310. ${albumArtist}.jpg
23411. ${albumArtist}.png
235
236...if the MPD folder was specified as a http URL
237
23812. ${url}/${dirFromFile}/${configuredName}.jpg
23913. ${url}/${dirFromFile}/${configuredName}.png
240
241...the above will be repeated for the parent folder
242
243...lastly, if user has enabled downloading via last.fm
244
24514. Query last.fm using ${albumArtist}. Cantata will attempt to download the
246    image specified with the "extralarge" size.
247
248Downloaded images will be saved as artist.jpg/png, within the artist folder
249if the folder hierarchy is 2 levels (artist/album/) and the user has write
250permissions. If not, then they will be saved in Cantata's cache folder.
251
252If configured to 'Cache scaled covers', then the resized cover (as displayed)
253will be saved as a PNG within covers-scaled.
254
255
256For composer images:
257
258...if configured to 'Cache scaled covers', Cantata will check its scaled-covers
259   cache folder (~/.cache/cantata/covers-scaled/SIZE) for:
260
2611. ${composer}.png
262
263...if MPD folder exists, is not specified as a http URL, and is readable, then
264   cantata will look for the following within the folder containing the song:
265
2662. composer.jpg
2673. composer.png
268
269...the above will be repeated for the parent folder
270
271...then Cantata will check its cache folder (~/.cache/cantata/covers), for :
272
2734. ${composer}.jpg
2745. ${composer}.png
275
276...if the MPD folder was specified as a http URL
277
2786. ${url}/${dirFromFile}/composer.jpg
2797. ${url}/${dirFromFile}/composer.png
280
281...the above will be repeated for the parent folder
282
283Downloaded images will be saved as composer.jpg/png, within the artist folder
284if the folder hierarchy is 2 levels (artist/album/) and the user has write
285permissions. If not, then they will be saved in Cantata's cache folder.
286
287If configured to 'Cache scaled covers', then the resized cover (as displayed)
288will be saved as a PNG within covers-scaled.
289
290
291For context view backdrops:
292
293...if MPD folder exists, is not specified as a http URL, and is readable, OR
294   the song's filename starts with '/', then cantata will look for the
295   following within the folder containing the song:
296
297 1. ${currentArtist}-backdrop.jpg
298 2. ${currentArtist}-backdrop.png
299 3. backdrop.jpg
300 4. backdrop.png
301
302...the above will be repeated for the parent folder
303
304...if song is from a Various Artists album, or file is a non-MPD file, then
305   cantata will look for the following within the MPD root folder:
306
307 5. ${currentArtist}/${currentArtist}-backdrop.jpg
308 6. ${currentArtist}/${currentArtist}-backdrop.png
309 7. ${currentArtist}/backdrop.jpg
310 8. ${currentArtist}/backdrop.png
311
312...then Cantata will check its cache folder (~/.cache/cantata/backdrops), for :
313
314 9. ${currentArtist}.jpg
315
316...internet services:
317
31810. MusizBrainz is queried for an artist ID. If returned, this artist ID is used
319    to locate a cover from fanart.tv
32011. Download image from discogs
321
322...lastly:
323
32412. If all the above fails, a backdrop is created from all the album covers
325    featuring the artist.
326
327Downloaded images will be saved as backdrop.jpg, within the artist folder
328if the current song is not from a Various Artists album, the file is from MPD,
329the folder hierarchy is 2 levels (artist/album/), and the user has write
330permissions. If not, then they will be saved in Cantata's cache folder.
331
332
3337. CUE Files
334============
335
336If Cantata is running with MPD>=0.17, then it will attempt to parse the contents
337of CUE files. The CUE file will be parsed to ascertain the album and track
338details. The track durations for all bar the last should be accurate, and
339Cantata will attempt to determine the duration of the last track - but this
340might not be 100% accurate.
341
342If the CUE file references an audio file that does not exist in the MPD music
343folder, then the CUE file contents will NOT be used.
344
345There is no reliable way for Cantata to ascertain the text encoding that a CUE
346file uses - so, for portability, it would be best if your CUE files used UTF-8
347encoding. When loading a CUE file, Cantata will attempt to load the file as if
348it was UTF-8 encoded, if this fails it will try with the "System" codec. You may
349add to this list of encodings to try by using the 'cueFileCodecs' config item
350(as detailed in section 7 above). If Cantata fails with all configured
351encodings, then it will 'peek' at the 1st 1k bytes, and ask Qt to see if it can
352determine the encoding - and fallback to UTF-8 otherwise. (This peeking and
353fallback was how Cantata behaved in pre 1.2 versions - and is how Clementine
354behaves (where Cantata's CUE file support originates from.))
355
356NOTE: If Cantata cannot access the CUE file (as MPD is running on a remote host,
357or you have not configured the music folder correctly, etc.) then Cantata will
358add the CUE File to the album's track listing.
359
360
3618. Streams
362==========
363
364As of 1.4.0, Cantata only comes with TuneIn, ShoutCast, IceCast and Dirble
365stream providers. To install new providers, you can either use Cantata's
366download dialog (to install for Cantata's extras github repo), or install from
367file. To import new stream categories into Cantata, these files need to be GZip
368compressed tarballs of the following format.
369
370  Filename: CATEGORY_NAME.streams  (e.g. German Radio.streams)
371
372  Contents: Either streams.xml, streams.xml.gz, OR settings.json, AND
373            Either icon.png OR icon.svg
374
375            streams.xml.gz should be GZip compressed.
376            icon.svg should be a non-compressed SVG file.
377
378            Icons for sub-categories (first level only) - these should be named
379            the same as the category (with / replaced by _) -
380            e.g. 'Hard_Soft Rock.svg' for 'Hard/Soft Rock')
381
382settings.json is really only intended to be used by Cantata for providers
383stored in its extras github repo. This JSON file has the following syntax:
384
385  { "type": "streamType", "url": "Stream listing URL" }
386
387  "streamType" can be either di, soma, or listenlive. Cantata contains code to
388  download from "Stream listing URL" and parse the response based upon
389  "streamType"
390
391In general, for externally provided stream lists, it is more convenient to just
392list all a providers streams within stream.xml.gz. This has the following
393format:
394
395  <?xml version="1.0" encoding="UTF-8"?>
396  <streams version="1.0" addCategoryName="true">
397    <stream name="Station Name" url="http://station.stream.url"/>
398  </streams>
399
400if "addCategoryName" is set to true, then when Cantata adds a station from this
401category to either favourites or the playqueue, it will prepend the Category
402name to the station name.
403
404e.g. To create a stream category named "Wicked Radio" that has 2
405sub-categeries, and 3 stream URLs you would need:
406
407streams.xml.gz with:
408  <?xml version="1.0" encoding="UTF-8"?>
409  <streams version="1.0" addCategoryName="true">
410    <category name="Rock">
411      <stream name="Hard Rock" url="http://127.0.0.1/hard.ogg"/>
412      <stream name="Soft Rock" url="http://127.0.0.1/soft.ogg"/>
413    </category>
414    <stream name="Blues" url="http://127.0.0.1/blues.ogg"/>
415  </streams>
416
417streams.xml.gz & icon.svg need to be placed into a GZip compressed tarball
418named "Wicked Radio.streams"
419
420With the above example, Cantata would list the following in the streams view:
421
422> Wicked Radio
423   > Rock
424       Hard Rock
425       Soft Rock
426   Blues
427
428When "Hard Rock" is added to the playqueue, it will be listed as
429"Wicked Radio - Hard Rock"
430
431If Rock.png (or Rock.svg) and/or Blues.png (or Blues.svg) also exist in the
432tarball, then they will be copied to the install location and used as icons for
433the respective category.
434
435To create .streams file:
436    1. Place all files in a temp folder
437    2. cd into temp folder
438    3. tar cfz NAME.tar.gz *
439    4. mv NAME.tar.gz NAME.streams
440
441
442cantata-extra on github
443-----------------------
444
445The streams page on Cantata's settings dialog, will allow you to install new
446providers from Cantata's extras github repo. To do this, the dialog first
447downloads the list of providers, this is obtained from the following URL:
448
449https://raw.githubusercontent.com/CDrummond/cantata-extra/master/streams/2.1/list.xml
450
451The contents of this file will be something like:
452
453<providers>
454 <category type="0">
455  <provider name="1.fm" md5="cbd6ad834d4493662952a653cea5c779"/>
456  ...
457
458If you want to manually download a provider, use the listed URL to download the
459.streams file. e.g. for the above:
460
461    wget https://raw.githubusercontent.com/CDrummond/cantata-extra/master/streams/2.1/1.fm.streams.gz
462
463Extract the contents with:
464
465    tar zxvf 1.fm.streams.gz
466
467If you wish to distribute a new stream provider via Cantata's extras github
468repo, please send me an email with the .streams.gz file. My address is in the AUTHORS
469file.
470
471
4729. MultiMedia Keys
473==================
474
475Linux and Windows builds, as of 1.2, now also support basic media-keys
476shortcuts.
477
478Linux use the GNOME settings daemon's MediaKeys interface. This interface is
479normally started automatically under GNOME/Unity.
480
481
48210. DBUS Actions
483================
484
485All of Cantata's internal actions are accessible via DBUS. The
486cantata-remote helper script may be used to invoke these, e.g. to toggle
487playback:
488
489    cantata-remote cantata playpausetrack
490
491The list of action names maybe obtained by calling the listActions DBUS method,
492e.g.:
493
494    qdbus mpd.cantata /cantata listActions
495
496
49711. Dynamic Helper Script - Local Mode
498======================================
499
500When a dynamic playlist is loaded in Cantata, the cantata-dynamic helper script
501is executed in the background to do the actual song selection. In this way the
502dynamic playlist can still function even when cantata is terminated. It is
503possible for this script to be controlled on the command line (although it was
504never written with this in mind).
505
506The list of dynamic playlists may be obtained by looking in
507~/.local/share/cantata/dynamic
508
509To 'load' a dynamic playlist, all you need to do is symlink the desired one in
510~/.local/share/cantata/dynamic to ~/.cache/cantata/dynamic/rules. Then you can
511start the helper by calling '/usr/share/cantata/scripts/cantata-dynamic start'
512(or first call '/usr/share/cantata/scripts/cantata-dynamic stop' to stop any
513current playlist).
514
515To pass connection details, cantata-dynamic reads the same environment variables
516as mpc - namely MPD_HOST and MPD_PORT
517
518e.g. the following bash script (not tested!) will stop any current dynamic
519playlist, load the 'MyPlaylist' playlist, and start this on the mpd at
520'hostname:1234' with password 'pass'
521
522    # Stop current dynamic playlist
523    /usr/share/cantata/scripts/cantata-dynamic stop
524    # Clear the playqueue (this requires mpc)
525    MPD_HOST=pass@hostname MPD_PORT=1234 mpc clear
526    # 'Load' new playlist
527    if [ -f "$HOME/.cache/cantata/dynamic/rules" ] ; then
528        rm "$HOME/.cache/cantata/dynamic/rules"
529    fi
530    ln -s "$HOME/.local/share/cantata/dynamic/MyPlaylist.rules" "$HOME/.cache/cantata/dynamic/rules"
531    # Restart dynamic script
532    MPD_HOST=pass@hostname MPD_PORT=1234 /usr/share/cantata/scripts/cantata-dynamic start
533
534
53512. Dynamic Helper Script - Server Mode
536=======================================
537
538In addition to the above, the helper script may be installed on the system
539containing MPD, and run in 'server' mode. This requires MPD>=0.17, as
540communications are via MPD's client-to-client messages.
541
542When run in this mode, it is intended that the script be run system-wide and
543started when the system (or MPD) is started. e.g. The script should be started
544as:
545
546    <prefix>/share/cantata/scripts/cantata-dynamic server <location of config file>
547
548    e.g.:  /usr/share/cantata/scripts/cantata-dynamic server /etc/cantata-dynamic.conf
549
550When run as described above, the script will automatically daemonize itself.
551
552To stop the dynamizer:
553
554     <prefix>/share/cantata/scripts/cantata-dynamic stopserver
555
556    e.g.:  /usr/share/cantata/scripts/cantata-dynamic stopserver
557
558When MPD informs Cantata that the 'cantata-dynamic-in' channel has been
559created, Cantata will automatically switch itself to server mode. The list of
560rules is then loaded from the server, and Cantata will change the backdrop of
561the dynamic page to indicate that the rules are comming from the server.
562
563Server mode is currently the only way for dynamic playlists to be used under
564Windows.
565
566
567Configuration
568-------------
569
570The server mode has a simple ini-style configuration file, that has the
571following parameters (shown here with the default values):
572
573    pidFile=/var/run/cantata-dynamic/pid
574    filesDir=/var/lib/mpd/dynamic
575    activeFile=/var/run/cantata-dynamic/rules
576    mpdHost=localhost
577    mpdPort=6600
578    mpdPassword=
579    httpPort=0
580
581'pidFile' When started, the script will store its PID within the file
582configured here. This is then used to detect if the script is running, etc.
583
584'filesDir' This controls where the dynamic rules are stored. The user the script
585is run as should have read/write permissions to this folder.
586
587'activeFile' When a set of rules is made 'active', all cantata does is create a
588symbolic link from the rules file to the file specified in 'activeFile'. Again,
589the user the script is run as should have read/write permissions to this file.
590
591'mpdHost', 'mpdPort', and 'mpdPassword' are the connection details of the MPD
592server.
593
594'httpPort' if this is set to non-zero, then the script will serve up a *very*
595simple HTTP control page - allowing playlists to be started and stopped.
596
597
598Installation
599-------------
600
601Within the playlists folder is a systemd service file.
602
603NOTE: This service file assumes cantata has been installed to /usr, and that
604cantata-dynamic is in /usr/share/cantata/scripts. If this is not the case, then
605this will need to be edited.
606
607Copy playlists/cantata-dynamic.conf to /etc, and edit as appropriate.
608
609
61013. Source Code
611===============
612The Cantata source folder contains the following structure:
613
614    3rdparty   - Third party libraries
615    cmake      - CMake scripts
616    context    - Context view classes
617    dbus       - DBUS related classes and XML files
618    devices    - Device related classes
619    playlists  - Playlists
620    gui        - General GUI classes, e.g. MainWindow, LibraryPage, etc.
621    http       - HTTP server
622    icons      - Icons
623    models     - Most models, apart from dynamic playlist and shortcut models
624    mpd        - MPD related classes; connection, status, song, etc.
625    network    - Generic Network classes (and proxy support for Qt builds)
626    online     - Jamendo, Magantune, SoundCloud, and Podcasts
627    po         - Translations
628    replaygain - ReplayGain calculation
629    streams    - Internet radio streams
630    support    - Generic classes that /may/ be useful to other projects.
631                 Mainly used for Qt and Gtk support.
632    tags       - Tag reading, editing, etc.
633    widgets    - Widgets that are probably Cantata specific.
634    windows    - Files specfic to Windows builds..
635    mac        - Files specfic to MacOSX builds.
636
637Cantata's SVG icons have been 'cleaned' using:
638  scour --strip-xml-prolog --indent=none -i in.svg -o out.svg
639
640Symbolc media icons are taken from gnome icon theme, but have been scaled with
641  rsvg-convert -a -w 128 -f svg in.svg -o out.svg
642
643
64414. Debug Logging
645=================
646
647Cantata contains some debug logging that might help to diagnose certain issues.
648To enable this, you need to use the --debug commandline option. This option
649takes a comma-separated list of debug areas.
650Therefore, its probably better to start Cantata from the commandline.
651
652The following debug areas may be used:
653
654    MPD communications        mpd
655    MPD Parsing               mpdparse
656    Covers                    covers (or covers-verbose)
657    Wikipedia context info    context-wikipedia
658    Last.fm context info      context-lastfm
659    Combined context info     context-info
660    Context widget            context-widget
661    Context lyrics            context-lyrics
662    Dynamic                   dynamic
663    Stream fetching           stream-fetcher
664    Http server               http-server
665    Song dialog file checks   song-dialog
666    Network access            network-access
667    Threads                   threads
668    External tags             tags
669    Scrobbling                scrobbler
670    Devices                   devices
671    SQL                       sql
672    MPD HTTP stream playback  http-stream
673    MPD auto discover         avahi
674    Media keys                media-keys
675    Cusrtom actions           custom-actions
676
677To log debug to a file use --debug-to-file. e.g. To log MPD communications and
678cover access to a file, start cantata as follows:
679
680    cantata --debug=mpd,covers --debug-to-file
681
682
683The loccation of the debug file will vary dependant upon OS. On Linux systems
684this will be ~/.cache/cantata/cantata.log For Windows this will be
685C:\Users\USERNAME\AppData\Local\mpd\cantata\cache\cantata.log And for OSX it
686will be /Users/$USER/Library/Caches/cantata/cantata/cantata.log
687
688
689NOTE: Debug logging will function regardless of whether you have created a
690Debug or Release build.
691
692
69315. Credits
694===========
695
696Cantata contains code/icons from:
697
698    Amarok             - amarok.kde.org (Transcoding, Cover fetching code in
699                         cover dialog)
700    Clementine         - www.clementine-player.org (Lyrics searches, CUE file
701                         parsing, digitally imported support, and stretched
702                         header view)
703    Be::MPC            - Wikipedia parsing code
704    Quassel            - quassel-irc.org (Qt-only keyboard short-cut config
705                         support)
706    Solid              - solid.kde.org (Device detection for Qt-only builds)
707    Asunder            - CDDB code
708    libkcddb           - MusicBrainz code
709    libebur128         - https://github.com/jiixyj/libebur128 (Replay gain
710                         calculation)
711    IcoMoon            - http://icomoon.io/#icons (Monochrome sidebar icons)
712    Qxt                - Multi-media key support
713    QtSolutions        - QtIOCompressor, and QtSingleApplication
714    QMPDClient         - Last.fm scrobbling
715
716
71716. Windows
718===========
719
720Icon created under Linux using the createicon.sh in the windows folder.
721
722The following steps are used to compile Cantata, and create the windows
723installer.
724
725This assumes the following folder structure:
726
727    z:\cantata\src          [ Checkout of Cantata's source code ]
728    z:\cantata\build
729    z:\cantata\install      [ make install will place target files here ]
730    z:\dev\Qt
731    z:\dev\taglib
732    z:\dev\zlib
733    z:\dev\ssl              [ libeay32.dll and ssleay32.dll ]
734s
735
7361. Install Qt (5.3 or later), cmake, TagLib and zlib. TagLib and zlib will probably
737   need compiling.
738
7392. Set (or amend) the following environemnt variables:
740    QTDIR=z:\dev\Qt\5.3\mingw482_32
741    PATH=z:\dev\Qt\5.3\mingw482_32\bin;z:\dev\Qt\Tools\mingw482_32\bin;z:\dev\taglib\bin;z:\dev\cmake\bin
742
7433. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake:
744     ../src -DCMAKE_BUILD_TYPE=Release -DENABLE_TAGLIB=OFF -DTAGLIB_FOUND=1 -DTAGLIB_INCLUDES=z:/dev/taglib/include -DTAGLIB_LIBRARIES=z:/dev/taglib/lib/libtag.dll.a -DTAGLIB_MP4_FOUND=1 -DTAGLIB_ASF_FOUND=1 -DTAGLIB_CAN_SAVE_ID3VER=1 -DZLIB_INCLUDE_DIR=z:/dev/zlib/include -DZLIB_LIBRARY=z:/dev/zlib/lib/libz.dll.a -DCMAKE_INSTALL_PREFIX=z:/cantata/install -DCANTATA_WINDOWS_INSTALLER_DEST=z:/cantata -DCANTATA_SSL_LIBS=z:/dev/ssl/libeay32.dll;z:/dev/ssl/ssleay32.dll
745
746   Notes: -DENABLE_TAGLIB=OFF stops cmake from trying to find TagLib, as the
747          TagLib settings have been manually set,
748
7494. Build via QtCreator
750
7515. Create an 'install' project in QtCreator
752  - Projects
753  - Add/Clone Selected
754  - Expand Build Steps, and select install
755
7566. Build 'install' project via QtCreator
757
758This build is as per Qt-only, but does not have support for dbus, local dynamic
759playlists, device support, or replaygain calculation.
760
761
762Create Installer
763----------------
764Run Nullsoft Scriptable Install System, and use the cantata.nsi that has been
765generated in the install folder. This will place the setup exe into the install
766folder as well.
767
768
769TagLib
770------
771
772Windows version of taglib was built from TagLib 1.9.1, using QtCreator with the
773following passed to cmake:
774
775    -DCMAKE_BUILD_TYPE=Release -DWITH_ASF=1 -DWITH_MP4=1 -DCMAKE_INSTALL_PREFIX=z:\dev\taglib
776
777
77817. Mac OSX
779===========
780
781
782The following steps are used to compile Cantata, and create the OS X application
783bundle.
784
785These steps assume the following structure:
786
787    src/
788    build/
789    install/
790
7911. Install HomeBrew
792
7932. brew install cmake taglib ffmpeg openssl qt
794
7953. Create the icon
796
797    cd src/mac
798    ./createicon.sh
799
800From here you have a couple of options:
801
802Build via QtCreator
803---------------------
804
8051. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake:
806     ../src -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`pwd`/../install
807
8082. Create an 'install' project in QtCreator
809  - Projects
810  - Add/Clone Selected
811  - Expand Build Steps, and select install
812
8133. Build 'install' project via QtCreator
814
815Build via commandline
816-----------------------
817
818    cd build
819    cmake ../src -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(pwd)/../install
820    make
821    make install
822
823Create Installer
824----------------
825
8261. Go into the 'mac' folder within the build folder
827
8282. Run ./create-dmg.sh
829