;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
+;;; Copyright © 2016 Al McElrath <hello@yrns.org>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016 Kei Yamashita <kei@openmailbox.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages algebra)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
+ #:use-module (gnu packages backup)
#:use-module (gnu packages base) ;libbdf
- #:use-module (gnu packages boost)
#:use-module (gnu packages bison)
+ #:use-module (gnu packages boost)
#:use-module (gnu packages cdrom)
#:use-module (gnu packages code)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages curl)
#:use-module (gnu packages docbook)
+ #:use-module (gnu packages doxygen)
#:use-module (gnu packages flex)
#:use-module (gnu packages fltk)
#:use-module (gnu packages fonts)
#:use-module (gnu packages fontutils)
+ #:use-module (gnu packages freedesktop)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gnupg)
#:use-module (gnu packages gettext)
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages gl)
#:use-module (gnu packages linux) ; for alsa-utils
#:use-module (gnu packages man)
#:use-module (gnu packages mp3)
+ #:use-module (gnu packages mpd)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages netpbm)
#:use-module (gnu packages pdf)
#:use-module (gnu packages python)
#:use-module (gnu packages qt)
#:use-module (gnu packages rdf)
+ #:use-module (gnu packages readline)
#:use-module (gnu packages rsync)
+ #:use-module (gnu packages sdl)
#:use-module (gnu packages tcl)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages texlive)
(define-public hydrogen
(package
(name "hydrogen")
- (version "0.9.5.1")
+ (version "0.9.6.1")
(source (origin
(method url-fetch)
(uri (string-append
- "mirror://sourceforge/hydrogen/Hydrogen/"
- (version-prefix version 3) "%20Sources/"
- "hydrogen-" version ".tar.gz"))
+ "https://github.com/hydrogen-music/hydrogen/archive/"
+ version ".tar.gz"))
(sha256
(base32
- "1fvyp6gfzcqcc90dmaqbm11p272zczz5pfz1z4lj33nfr7z0bqgb"))))
- (build-system gnu-build-system)
+ "0vxnaqfmcv7hhk0cj67imdcqngspnck7f0wfmvhfgfqa7x1xznll"))))
+ (build-system cmake-build-system)
(arguments
- `(#:tests? #f ;no "check" target
- #:phases
- ;; TODO: Add scons-build-system and use it here.
- (modify-phases %standard-phases
- (delete 'configure)
- (add-after 'unpack 'scons-propagate-environment
- (lambda _
- ;; By design, SCons does not, by default, propagate
- ;; environment variables to subprocesses. See:
- ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
- ;; Here, we modify the Sconstruct file to arrange for
- ;; environment variables to be propagated.
- (substitute* "Sconstruct"
- (("^env = Environment\\(")
- "env = Environment(ENV=os.environ, "))))
- (replace 'build
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (zero? (system* "scons"
- (string-append "prefix=" out)
- "lrdf=0" ; cannot be found
- "lash=1")))))
- (add-before
- 'install
- 'fix-img-install
- (lambda _
- ;; The whole ./data/img directory is copied to the target first.
- ;; Scons complains about existing files when we try to install all
- ;; images a second time.
- (substitute* "Sconstruct"
- (("os.path.walk\\(\"./data/img/\",install_images,env\\)") ""))
- #t))
- (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
+ `(#:test-target "tests"))
(native-inputs
- `(("scons" ,scons)
- ("python" ,python-2)
+ `(("cppunit" ,cppunit)
("pkg-config" ,pkg-config)))
(inputs
- `(("zlib" ,zlib)
- ("libtar" ,libtar)
- ("alsa-lib" ,alsa-lib)
+ `(("alsa-lib" ,alsa-lib)
("jack" ,jack-1)
+ ;; ("ladspa" ,ladspa) ; cannot find during configure
("lash" ,lash)
- ;;("lrdf" ,lrdf) ;FIXME: cannot be found by scons
+ ("libarchive" ,libarchive)
+ ("libsndfile" ,libsndfile)
+ ("libtar" ,libtar)
+ ("lrdf" ,lrdf)
("qt" ,qt-4)
- ("libsndfile" ,libsndfile)))
+ ("zlib" ,zlib)))
(home-page "http://www.hydrogen-music.org")
(synopsis "Drum machine")
(description
you to define complex tempo maps for entire songs or performances.")
(license license:gpl2+)))
+(define-public gtklick
+ (package
+ (name "gtklick")
+ (version "0.6.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://das.nasophon.de/download/gtklick-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0dq1km6njnzsqdqyf6wzir9g733z0mc9vmxfg2383k3c2a2di6bp"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; no tests
+ #:python ,python-2
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'add-sitedirs
+ ;; .pth files are not automatically interpreted unless the
+ ;; directories containing them are added as "sites". The directories
+ ;; are then added to those in the PYTHONPATH. This is required for
+ ;; the operation of pygtk.
+ (lambda _
+ (substitute* "gtklick/gtklick.py"
+ (("import pygtk")
+ "import pygtk, site, sys
+for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
+ (add-after 'unpack 'inject-store-path-to-klick
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "gtklick/klick_backend.py"
+ (("KLICK_PATH = 'klick'")
+ (string-append "KLICK_PATH = '"
+ (assoc-ref inputs "klick")
+ "/bin/klick'")))
+ #t)))))
+ (inputs
+ `(("klick" ,klick)
+ ("python2-pyliblo" ,python2-pyliblo)
+ ("python2-pygtk" ,python2-pygtk)))
+ (native-inputs
+ `(("gettext" ,gnu-gettext)))
+ (home-page "http://das.nasophon.de/gtklick/")
+ (synopsis "Simple metronome with an easy-to-use graphical interface")
+ (description
+ "Gtklick is a simple metronome with an easy-to-use graphical user
+interface. It is implemented as a frontend to @code{klick}.")
+ (license license:gpl2+)))
+
(define-public lilypond
(package
(name "lilypond")
- (version "2.19.27")
+ (version "2.19.33")
(source (origin
(method url-fetch)
(uri (string-append
name "-" version ".tar.gz"))
(sha256
(base32
- "11v4jr4qj1jpqvjw1ww7riv8pxfyasif8mf16l447f1xq1ifhkhs"))))
+ "0s4vbbfy4xwq4da4kmlnndalmcyx2jaz7y8praah2146qbnr90xh"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; out-test/collated-files.html fails
#:out-of-source? #t
+ #:make-flags '("conf=www") ;to generate images for info manuals
#:configure-flags
- (list (string-append "--with-texgyre-dir="
+ (list "CONFIGURATION=www"
+ (string-append "--with-texgyre-dir="
(assoc-ref %build-inputs "font-tex-gyre")
"/share/fonts/opentype/"))
#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'hardcode-path-to-gs
- (lambda* (#:key inputs #:allow-other-keys)
+ (add-after 'unpack 'fix-path-references
+ (lambda _
(substitute* "scm/backend-library.scm"
(("\\(search-executable '\\(\"gs\"\\)\\)")
- (string-append "\""
- (assoc-ref inputs "ghostscript")
- "/bin/gs"
- "\"" )))
+ (string-append "\"" (which "gs") "\""))
+ (("\"/bin/sh\"")
+ (string-append "\"" (which "sh") "\"")))
#t))
(add-before 'configure 'prepare-configuration
(lambda _
(substitute* "configure"
- (("SHELL=/bin/sh") "SHELL=sh"))
- (setenv "out" "")
- #t)))))
+ (("SHELL=/bin/sh") "SHELL=sh")
+ ;; When checking the fontforge version do not consider the
+ ;; version string that's part of the directory.
+ (("head -n") "tail -n"))
+ (setenv "out" "www")
+ (setenv "conf" "www")
+ #t))
+ (add-after 'install 'install-info
+ (lambda _
+ (zero? (system* "make"
+ "-j" (number->string (parallel-job-count))
+ "conf=www" "install-info")))))))
(inputs
`(("guile" ,guile-1.8)
("font-dejavu" ,font-dejavu)
music. Music is input in a text file containing control sequences which are
interpreted by LilyPond to produce the final document. It is extendable with
Guile.")
- (license license:gpl3+)))
+ (license license:gpl3+)
+
+ ;; On armhf and mips64el, building the documentation sometimes leads to
+ ;; more than an hour of silence, so double the max silent time.
+ (properties `((max-silent-time . 7200)))))
(define-public non-sequencer
;; The latest tagged release is three years old and uses a custom build
("pygtk" ,python2-pygtk)
("gettext" ,gnu-gettext)
("gtk" ,gtk+)
- ;; TODO: Lilypond is optional. Produces errors at build time:
- ;; Drawing systems...Error: /undefinedresult in --glyphshow--
- ;; Fontconfig is needed to fix one of the errors, but other similar
- ;; errors remain.
- ;;("lilypond" ,lilypond)
+ ("lilypond" ,lilypond)
("librsvg" ,librsvg) ; needed at runtime for icons
("libpng" ,libpng) ; needed at runtime for icons
;; players needed at runtime
("txt2man" ,txt2man)
("libxml2" ,libxml2) ; for tests
("ghostscript" ,ghostscript)
- ;;("fontconfig" ,fontconfig) ; only needed with lilypond
- ;;("freetype" ,freetype) ; only needed with lilypond
("texinfo" ,texinfo)))
(home-page "https://www.gnu.org/software/solfege/")
(synopsis "Ear training")
Laurens Hammond and Don Leslie.")
(license license:gpl2+)))
+(define-public bristol
+ (package
+ (name "bristol")
+ (version "0.60.11")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/bristol/bristol/"
+ (version-major+minor version)
+ "/bristol-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-sse-flags
+ (lambda* (#:key system #:allow-other-keys)
+ (when (not (or (string-prefix? "x86_64" system)
+ (string-prefix? "i686" system)))
+ (substitute* "bristol/Makefile.in"
+ (("-msse -mfpmath=sse") "")))
+ #t)))))
+ (inputs
+ `(("alsa-lib" ,alsa-lib)
+ ("jack" ,jack-1)
+ ("liblo" ,liblo)
+ ("libx11" ,libx11)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://bristol.sourceforge.net/")
+ (synopsis "Synthesizer emulator")
+ (description
+ "Bristol is an emulation package for a number of different 'classic'
+synthesizers including additive and subtractive and a few organs. The
+application consists of the engine, which is called bristol, and its own GUI
+library called brighton that represents all the emulations. There are
+currently more than twenty different emulations; each does sound different
+although the author maintains that the quality and accuracy of each emulation
+is subjective.")
+ (license license:gpl3+)))
+
(define-public tuxguitar
(package
(name "tuxguitar")
#:tests? #f ;no "check" target
#:parallel-build? #f ;not supported
#:phases
- (alist-cons-before
- 'build 'enter-dir-set-path-and-pass-ldflags
- (lambda* (#:key inputs #:allow-other-keys)
- (chdir "TuxGuitar")
- (substitute* "GNUmakefile"
- (("PROPERTIES\\?=")
- (string-append "PROPERTIES?= -Dswt.library.path="
- (assoc-ref inputs "swt") "/lib"))
- (("\\$\\(GCJ\\) -o") "$(GCJ) $(LDFLAGS) -o"))
- #t)
- (alist-delete 'configure %standard-phases))))
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (add-before 'build 'enter-dir-and-set-flags
+ (lambda* (#:key inputs #:allow-other-keys)
+ (chdir "TuxGuitar")
+ (substitute* "GNUmakefile"
+ (("GCJFLAGS\\+=(.*)" _ rest)
+ (string-append "GCJFLAGS=-fsource=1.4 -fPIC " rest))
+ (("PROPERTIES\\?=")
+ (string-append "PROPERTIES?= -Dswt.library.path="
+ (assoc-ref inputs "swt") "/lib"))
+ (("\\$\\(GCJ\\) -o") "$(GCJ) $(LDFLAGS) -o"))
+ #t)))))
(inputs
`(("swt" ,swt)))
(native-inputs
(define-public frescobaldi
(package
(name "frescobaldi")
- (version "2.18.1")
+ (version "2.18.2")
(source (origin
(method url-fetch)
(uri (string-append
version "/frescobaldi-" version ".tar.gz"))
(sha256
(base32
- "1hflc6gck6dn17czc2ldai5j0ynfg3df8lqcggdry06qxsdbnns7"))))
+ "1yns7nq2a2hz5rv4xjp21bgcdi1xj6fq48lqjrld7ypqqi5nfjp5"))))
(build-system python-build-system)
(inputs
`(("lilypond" ,lilypond)
browser.")
(license license:gpl2+)))
+(define-public drumstick
+ (package
+ (name "drumstick")
+ (version "1.0.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/drumstick/"
+ version "/drumstick-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no test target
+ #:configure-flags '("-DLIB_SUFFIX=")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'fix-docbook
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "cmake_admin/CreateManpages.cmake"
+ (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
+ (string-append (assoc-ref inputs "docbook-xsl")
+ "/xml/xsl/docbook-xsl-"
+ ,(package-version docbook-xsl)
+ "/manpages/docbook.xsl")))
+ #t)))))
+ (inputs
+ `(("qt" ,qt)
+ ("alsa-lib" ,alsa-lib)
+ ("fluidsynth" ,fluidsynth)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("libxslt" ,libxslt) ;for xsltproc
+ ("docbook-xsl" ,docbook-xsl)
+ ("doxygen" ,doxygen)))
+ (home-page "http://drumstick.sourceforge.net/")
+ (synopsis "C++ MIDI library")
+ (description
+ "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
+includes a C++ wrapper around the ALSA library sequencer interface. A
+complementary library provides classes for processing SMF (Standard MIDI
+files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
+multiplatform realtime MIDI I/O library is also provided with various output
+backends, including ALSA, OSS, Network and FluidSynth.")
+ (license license:gpl2+)))
+
+(define-public vmpk
+ (package
+ (name "vmpk")
+ (version "0.6.2a")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
+ (string-drop-right version 1)
+ "/vmpk-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "0259iikvxnfdiifrh02g8xgcxikrkca4nhd3an8xzx0bd6bk8ifi"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no test target
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'fix-docbook
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "cmake_admin/CreateManpages.cmake"
+ (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
+ (string-append (assoc-ref inputs "docbook-xsl")
+ "/xml/xsl/docbook-xsl-"
+ ,(package-version docbook-xsl)
+ "/manpages/docbook.xsl")))
+ #t)))))
+ (inputs
+ `(("drumstick" ,drumstick)
+ ("qt" ,qt)))
+ (native-inputs
+ `(("libxslt" ,libxslt) ;for xsltproc
+ ("docbook-xsl" ,docbook-xsl)
+ ("pkg-config" ,pkg-config)))
+ (home-page "http://vmpk.sourceforge.net")
+ (synopsis "Virtual MIDI piano keyboard")
+ (description
+ "Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It
+doesn't produce any sound by itself, but can be used to drive a MIDI
+synthesizer (either hardware or software, internal or external). You can use
+the computer's keyboard to play MIDI notes, and also the mouse. You can use
+the Virtual MIDI Piano Keyboard to display the played MIDI notes from another
+instrument or MIDI file player.")
+ (license license:gpl3+)))
+
(define-public zynaddsubfx
(package
(name "zynaddsubfx")
- (version "2.5.1")
+ (version "2.5.3")
(source (origin
(method url-fetch)
(uri (string-append
"mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
- version "/zynaddsubfx-" version ".tar.gz"))
+ version "/zynaddsubfx-" version ".tar.bz2"))
(sha256
(base32
- "01c4v5lbzard6y00cjq3b6a50cafqwfwibzng9gdsajczhnbkqz2"))))
+ "04da54p19p7f5wm6vm7abbjbsil1qf7n5f4adj01jm6b0wqigvgb"))))
(build-system cmake-build-system)
(arguments
`(#:phases
three synthesizer engines, multitimbral and polyphonic synths, microtonal
capabilities, custom envelopes, effects, etc.")
(license license:gpl2)))
+
+(define-public yoshimi
+ (package
+ (name "yoshimi")
+ (version "1.3.8.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/yoshimi/"
+ (version-major+minor version)
+ "/yoshimi-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "0wl4ln6v1nkkx56kfah23chyrhga2vi93i82g0s200c4s4184xr8"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; there are no tests
+ #:configure-flags
+ (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
+ (assoc-ref %outputs "out") "/share"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'enter-dir
+ (lambda _ (chdir "src") #t))
+ ;; Move SSE compiler optimization flags from generic target to
+ ;; athlon64 and core2 targets, because otherwise the build would fail
+ ;; on non-Intel machines.
+ (add-after 'unpack 'remove-sse-flags-from-generic-target
+ (lambda _
+ (substitute* "src/CMakeLists.txt"
+ (("-msse -msse2 -mfpmath=sse") "")
+ (("-march=(athlon64|core2)" flag)
+ (string-append flag " -msse -msse2 -mfpmath=sse")))
+ #t)))))
+ (inputs
+ `(("boost" ,boost)
+ ("fftwf" ,fftwf)
+ ("alsa-lib" ,alsa-lib)
+ ("jack" ,jack-1)
+ ("fontconfig" ,fontconfig)
+ ("minixml" ,minixml)
+ ("mesa" ,mesa)
+ ("fltk" ,fltk)
+ ("lv2" ,lv2)
+ ("readline" ,readline)
+ ("ncurses" ,ncurses)
+ ("cairo" ,cairo)
+ ("zlib" ,zlib)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://yoshimi.sourceforge.net/")
+ (synopsis "Multi-paradigm software synthesizer")
+ (description
+ "Yoshimi is a fork of ZynAddSubFX, a feature heavy realtime software
+synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
+synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
+improves on support for JACK features, such as JACK MIDI.")
+ (license license:gpl2)))
+
+(define-public cursynth
+ (package
+ (name "cursynth")
+ (version "1.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/cursynth/cursynth-"
+ version ".tar.gz"))
+ (sha256
+ (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
+ (patches (search-patches "cursynth-wave-rand.patch"))))
+ (build-system gnu-build-system)
+ (native-inputs `(("pkg-config" ,pkg-config)))
+ ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
+ ;; prevents us from using pulseaudio
+ (inputs `(("ncurses" ,ncurses)
+ ("alsa" ,alsa-lib)))
+ (home-page "http://www.gnu.org/software/cursynth")
+ (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
+ (description "GNU cursynth is a polyphonic synthesizer that runs
+graphically in the terminal. It is built on a full-featured subtractive
+synthesis engine. Notes and parameter changes may be entered via MIDI or the
+computer's keyboard.")
+ (license license:gpl3+)))
+
+(define-public qtractor
+ (package
+ (name "qtractor")
+ (version "0.7.5")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://downloads.sourceforge.net/qtractor/"
+ "qtractor-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0drqzp1rbqmqiwdzc9n3307y8rm882fha3awy5qlvir5ma2mwl80"))))
+ (build-system gnu-build-system)
+ (arguments `(#:tests? #f)) ; no "check" target
+ (inputs
+ `(("qt" ,qt)
+ ("alsa-lib" ,alsa-lib)
+ ("jack" ,jack-1)
+ ("libsndfile" ,libsndfile)
+ ("ladspa" ,ladspa)
+ ("lv2" ,lv2)
+ ("lilv" ,lilv)
+ ("suil" ,suil)
+ ("libsamplerate" ,libsamplerate)
+ ("libvorbis" ,libvorbis)
+ ("libmad" ,libmad)
+ ("rubberband" ,rubberband)
+ ("liblo" ,liblo)
+ ("zlib" ,zlib)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://qtractor.sourceforge.net/")
+ (synopsis "Audio/MIDI multi-track sequencer")
+ (description
+ "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
+JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
+follows a traditional multi-track tape recorder control paradigm.")
+ (license license:gpl2+)))
+
+(define-public pianobar
+ (package
+ (name "pianobar")
+ (version "2015.11.22")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/PromyLOPh/"
+ name "/archive/" version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "022df19bhxqvkhy0qy21xahba5s1fm17b13y0p9p9dnf2yl44wfv"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; no tests
+ #:make-flags (list "CC=gcc" "CFLAGS=-std=c99"
+ (string-append "PREFIX=" %output))
+ #:phases (modify-phases %standard-phases
+ (delete 'configure))))
+ (inputs
+ `(("ao" ,ao)
+ ("curl" ,curl)
+ ("libgcrypt" ,libgcrypt)
+ ("json-c" ,json-c)
+ ("ffmpeg" ,ffmpeg)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://6xq.net/projects/pianobar/")
+ (synopsis "Console-based pandora.com player")
+ (description "pianobar is a console-based music player for the
+personalized online radio pandora.com. It has configurable keys for playing
+and managing stations, can be controlled remotely via fifo, and can run
+event-based scripts for scrobbling, notifications, etc.")
+ (license license:expat)))
+
+(define-public python-mutagen
+ (package
+ (name "python-mutagen")
+ (version "1.31")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "mutagen" version))
+ (sha256
+ (base32
+ "16fnnhspniac2i7qswxafawsh2x2a803hmc6bn9k1zl5fxq1380a"))))
+ (build-system python-build-system)
+ (home-page "https://bitbucket.org/lazka/mutagen")
+ (synopsis "Read and write audio tags")
+ (description "Mutagen is a Python module to handle audio metadata. It
+supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
+Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
+of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
+Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
+APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
+streams on an individual packet/page level.")
+ (license license:gpl2))) ; "later version" never mentioned
+
+(define-public python2-mutagen
+ (package-with-python2 python-mutagen))
+
+(define-public python-musicbrainzngs
+ (package
+ (name "python-musicbrainzngs")
+ (version "0.5")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "musicbrainzngs" version))
+ (sha256
+ (base32
+ "12f48llmdf5rkiqxcb70k2k1dmhm8byq0ifazvlrca8dfnmqh4r8"))))
+ (build-system python-build-system)
+ (home-page "https://python-musicbrainzngs.readthedocs.org/")
+ (synopsis "Python bindings for MusicBrainz NGS webservice")
+ (description "Musicbrainzngs implements Python bindings of the MusicBrainz
+web service. This library can be used to retrieve music metadata from the
+MusicBrainz database.")
+ ;; 'musicbrainzngs/compat.py' is ISC licensed.
+ (license (list license:bsd-2 license:isc))))
+
+(define-public python2-musicbrainzngs
+ (package-with-python2 python-musicbrainzngs))
+
+(define-public python-pyechonest
+ (package
+ (name "python-pyechonest")
+ (version "9.0.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyechonest" version))
+ (sha256
+ (base32
+ "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/echonest/pyechonest")
+ (synopsis "Python interface to The Echo Nest APIs")
+ (description "Pyechonest is a Python library for the Echo Nest API. With
+Pyechonest you have Python access to the entire set of API methods including:
+
+@enumerate
+@item artist - search for artists by name, description, or attribute, and get
+back detailed information about any artist including audio, similar artists,
+blogs, familiarity, hotttnesss, news, reviews, urls and video.
+@item song - search songs by artist, title, description, or attribute (tempo,
+duration, etc) and get detailed information back about each song, such as
+hotttnesss, audio_summary, or tracks.
+@item track - upload a track to the Echo Nest and receive summary information
+about the track including key, duration, mode, tempo, time signature along with
+detailed track info including timbre, pitch, rhythm and loudness information.
+@end enumerate\n")
+ (license license:bsd-3)
+ (properties `((python2-variant . ,(delay python2-pyechonest))))))
+
+(define-public python2-pyechonest
+ (package (inherit (package-with-python2
+ (strip-python2-variant python-pyechonest)))
+ (native-inputs `(("python2-setuptools" ,python2-setuptools)))))
+
+(define-public python-pylast
+ (package
+ (name "python-pylast")
+ (version "1.5.1")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "pylast" version))
+ (sha256
+ (base32
+ "10znd9xr1vs2ix519jkz3ccm90zciaddcdr2w2wrrh2jyy3bc59a"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-coverage" ,python-coverage)
+ ("python-mock" ,python-mock)
+ ("python-pep8" ,python-pep8)
+ ("python-pytest" ,python-pytest)
+ ("python-pyflakes" ,python-pyflakes)
+ ("python-pyyaml" ,python-pyyaml)))
+ (propagated-inputs
+ `(("python-six" ,python-six)))
+ (home-page "https://github.com/pylast/pylast")
+ (synopsis "Python interface to Last.fm and Libre.fm")
+ (description "A Python interface to Last.fm and other API-compatible
+websites such as Libre.fm.")
+ (license license:asl2.0)
+ (properties `((python2-variant . ,(delay python2-pylast))))))
+
+(define-public python2-pylast
+ (let ((pylast (package-with-python2
+ (strip-python2-variant python-pylast))))
+ (package (inherit pylast)
+ (native-inputs
+ `(("python2-setuptools" ,python2-setuptools)
+ ,@(package-native-inputs pylast))))))
+
+(define-public beets
+ (package
+ (name "beets")
+ (version "1.3.17")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri name version))
+ (sha256
+ (base32
+ "0yg7sp18sdpszkinhb0bi6yinbn316jy1baxrwiw0m4byrj3rr6c"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:python ,python-2 ; only Python 2 is supported
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'set-HOME
+ (lambda _ (setenv "HOME" (string-append (getcwd) "/tmp"))))
+ (replace 'check
+ (lambda _ (zero? (system* "nosetests" "-v")))))))
+ (native-inputs
+ `(("python2-beautifulsoup4" ,python2-beautifulsoup4)
+ ("python2-flask" ,python2-flask)
+ ("python2-setuptools" ,python2-setuptools)
+ ("python2-mock" ,python2-mock)
+ ("python2-mpd2" ,python2-mpd2)
+ ("python2-nose" ,python2-nose)
+ ("python2-pathlib" ,python2-pathlib)
+ ("python2-pyxdg" ,python2-pyxdg)
+ ("python2-pyechonest" ,python2-pyechonest)
+ ("python2-pylast" ,python2-pylast)
+ ("python2-rarfile" ,python2-rarfile)
+ ("python2-responses" ,python2-responses)))
+ ;; TODO: Install optional plugins and dependencies.
+ (propagated-inputs
+ `(("python2-enum34" ,python2-enum34)
+ ("python2-jellyfish" ,python2-jellyfish)
+ ("python2-munkres" ,python2-munkres)
+ ("python2-musicbrainzngs" ,python2-musicbrainzngs)
+ ("python2-mutagen" ,python2-mutagen)
+ ("python2-pyyaml" ,python2-pyyaml)
+ ("python2-unidecode" ,python2-unidecode)))
+ (home-page "http://beets.io")
+ (synopsis "Music organizer")
+ (description "The purpose of beets is to get your music collection right
+once and for all. It catalogs your collection, automatically improving its
+metadata as it goes using the MusicBrainz database. Then it provides a variety
+of tools for manipulating and accessing your music.")
+ (license license:expat)))
+
+(define-public milkytracker
+ (package
+ (name "milkytracker")
+ (version "0.90.86")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://milkytracker.org/files/"
+ name "-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "1v9vp8vi24lkagfpr92c128whvakwgrm9pq2zf6ijpl5sh7014zb"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags '("CXXFLAGS=-lasound")))
+ (inputs
+ `(("alsa-lib" ,alsa-lib)
+ ("jack" ,jack-1)
+ ("sdl" ,sdl)
+ ("zlib" ,zlib)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (synopsis "Music tracker for working with .MOD/.XM module files")
+ (description "MilkyTracker is a music application for creating .MOD and .XM
+module files. It attempts to recreate the module replay and user experience of
+the popular DOS program Fasttracker II, with special playback modes available
+for improved Amiga ProTracker 2/3 compatibility.")
+ (home-page "http://milkytracker.org/")
+ ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
+ (license (list license:bsd-3 license:gpl3+))))