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