This repository has been archived by the owner on Mar 3, 2022. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
cantata/README
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
846 lines (606 sloc)
28.7 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Table of Contents | |
| ================= | |
| 1. Introduction | |
| 2. Dependencies | |
| 3. Building | |
| 4. Bugs | |
| 5. Translations | |
| 6. Covers | |
| 7. CUE Files | |
| 8. Streams | |
| 9. MultiMedia Keys | |
| 10. DBUS Actions | |
| 11. Dynamic Helper Script - Local Mode | |
| 12. Dynamic Helper Script - Server Mode | |
| 13. Source Code | |
| 14. Debug Logging | |
| 15. Credits | |
| 16. Windows | |
| 17. Mac OSX | |
| 1. Introduction | |
| =============== | |
| Cantata is a graphical client for MPD. It contains the following features: | |
| 1. Support for Linux, MacOSX, and Windows. | |
| 2. Multiple MPD collections. | |
| 3. Highly customisable layout. | |
| 4. Songs grouped by album in play queue. | |
| 5. Context view to show artist, album, and song information of current track. | |
| 6. Simple tag editor. | |
| 7. File organizer - use tags to organize files and folders. | |
| 8. Ability to calculate ReplyGain tags. (Linux only, and if relevant libraries | |
| installed) | |
| 9. Dynamic playlists. | |
| 10. Online services; Jamendo, Magnatune, SoundCloud, and Podcasts. | |
| 11. Radio stream support - with the ability to search for streams via TuneIn, | |
| ShoutCast, or Dirble. | |
| 12. USB-Mass-Storage and MTP device support. (Linux only, and if relevant | |
| libraries installed) | |
| 13. Audio CD ripping and playback. (Linux only, and if relevant libraries | |
| installed) | |
| 14. Playback of non-MPD songs - via simple in-built HTTP server if connected | |
| to MPD via a standard socket, otherwise filepath is sent to MPD. | |
| 15. MPRISv2 DBUS interface. | |
| 16. Basic support for touch-style interface (views are made 'flickable') | |
| 17. Scrobbling. | |
| 18. Ratings support. | |
| Cantata started off as a fork of QtMPC, however, the code (and user interface) | |
| is now *very* different to that of QtMPC. | |
| Unlike most other MPD clients, Cantata caches a copy of the MPD music library. | |
| This is so that it can create a proper hierarchy of artists and albums (where | |
| Cantata will use the AlbumArtist tag if found, otherwise it will fallback to | |
| the Artist tag), to provide album counts, tracks counts, etc in the browser | |
| views and tooltips, and also to help with copying songs to/from devices. | |
| This cache is updated only when MPD indicates that its version of the collection | |
| is different to Cantata's. | |
| 2. Dependencies | |
| =============== | |
| Cantata requires the following Qt libraries: | |
| 1. QtCore | |
| 2. QtGui | |
| 3. QtNetwork | |
| 4. QtXml | |
| 5. QtSql | |
| 6. QtDBus (Only for Linux builds) | |
| 7. QtWidgets (Qt5 builds - where widgets are now separated from QtGui) | |
| 8. QtMultimedia / libVLC - depends on ENABLE_HTTP_STREAM_PLAYBACK and | |
| ENABLE_LIBVLC | |
| 9. QtSvg | |
| Cantata may also use the following optional libraries: | |
| 1. TagLib - Tag edit dialog, replaygain, track organizer, and UMS device | |
| support. | |
| 2. LibMTP - MTP devices. | |
| 3. FFMPEG (libavcodec) - ReplayGain detection code. | |
| 4. MPG123 - ReplayGain detection code. | |
| 5. CDParanoia - Read/rip Audio CDs. | |
| 6. CDDB - either this or MusicBrainz5 required for Audio CDs | |
| 7. MusicBrainz5 - either this or CDDB required for Audio CDs | |
| 8. LibEbur128 - ReplayGain detection code. If this is not found on the | |
| system then Cantata will use its own bundled copy. | |
| 9. libavahi-common / libavahi-client - Avahi support (automatic mpd discovery) | |
| 3. Building | |
| =========== | |
| Please refer to the INSTALL file for general build instructions. Details on how | |
| Cantata is build for Windows can be found in section 16, and Mac OSX in section | |
| 17. | |
| 4. Bugs | |
| ======= | |
| Before reporting bugs, please check that this is not an MPD related issue with | |
| your system - e.g. please try recreating the issue with another MPD client, | |
| such as MPDroid, GMPC, etc. | |
| To report bugs please visit https://github.com/CDrummond/cantata | |
| When reporting a bug, please mention the Cantata version number, the Cantata | |
| build type (Linux, Windows, Mac), any cmake options you specified | |
| (other than the defaults listed at the top of the INSTALL file), and the | |
| version of MPD you are using. | |
| 5. Translations | |
| =============== | |
| As of version 2.1.0, Cantata uses Qt5's translation framework. | |
| To generate a new translation for Cantata: | |
| 1. Copy translations/blank.ts to cantata_LANG_CODE.ts | |
| (Replace LANG_CODE with the language code for the desired language, e.g. | |
| 'fr' for French - so this would be cantata_fr.ts) | |
| 2. Open your new ts file with Qt Linguist. | |
| 3. In Qt Linguist set the target language and country. | |
| 4. Update the translations. | |
| 5. Either email me the new translation (address is in the AUTHORS file), or | |
| create a pull request on github. | |
| 6. Covers | |
| ========= | |
| When displaying covers, Cantata will load album covers in the following order: | |
| ${configuredName} is either: | |
| a. cover - if not configured in Cantata's config dialog | |
| b. Setting from cantata with the following replacements: | |
| %albumartist% => Album Artist | |
| %artist% => Track Artist | |
| %album% => Album Name | |
| Any other % removed | |
| ...if configured to 'Cache scaled covers', Cantata will check its scaled-covers | |
| cache folder (~/.cache/cantata/covers-scaled/SIZE) for: | |
| 1. ${albumArtist}/${album}.png | |
| ...if MPD folder exists, is not specified as a http URL, and is readable, then | |
| cantata will look for the following within the folder containing the song: | |
| 2. ${configuredName}.jpg - if set | |
| 3. ${configuredName}.png - if set | |
| 4. cover.jpg | |
| 5. cover.png | |
| 6. AlbumArt.jpg | |
| 7. AlbumArt.png | |
| 8. folder.jpg | |
| 9. folder.png | |
| 10. ${albumArtist} - ${album}.jpg | |
| 11. ${albumArtist} - ${album}.png | |
| 12. ${album}.jpg | |
| 13. ${album}.png | |
| 14. Image embedded within current song's tags. | |
| 15. ANY other jpg, or png | |
| ...then Cantata will check its cache folder (~/.cache/cantata/covers), for : | |
| 16. ${albumArtist}/${album}.jpg | |
| 17. ${albumArtist}/${album}.png | |
| ...if the MPD folder was specified as a http URL | |
| 18. ${url}/${dirFromFile}/cover.jpg | |
| - or ${url}/${dirFromFile}/${configuredName}.jpg (if set) | |
| 19. ${url}/${dirFromFile}/cover.png | |
| - or ${url}/${dirFromFile}/${configuredName}.png (if set) | |
| ...lastly, if user has enabled downloading via last.fm | |
| 20. Query last.fm using ${albumArtist} and ${album}. Cantata will attempt to | |
| download the image specified with the "extralarge" size. | |
| Downloaded images will be saved as ${configuredName}.jpg/png (if set), or | |
| cover.jpg/png, within the song folder if possible. If not, then they will be | |
| saved in Cantata's cache folder. | |
| If configured to 'Cache scaled covers', then the resized cover (as displayed) | |
| will be saved as a PNG within covers-scaled. | |
| For artist images: | |
| ${configuredName} is either: | |
| a. artist - if configured Album cover ${configuredName} is empty, or does not | |
| contain % | |
| b. ${albumArtist} - if configured Album cover ${configuredName} contains % and | |
| ${albumArtist} is not 'Various Artists' | |
| c. ${basicArtist} if configured Album cover ${configuredName} contains % and | |
| ${albumArtist} is 'Various Artists' | |
| ...if configured to 'Cache scaled covers', Cantata will check its scaled-covers | |
| cache folder (~/.cache/cantata/covers-scaled/SIZE) for: | |
| 1. ${albumArtist}.png | |
| ...if MPD folder exists, is not specified as a http URL, and is readable, then | |
| cantata will look for the following within the folder containing the song: | |
| 2. ${basicArtist}.jpg | |
| 3. ${basicArtist}.png | |
| 4. ${configuredName}.jpg | |
| 5. ${configuredName}.png | |
| ...the above will be repeated for the parent folder | |
| ...if song is from a Various Artists album, or file is a non-MPD file, then | |
| cantata will look for the following within the MPD root folder: | |
| 6. ${basicArtist}/${basicArtist}.jpg | |
| 7. ${basicArtist}/${basicArtist}.png | |
| 8. ${basicArtist}/${configuredName}.jpg | |
| 9. ${basicArtist}/${configuredName}.png | |
| ...then Cantata will check its cache folder (~/.cache/cantata/covers), for : | |
| 10. ${albumArtist}.jpg | |
| 11. ${albumArtist}.png | |
| ...if the MPD folder was specified as a http URL | |
| 12. ${url}/${dirFromFile}/${configuredName}.jpg | |
| 13. ${url}/${dirFromFile}/${configuredName}.png | |
| ...the above will be repeated for the parent folder | |
| ...lastly, if user has enabled downloading via last.fm | |
| 14. Query last.fm using ${albumArtist}. Cantata will attempt to download the | |
| image specified with the "extralarge" size. | |
| Downloaded images will be saved as artist.jpg/png, within the artist folder | |
| if the folder hierarchy is 2 levels (artist/album/) and the user has write | |
| permissions. If not, then they will be saved in Cantata's cache folder. | |
| If configured to 'Cache scaled covers', then the resized cover (as displayed) | |
| will be saved as a PNG within covers-scaled. | |
| For composer images: | |
| ...if configured to 'Cache scaled covers', Cantata will check its scaled-covers | |
| cache folder (~/.cache/cantata/covers-scaled/SIZE) for: | |
| 1. ${composer}.png | |
| ...if MPD folder exists, is not specified as a http URL, and is readable, then | |
| cantata will look for the following within the folder containing the song: | |
| 2. composer.jpg | |
| 3. composer.png | |
| ...the above will be repeated for the parent folder | |
| ...then Cantata will check its cache folder (~/.cache/cantata/covers), for : | |
| 4. ${composer}.jpg | |
| 5. ${composer}.png | |
| ...if the MPD folder was specified as a http URL | |
| 6. ${url}/${dirFromFile}/composer.jpg | |
| 7. ${url}/${dirFromFile}/composer.png | |
| ...the above will be repeated for the parent folder | |
| Downloaded images will be saved as composer.jpg/png, within the artist folder | |
| if the folder hierarchy is 2 levels (artist/album/) and the user has write | |
| permissions. If not, then they will be saved in Cantata's cache folder. | |
| If configured to 'Cache scaled covers', then the resized cover (as displayed) | |
| will be saved as a PNG within covers-scaled. | |
| For context view backdrops: | |
| ...if MPD folder exists, is not specified as a http URL, and is readable, OR | |
| the song's filename starts with '/', then cantata will look for the | |
| following within the folder containing the song: | |
| 1. ${currentArtist}-backdrop.jpg | |
| 2. ${currentArtist}-backdrop.png | |
| 3. backdrop.jpg | |
| 4. backdrop.png | |
| ...the above will be repeated for the parent folder | |
| ...if song is from a Various Artists album, or file is a non-MPD file, then | |
| cantata will look for the following within the MPD root folder: | |
| 5. ${currentArtist}/${currentArtist}-backdrop.jpg | |
| 6. ${currentArtist}/${currentArtist}-backdrop.png | |
| 7. ${currentArtist}/backdrop.jpg | |
| 8. ${currentArtist}/backdrop.png | |
| ...then Cantata will check its cache folder (~/.cache/cantata/backdrops), for : | |
| 9. ${currentArtist}.jpg | |
| ...internet services: | |
| 10. MusizBrainz is queried for an artist ID. If returned, this artist ID is used | |
| to locate a cover from fanart.tv | |
| 11. Download image from discogs | |
| ...lastly: | |
| 12. If all the above fails, a backdrop is created from all the album covers | |
| featuring the artist. | |
| Downloaded images will be saved as backdrop.jpg, within the artist folder | |
| if the current song is not from a Various Artists album, the file is from MPD, | |
| the folder hierarchy is 2 levels (artist/album/), and the user has write | |
| permissions. If not, then they will be saved in Cantata's cache folder. | |
| 7. CUE Files | |
| ============ | |
| If Cantata is running with MPD>=0.17, then it will attempt to parse the contents | |
| of CUE files. The CUE file will be parsed to ascertain the album and track | |
| details. The track durations for all bar the last should be accurate, and | |
| Cantata will attempt to determine the duration of the last track - but this | |
| might not be 100% accurate. | |
| If the CUE file references an audio file that does not exist in the MPD music | |
| folder, then the CUE file contents will NOT be used. | |
| There is no reliable way for Cantata to ascertain the text encoding that a CUE | |
| file uses - so, for portability, it would be best if your CUE files used UTF-8 | |
| encoding. When loading a CUE file, Cantata will attempt to load the file as if | |
| it was UTF-8 encoded, if this fails it will try with the "System" codec. You may | |
| add to this list of encodings to try by using the 'cueFileCodecs' config item | |
| (as detailed in section 7 above). If Cantata fails with all configured | |
| encodings, then it will 'peek' at the 1st 1k bytes, and ask Qt to see if it can | |
| determine the encoding - and fallback to UTF-8 otherwise. (This peeking and | |
| fallback was how Cantata behaved in pre 1.2 versions - and is how Clementine | |
| behaves (where Cantata's CUE file support originates from.)) | |
| NOTE: If Cantata cannot access the CUE file (as MPD is running on a remote host, | |
| or you have not configured the music folder correctly, etc.) then Cantata will | |
| add the CUE File to the album's track listing. | |
| 8. Streams | |
| ========== | |
| As of 1.4.0, Cantata only comes with TuneIn, ShoutCast, IceCast and Dirble | |
| stream providers. To install new providers, you can either use Cantata's | |
| download dialog (to install for Cantata's extras github repo), or install from | |
| file. To import new stream categories into Cantata, these files need to be GZip | |
| compressed tarballs of the following format. | |
| Filename: CATEGORY_NAME.streams (e.g. German Radio.streams) | |
| Contents: Either streams.xml, streams.xml.gz, OR settings.json, AND | |
| Either icon.png OR icon.svg | |
| streams.xml.gz should be GZip compressed. | |
| icon.svg should be a non-compressed SVG file. | |
| Icons for sub-categories (first level only) - these should be named | |
| the same as the category (with / replaced by _) - | |
| e.g. 'Hard_Soft Rock.svg' for 'Hard/Soft Rock') | |
| settings.json is really only intended to be used by Cantata for providers | |
| stored in its extras github repo. This JSON file has the following syntax: | |
| { "type": "streamType", "url": "Stream listing URL" } | |
| "streamType" can be either di, soma, or listenlive. Cantata contains code to | |
| download from "Stream listing URL" and parse the response based upon | |
| "streamType" | |
| In general, for externally provided stream lists, it is more convenient to just | |
| list all a providers streams within stream.xml.gz. This has the following | |
| format: | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <streams version="1.0" addCategoryName="true"> | |
| <stream name="Station Name" url="http://station.stream.url"/> | |
| </streams> | |
| if "addCategoryName" is set to true, then when Cantata adds a station from this | |
| category to either favourites or the playqueue, it will prepend the Category | |
| name to the station name. | |
| e.g. To create a stream category named "Wicked Radio" that has 2 | |
| sub-categeries, and 3 stream URLs you would need: | |
| streams.xml.gz with: | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <streams version="1.0" addCategoryName="true"> | |
| <category name="Rock"> | |
| <stream name="Hard Rock" url="http://127.0.0.1/hard.ogg"/> | |
| <stream name="Soft Rock" url="http://127.0.0.1/soft.ogg"/> | |
| </category> | |
| <stream name="Blues" url="http://127.0.0.1/blues.ogg"/> | |
| </streams> | |
| streams.xml.gz & icon.svg need to be placed into a GZip compressed tarball | |
| named "Wicked Radio.streams" | |
| With the above example, Cantata would list the following in the streams view: | |
| > Wicked Radio | |
| > Rock | |
| Hard Rock | |
| Soft Rock | |
| Blues | |
| When "Hard Rock" is added to the playqueue, it will be listed as | |
| "Wicked Radio - Hard Rock" | |
| If Rock.png (or Rock.svg) and/or Blues.png (or Blues.svg) also exist in the | |
| tarball, then they will be copied to the install location and used as icons for | |
| the respective category. | |
| To create .streams file: | |
| 1. Place all files in a temp folder | |
| 2. cd into temp folder | |
| 3. tar cfz NAME.tar.gz * | |
| 4. mv NAME.tar.gz NAME.streams | |
| cantata-extra on github | |
| ----------------------- | |
| The streams page on Cantata's settings dialog, will allow you to install new | |
| providers from Cantata's extras github repo. To do this, the dialog first | |
| downloads the list of providers, this is obtained from the following URL: | |
| https://raw.githubusercontent.com/CDrummond/cantata-extra/master/streams/2.1/list.xml | |
| The contents of this file will be something like: | |
| <providers> | |
| <category type="0"> | |
| <provider name="1.fm" md5="cbd6ad834d4493662952a653cea5c779"/> | |
| ... | |
| If you want to manually download a provider, use the listed URL to download the | |
| .streams file. e.g. for the above: | |
| wget https://raw.githubusercontent.com/CDrummond/cantata-extra/master/streams/2.1/1.fm.streams.gz | |
| Extract the contents with: | |
| tar zxvf 1.fm.streams.gz | |
| If you wish to distribute a new stream provider via Cantata's extras github | |
| repo, please send me an email with the .streams.gz file. My address is in the AUTHORS | |
| file. | |
| 9. MultiMedia Keys | |
| ================== | |
| Linux and Windows builds, as of 1.2, now also support basic media-keys | |
| shortcuts. | |
| Linux use the GNOME settings daemon's MediaKeys interface. This interface is | |
| normally started automatically under GNOME/Unity. | |
| 10. DBUS Actions | |
| ================ | |
| All of Cantata's internal actions are accessible via DBUS. The | |
| cantata-remote helper script may be used to invoke these, e.g. to toggle | |
| playback: | |
| cantata-remote cantata playpausetrack | |
| The list of action names maybe obtained by calling the listActions DBUS method, | |
| e.g.: | |
| qdbus mpd.cantata /cantata listActions | |
| 11. Dynamic Helper Script - Local Mode | |
| ====================================== | |
| When a dynamic playlist is loaded in Cantata, the cantata-dynamic helper script | |
| is executed in the background to do the actual song selection. In this way the | |
| dynamic playlist can still function even when cantata is terminated. It is | |
| possible for this script to be controlled on the command line (although it was | |
| never written with this in mind). | |
| The list of dynamic playlists may be obtained by looking in | |
| ~/.local/share/cantata/dynamic | |
| To 'load' a dynamic playlist, all you need to do is symlink the desired one in | |
| ~/.local/share/cantata/dynamic to ~/.cache/cantata/dynamic/rules. Then you can | |
| start the helper by calling '/usr/share/cantata/scripts/cantata-dynamic start' | |
| (or first call '/usr/share/cantata/scripts/cantata-dynamic stop' to stop any | |
| current playlist). | |
| To pass connection details, cantata-dynamic reads the same environment variables | |
| as mpc - namely MPD_HOST and MPD_PORT | |
| e.g. the following bash script (not tested!) will stop any current dynamic | |
| playlist, load the 'MyPlaylist' playlist, and start this on the mpd at | |
| 'hostname:1234' with password 'pass' | |
| # Stop current dynamic playlist | |
| /usr/share/cantata/scripts/cantata-dynamic stop | |
| # Clear the playqueue (this requires mpc) | |
| MPD_HOST=pass@hostname MPD_PORT=1234 mpc clear | |
| # 'Load' new playlist | |
| if [ -f "$HOME/.cache/cantata/dynamic/rules" ] ; then | |
| rm "$HOME/.cache/cantata/dynamic/rules" | |
| fi | |
| ln -s "$HOME/.local/share/cantata/dynamic/MyPlaylist.rules" "$HOME/.cache/cantata/dynamic/rules" | |
| # Restart dynamic script | |
| MPD_HOST=pass@hostname MPD_PORT=1234 /usr/share/cantata/scripts/cantata-dynamic start | |
| 12. Dynamic Helper Script - Server Mode | |
| ======================================= | |
| In addition to the above, the helper script may be installed on the system | |
| containing MPD, and run in 'server' mode. This requires MPD>=0.17, as | |
| communications are via MPD's client-to-client messages. | |
| When run in this mode, it is intended that the script be run system-wide and | |
| started when the system (or MPD) is started. e.g. The script should be started | |
| as: | |
| <prefix>/share/cantata/scripts/cantata-dynamic server <location of config file> | |
| e.g.: /usr/share/cantata/scripts/cantata-dynamic server /etc/cantata-dynamic.conf | |
| When run as described above, the script will automatically daemonize itself. | |
| To stop the dynamizer: | |
| <prefix>/share/cantata/scripts/cantata-dynamic stopserver | |
| e.g.: /usr/share/cantata/scripts/cantata-dynamic stopserver | |
| When MPD informs Cantata that the 'cantata-dynamic-in' channel has been | |
| created, Cantata will automatically switch itself to server mode. The list of | |
| rules is then loaded from the server, and Cantata will change the backdrop of | |
| the dynamic page to indicate that the rules are comming from the server. | |
| Server mode is currently the only way for dynamic playlists to be used under | |
| Windows. | |
| Configuration | |
| ------------- | |
| The server mode has a simple ini-style configuration file, that has the | |
| following parameters (shown here with the default values): | |
| pidFile=/var/run/cantata-dynamic/pid | |
| filesDir=/var/lib/mpd/dynamic | |
| activeFile=/var/run/cantata-dynamic/rules | |
| mpdHost=localhost | |
| mpdPort=6600 | |
| mpdPassword= | |
| httpPort=0 | |
| 'pidFile' When started, the script will store its PID within the file | |
| configured here. This is then used to detect if the script is running, etc. | |
| 'filesDir' This controls where the dynamic rules are stored. The user the script | |
| is run as should have read/write permissions to this folder. | |
| 'activeFile' When a set of rules is made 'active', all cantata does is create a | |
| symbolic link from the rules file to the file specified in 'activeFile'. Again, | |
| the user the script is run as should have read/write permissions to this file. | |
| 'mpdHost', 'mpdPort', and 'mpdPassword' are the connection details of the MPD | |
| server. | |
| 'httpPort' if this is set to non-zero, then the script will serve up a *very* | |
| simple HTTP control page - allowing playlists to be started and stopped. | |
| Installation | |
| ------------- | |
| Within the playlists folder is a systemd service file. | |
| NOTE: This service file assumes cantata has been installed to /usr, and that | |
| cantata-dynamic is in /usr/share/cantata/scripts. If this is not the case, then | |
| this will need to be edited. | |
| Copy playlists/cantata-dynamic.conf to /etc, and edit as appropriate. | |
| 13. Source Code | |
| =============== | |
| The Cantata source folder contains the following structure: | |
| 3rdparty - Third party libraries | |
| cmake - CMake scripts | |
| context - Context view classes | |
| dbus - DBUS related classes and XML files | |
| devices - Device related classes | |
| playlists - Playlists | |
| gui - General GUI classes, e.g. MainWindow, LibraryPage, etc. | |
| http - HTTP server | |
| icons - Icons | |
| models - Most models, apart from dynamic playlist and shortcut models | |
| mpd - MPD related classes; connection, status, song, etc. | |
| network - Generic Network classes (and proxy support for Qt builds) | |
| online - Jamendo, Magantune, SoundCloud, and Podcasts | |
| po - Translations | |
| replaygain - ReplayGain calculation | |
| streams - Internet radio streams | |
| support - Generic classes that /may/ be useful to other projects. | |
| Mainly used for Qt and Gtk support. | |
| tags - Tag reading, editing, etc. | |
| widgets - Widgets that are probably Cantata specific. | |
| windows - Files specfic to Windows builds.. | |
| mac - Files specfic to MacOSX builds. | |
| Cantata's SVG icons have been 'cleaned' using: | |
| scour --strip-xml-prolog --indent=none -i in.svg -o out.svg | |
| Symbolc media icons are taken from gnome icon theme, but have been scaled with | |
| rsvg-convert -a -w 128 -f svg in.svg -o out.svg | |
| 14. Debug Logging | |
| ================= | |
| Cantata contains some debug logging that might help to diagnose certain issues. | |
| To enable this, you need to use the --debug commandline option. This option | |
| takes a comma-separated list of debug areas. | |
| Therefore, its probably better to start Cantata from the commandline. | |
| The following debug areas may be used: | |
| MPD communications mpd | |
| MPD Parsing mpdparse | |
| Covers covers (or covers-verbose) | |
| Wikipedia context info context-wikipedia | |
| Last.fm context info context-lastfm | |
| Combined context info context-info | |
| Context widget context-widget | |
| Context lyrics context-lyrics | |
| Dynamic dynamic | |
| Stream fetching stream-fetcher | |
| Http server http-server | |
| Song dialog file checks song-dialog | |
| Network access network-access | |
| Threads threads | |
| External tags tags | |
| Scrobbling scrobbler | |
| Devices devices | |
| SQL sql | |
| MPD HTTP stream playback http-stream | |
| MPD auto discover avahi | |
| Media keys media-keys | |
| Cusrtom actions custom-actions | |
| To log debug to a file use --debug-to-file. e.g. To log MPD communications and | |
| cover access to a file, start cantata as follows: | |
| cantata --debug=mpd,covers --debug-to-file | |
| The loccation of the debug file will vary dependant upon OS. On Linux systems | |
| this will be ~/.cache/cantata/cantata.log For Windows this will be | |
| C:\Users\USERNAME\AppData\Local\mpd\cantata\cache\cantata.log And for OSX it | |
| will be /Users/$USER/Library/Caches/cantata/cantata/cantata.log | |
| NOTE: Debug logging will function regardless of whether you have created a | |
| Debug or Release build. | |
| 15. Credits | |
| =========== | |
| Cantata contains code/icons from: | |
| Amarok - amarok.kde.org (Transcoding, Cover fetching code in | |
| cover dialog) | |
| Clementine - www.clementine-player.org (Lyrics searches, CUE file | |
| parsing, digitally imported support, and stretched | |
| header view) | |
| Be::MPC - Wikipedia parsing code | |
| Quassel - quassel-irc.org (Qt-only keyboard short-cut config | |
| support) | |
| Solid - solid.kde.org (Device detection for Qt-only builds) | |
| Asunder - CDDB code | |
| libkcddb - MusicBrainz code | |
| libebur128 - https://github.com/jiixyj/libebur128 (Replay gain | |
| calculation) | |
| IcoMoon - http://icomoon.io/#icons (Monochrome sidebar icons) | |
| Qxt - Multi-media key support | |
| QtSolutions - QtIOCompressor, and QtSingleApplication | |
| QMPDClient - Last.fm scrobbling | |
| 16. Windows | |
| =========== | |
| Icon created under Linux using the createicon.sh in the windows folder. | |
| The following steps are used to compile Cantata, and create the windows | |
| installer. | |
| This assumes the following folder structure: | |
| z:\cantata\src [ Checkout of Cantata's source code ] | |
| z:\cantata\build | |
| z:\cantata\install [ make install will place target files here ] | |
| z:\dev\Qt | |
| z:\dev\taglib | |
| z:\dev\zlib | |
| z:\dev\ssl [ libeay32.dll and ssleay32.dll ] | |
| s | |
| 1. Install Qt (5.3 or later), cmake, TagLib and zlib. TagLib and zlib will probably | |
| need compiling. | |
| 2. Set (or amend) the following environemnt variables: | |
| QTDIR=z:\dev\Qt\5.3\mingw482_32 | |
| PATH=z:\dev\Qt\5.3\mingw482_32\bin;z:\dev\Qt\Tools\mingw482_32\bin;z:\dev\taglib\bin;z:\dev\cmake\bin | |
| 3. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake: | |
| ../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 | |
| Notes: -DENABLE_TAGLIB=OFF stops cmake from trying to find TagLib, as the | |
| TagLib settings have been manually set, | |
| 4. Build via QtCreator | |
| 5. Create an 'install' project in QtCreator | |
| - Projects | |
| - Add/Clone Selected | |
| - Expand Build Steps, and select install | |
| 6. Build 'install' project via QtCreator | |
| This build is as per Qt-only, but does not have support for dbus, local dynamic | |
| playlists, device support, or replaygain calculation. | |
| Create Installer | |
| ---------------- | |
| Run Nullsoft Scriptable Install System, and use the cantata.nsi that has been | |
| generated in the install folder. This will place the setup exe into the install | |
| folder as well. | |
| TagLib | |
| ------ | |
| Windows version of taglib was built from TagLib 1.9.1, using QtCreator with the | |
| following passed to cmake: | |
| -DCMAKE_BUILD_TYPE=Release -DWITH_ASF=1 -DWITH_MP4=1 -DCMAKE_INSTALL_PREFIX=z:\dev\taglib | |
| 17. Mac OSX | |
| =========== | |
| The following steps are used to compile Cantata, and create the OS X application | |
| bundle. | |
| These steps assume the following structure: | |
| src/ | |
| build/ | |
| install/ | |
| 1. Install HomeBrew | |
| 2. brew install cmake taglib ffmpeg openssl qt5 | |
| 3. Create the icon | |
| cd src/mac | |
| ./createicon.sh | |
| From here you have a couple of options: | |
| Build via QtCreator | |
| ------------------- | |
| 1. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake: | |
| ../src -DCMAKE_INSTALL_PREFIX=`pwd`/../install -DENABLE_TAGLIB=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5;/usr/local/opt/qt5/lib/cmake/Qt5Widgets -DCMAKE_BUILD_TYPE=Release | |
| 2. Create an 'install' project in QtCreator | |
| - Projects | |
| - Add/Clone Selected | |
| - Expand Build Steps, and select install | |
| 3. Build 'install' project via QtCreator | |
| Build via commandline | |
| --------------------- | |
| If you have qt6 installed as well as qt5 (installed above), then homebrew | |
| calls qt6 "qt". Since we need to build Cantata against qt5, the easiest | |
| option is to temporarily unlink qt6 and link qt5, then undo the process. | |
| If you have qt6 installed (check version in "brew info qt"), then do this: | |
| brew unlink qt@6 | |
| brew link qt@5 | |
| Build and install Cantata: | |
| cd build | |
| export Qt5_DIR="/usr/local/opt/qt5/lib/cmake" | |
| cmake -S "../src" -B "./" -DCMAKE_INSTALL_PREFIX="../install" -DENABLE_TAGLIB=ON -DCMAKE_PREFIX_PATH="/usr/local/opt/qt5/;/usr/local/opt/qt5/lib/cmake/Qt5Widgets/" -DCMAKE_BUILD_TYPE=Release | |
| make | |
| make install | |
| Finally, relink the original qt6 (again, if you had qt6 at all): | |
| brew unlink qt@5 | |
| brew link qt@6 | |
| Create Installer | |
| ---------------- | |
| 1. Go into the 'mac' folder within the build folder | |
| 2. Run ./create-dmg.sh |