gnu: zynaddsubfx: Update to 2.5.2.
[jackhill/guix/guix.git] / gnu / packages / music.scm
index 5795ecb..a217a89 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system waf)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base) ;libbdf
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages code)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages fltk)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages linux) ; for alsa-utils
   #:use-module (gnu packages man)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio) ;libsndfile
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages rdf)
   #:use-module (gnu packages rsync)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages texlive)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (gnu packages xiph)
-  #:use-module (gnu packages zip))
+  #:use-module (gnu packages zip)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public cmus
+  (package
+    (name "cmus")
+    (version "2.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/" name "/" name "/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0raixgjavkm7hxppzsc5zqbfbh2bhjcmbiplhnsxsmyj8flafyc1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; cmus does not include tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace
+          'configure
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out")))
+
+              ;; It's an idiosyncratic configure script that doesn't
+              ;; understand --prefix=..; it wants prefix=.. instead.
+              (zero?
+               (system* "./configure"
+                        (string-append "prefix=" out)))))))))
+    ;; TODO: cmus optionally supports the following formats, which haven't yet
+    ;; been added to Guix:
+    ;;
+    ;; - Roar, libroar
+    ;;
+    ;; - DISCID_LIBS, apparently different from cd-discid which is included in
+    ;;   Guix.  See <http://sourceforge.net/projects/discid/>
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("ao" ,ao)
+       ("ffmpeg" ,ffmpeg)
+       ("flac" ,flac)
+       ("jack" ,jack-1)
+       ("libcddb" ,libcddb)
+       ("libcdio-paranoia" ,libcdio-paranoia)
+       ("libcue" ,libcue)
+       ("libmad" ,libmad)
+       ("libmodplug" ,libmodplug)
+       ("libmpcdec" ,libmpcdec)
+       ("libsamplerate" ,libsamplerate)
+       ("libvorbis" ,libvorbis)
+       ("ncurses" ,ncurses)
+       ("opusfile" ,opusfile)
+       ("pulseaudio" ,pulseaudio)
+       ("wavpack" ,wavpack)))
+     (home-page "https://cmus.github.io/")
+     (synopsis "Small console music player")
+     (description "Cmus is a small and fast console music player.  It supports
+many input formats and provides a customisable Vi-style user interface.")
+     (license license:gpl2+)))
+
+(define-public hydrogen
+  (package
+    (name "hydrogen")
+    (version "0.9.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/hydrogen/Hydrogen/"
+                    (version-prefix version 3) "%20Sources/"
+                    "hydrogen-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fvyp6gfzcqcc90dmaqbm11p272zczz5pfz1z4lj33nfr7z0bqgb"))))
+    (build-system gnu-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")))))))
+    (native-inputs
+     `(("scons" ,scons)
+       ("python" ,python-2)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("zlib" ,zlib)
+       ("libtar" ,libtar)
+       ("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-1)
+       ("lash" ,lash)
+       ;;("lrdf" ,lrdf) ;FIXME: cannot be found by scons
+       ("qt" ,qt-4)
+       ("libsndfile" ,libsndfile)))
+    (home-page "http://www.hydrogen-music.org")
+    (synopsis "Drum machine")
+    (description
+     "Hydrogen is an advanced drum machine for GNU/Linux.  Its main goal is to
+enable professional yet simple and intuitive pattern-based drum programming.")
+    (license license:gpl2+)))
+
+(define-public klick
+  (package
+    (name "klick")
+    (version "0.12.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://das.nasophon.de/download/klick-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ;no "check" target
+       #:phases
+       ;; TODO: Add scons-build-system and use it here.
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+                  (lambda* (#:key inputs outputs #:allow-other-keys)
+                    (let ((out (assoc-ref outputs "out")))
+                      (mkdir-p out)
+                      (zero? (system* "scons" (string-append "PREFIX=" out))))))
+         (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
+    (inputs
+     `(("boost" ,boost)
+       ("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
+       ("libsamplerate" ,libsamplerate)
+       ("liblo" ,liblo)
+       ("rubberband" ,rubberband)))
+    (native-inputs
+     `(("scons" ,scons)
+       ("python" ,python-2)
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://das.nasophon.de/klick/")
+    (synopsis "Metronome for JACK")
+    (description
+     "klick is an advanced command-line based metronome for JACK.  It allows
+you to define complex tempo maps for entire songs or performances.")
+    (license license:gpl2+)))
 
 (define-public lilypond
   (package
     (name "lilypond")
-    (version "2.18.2")
+    (version "2.19.27")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     name "-" version ".tar.gz"))
               (sha256
                (base32
-                "01xs9x2wjj7w9appaaqdhk15r1xvvdbz9qwahzhppfmhclvp779j"))))
+                "11v4jr4qj1jpqvjw1ww7riv8pxfyasif8mf16l447f1xq1ifhkhs"))))
     (build-system gnu-build-system)
     (arguments
-     `(;; Tests fail with this error:
-       ;; Undefined subroutine &main::get_index called at
-       ;; ./lilypond-2.18.2/Documentation/lilypond-texi2html.init line 2127.
-       #:tests? #f
+     `(#:tests? #f ; out-test/collated-files.html fails
        #:out-of-source? #t
+       #:configure-flags
+       (list (string-append "--with-texgyre-dir="
+                            (assoc-ref %build-inputs "font-tex-gyre")
+                            "/share/fonts/opentype/"))
        #:phases
-       (alist-cons-before
-        'configure 'prepare-configuration
-        (lambda _
-          (substitute* "configure"
-            (("SHELL=/bin/sh") "SHELL=sh"))
-          (setenv "out" "")
-          #t)
-        %standard-phases)))
+       (modify-phases %standard-phases
+         (add-after 'unpack 'hardcode-path-to-gs
+          (lambda* (#:key inputs #:allow-other-keys)
+            (substitute* "scm/backend-library.scm"
+              (("\\(search-executable '\\(\"gs\"\\)\\)")
+               (string-append "\""
+                              (assoc-ref inputs "ghostscript")
+                              "/bin/gs"
+                              "\"" )))
+            #t))
+         (add-before 'configure 'prepare-configuration
+          (lambda _
+            (substitute* "configure"
+              (("SHELL=/bin/sh") "SHELL=sh"))
+            (setenv "out" "")
+            #t)))))
     (inputs
      `(("guile" ,guile-1.8)
        ("font-dejavu" ,font-dejavu)
+       ("font-tex-gyre" ,font-tex-gyre)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("ghostscript" ,ghostscript)
@@ -113,6 +320,58 @@ interpreted by LilyPond to produce the final document.  It is extendable with
 Guile.")
     (license license:gpl3+)))
 
+(define-public non-sequencer
+  ;; The latest tagged release is three years old and uses a custom build
+  ;; system, so we take the last commit affecting the "sequencer" directory.
+  (let ((commit "1d9bd576"))
+    (package
+      (name "non-sequencer")
+      (version (string-append "1.9.5-" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "git://git.tuxfamily.org/gitroot/non/non.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0pkkw8q6d55j38xm7r4rwpdv1wy00a44h8c4wrn7vbgpq9nij46y"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (build-system waf-build-system)
+      (arguments
+       `(#:tests? #f ;no "check" target
+         #:configure-flags
+         (list "--project=sequencer"
+               ;; Disable the use of SSE unless on x86_64.
+               ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
+                                                       (%current-system))))
+                     '("--disable-sse")
+                     '()))
+         #:phases
+         (modify-phases %standard-phases
+           (add-before
+            'configure 'set-flags
+            (lambda _
+              ;; Compile with C++11, required by libsigc++.
+              (setenv "CXXFLAGS" "-std=c++11")
+              #t)))
+         #:python ,python-2))
+      (inputs
+       `(("jack" ,jack-1)
+         ("libsigc++" ,libsigc++)
+         ("liblo" ,liblo)
+         ("ntk" ,ntk)))
+      (native-inputs
+       `(("pkg-config" ,pkg-config)))
+      (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
+      (synopsis "Pattern-based MIDI sequencer")
+      (description
+       "The Non Sequencer is a powerful, lightweight, real-time,
+pattern-based MIDI sequencer.  It utilizes the JACK Audio Connection Kit for
+MIDI I/O and the NTK GUI toolkit for its user interface.  Everything in Non
+Sequencer happens on-line, in real-time.  Music can be composed live, while the
+transport is rolling.")
+      (license license:gpl2+))))
+
 (define-public solfege
   (package
     (name "solfege")
@@ -224,6 +483,159 @@ sessions.  Solfege is also designed to be extensible so you can easily write
 your own lessons.")
     (license license:gpl3+)))
 
+(define-public powertabeditor
+  (package
+    (name "powertabeditor")
+    (version "2.0.0-alpha8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/powertab/powertabeditor/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0gaa2x209v3azql8ak3r1n9a9qbxjx2ssirvwdxwklv2lmfqkm82"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove bundled sources for external libraries
+                  (delete-file-recursively "external")
+                  (substitute* "CMakeLists.txt"
+                    (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") "")
+                    (("add_subdirectory\\(external\\)") ""))
+                  (substitute* "test/CMakeLists.txt"
+                    (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") ""))
+
+                  ;; Add install target
+                  (substitute* "source/CMakeLists.txt"
+                    (("qt5_use_modules")
+                     (string-append
+                      "install(TARGETS powertabeditor "
+                      "RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)\n"
+                      "install(FILES data/tunings.json DESTINATION "
+                      "${CMAKE_INSTALL_PREFIX}/share/powertabeditor/)\n"
+                      "qt5_use_modules")))
+                  #t))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:modules ((guix build cmake-build-system)
+                  (guix build utils)
+                  (ice-9 match))
+       #:configure-flags
+       ;; CMake appears to lose the RUNPATH for some reason, so it has to be
+       ;; explicitly set with CMAKE_INSTALL_RPATH.
+       (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
+             "-DCMAKE_ENABLE_PRECOMPILED_HEADERS=OFF" ; if ON pte_tests cannot be built
+             (string-append "-DCMAKE_INSTALL_RPATH="
+                            (string-join (map (match-lambda
+                                                ((name . directory)
+                                                 (string-append directory "/lib")))
+                                              %build-inputs) ";")))
+       #:phases
+       (modify-phases %standard-phases
+         (replace
+          'check
+          (lambda _
+            (zero? (system* "bin/pte_tests"
+                            ;; Exclude this failing test
+                            "~Formats/PowerTabOldImport/Directions"))))
+         (add-before
+          'configure 'fix-tests
+          (lambda _
+            ;; Tests cannot be built with precompiled headers
+            (substitute* "test/CMakeLists.txt"
+              (("cotire\\(pte_tests\\)") ""))
+            #t))
+         (add-before
+          'configure 'remove-third-party-libs
+          (lambda* (#:key inputs #:allow-other-keys)
+            ;; Link with required static libraries, because we're not
+            ;; using the bundled version of withershins.
+            (substitute* '("source/CMakeLists.txt"
+                           "test/CMakeLists.txt")
+              (("target_link_libraries\\((powertabeditor|pte_tests)" _ target)
+               (string-append "target_link_libraries(" target " "
+                              (assoc-ref inputs "binutils")
+                              "/lib/libbfd.a "
+                              (assoc-ref inputs "libiberty")
+                              "/lib/libiberty.a "
+                              "dl")))
+            #t)))))
+    (inputs
+     `(("boost" ,boost)
+       ("alsa-lib" ,alsa-lib)
+       ("qt" ,qt)
+       ("withershins" ,withershins)
+       ("libiberty" ,libiberty) ;for withershins
+       ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
+       ("timidity" ,timidity++)
+       ("pugixml" ,pugixml)
+       ("rtmidi" ,rtmidi)
+       ("rapidjson" ,rapidjson)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("catch" ,catch-framework)
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://powertabs.net")
+    (synopsis "Guitar tablature editor")
+    (description
+     "Power Tab Editor 2.0 is the successor to the famous original Power Tab
+Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
+    (license license:gpl3+)))
+
+(define-public setbfree
+  (package
+    (name "setbfree")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append
+                "https://github.com/pantherb/setBfree/releases/download/v"
+                version "/setbfree-" version ".tar.gz"))
+              (sha256
+               (base32
+                "045bgp7qsigpbrhk7qvgvliwiy26sajifwn7f2jvk90ckfqnlw4b"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no "check" target
+       #:make-flags
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "FONTFILE="
+                            (assoc-ref %build-inputs "font-bitstream-vera")
+                            "/share/fonts/truetype/VeraBd.ttf")
+             ;; Disable unsupported optimization flags on non-x86
+             ,@(let ((system (or (%current-target-system)
+                                 (%current-system))))
+                 (if (or (string-prefix? "x86_64" system)
+                         (string-prefix? "i686" system))
+                     '()
+                     '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-CC-variable
+                     (lambda _ (setenv "CC" "gcc") #t))
+         (delete 'configure))))
+    (inputs
+     `(("jack" ,jack-1)
+       ("lv2" ,lv2)
+       ("zita-convolver" ,zita-convolver)
+       ("glu" ,glu)
+       ("ftgl" ,ftgl)
+       ("font-bitstream-vera" ,font-bitstream-vera)))
+    (native-inputs
+     `(("help2man" ,help2man)
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://setbfree.org")
+    (synopsis "Tonewheel organ")
+    (description
+     "setBfree is a MIDI-controlled, software synthesizer designed to imitate
+the sound and properties of the electromechanical organs and sound
+modification devices that brought world-wide fame to the names and products of
+Laurens Hammond and Don Leslie.")
+    (license license:gpl2+)))
+
 (define-public tuxguitar
   (package
     (name "tuxguitar")
@@ -262,7 +674,7 @@ your own lessons.")
     (inputs
      `(("swt" ,swt)))
     (native-inputs
-     `(("gcj" ,gcj-4.8)
+     `(("gcj" ,gcj)
        ("pkg-config" ,pkg-config)))
     (home-page "http://tuxguitar.com.ar")
     (synopsis "Multitrack tablature editor and player")
@@ -274,3 +686,132 @@ management, bend/slide/vibrato/hammer-on/pull-off effects, support for
 tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
 export.")
     (license license:lgpl2.1+)))
+
+(define-public pd
+  (package
+    (name "pd")
+    (version "0.45.4")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "mirror://sourceforge/pure-data/pure-data/"
+                              version "/pd-" (version-major+minor version)
+                              "-" (last (string-split version #\.))
+                              ".src.tar.gz"))
+              (sha256
+               (base32
+                "1ls2ap5yi2zxvmr247621g4jx0hhfds4j5704a050bn2n3l0va2p"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no "check" target
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+          'configure 'fix-wish-path
+          (lambda _
+            (substitute* "src/s_inter.c"
+              (("  wish ") (string-append "  " (which "wish8.6") " ")))
+            (substitute* "tcl/pd-gui.tcl"
+              (("exec wish ") (string-append "exec " (which "wish8.6") " ")))
+            #t))
+         (add-after
+          'unpack 'autoconf
+          (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("gettext" ,gnu-gettext)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("tk" ,tk)
+       ("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-1)))
+    (home-page "http://puredata.info")
+    (synopsis "Visual programming language for artistic performances")
+    (description
+     "Pure Data (aka Pd) is a visual programming language.  Pd enables
+musicians, visual artists, performers, researchers, and developers to create
+software graphically, without writing lines of code.  Pd is used to process
+and generate sound, video, 2D/3D graphics, and interface sensors, input
+devices, and MIDI.  Pd can easily work over local and remote networks to
+integrate wearable technology, motor systems, lighting rigs, and other
+equipment.  Pd is suitable for learning basic multimedia processing and visual
+programming methods as well as for realizing complex systems for large-scale
+projects.")
+    (license license:bsd-3)))
+
+(define-public frescobaldi
+  (package
+    (name "frescobaldi")
+    (version "2.18.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/wbsoft/frescobaldi/releases/download/v"
+                    version "/frescobaldi-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hflc6gck6dn17czc2ldai5j0ynfg3df8lqcggdry06qxsdbnns7"))))
+    (build-system python-build-system)
+    (inputs
+     `(("lilypond" ,lilypond)
+       ("python-pyqt-4" ,python-pyqt-4)
+       ("python-ly" ,python-ly)
+       ("poppler" ,poppler)
+       ("python-poppler-qt4" ,python-poppler-qt4)
+       ("python-sip" ,python-sip)))
+    (home-page "http://www.frescobaldi.org/")
+    (synopsis "LilyPond sheet music text editor")
+    (description
+     "Frescobaldi is a LilyPond sheet music text editor with syntax
+highlighting and automatic completion.  Among other things, it can render
+scores next to the source, can capture input from MIDI or read MusicXML and
+ABC files, has a MIDI player for proof-listening, and includes a documentation
+browser.")
+    (license license:gpl2+)))
+
+(define-public zynaddsubfx
+  (package
+    (name "zynaddsubfx")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
+                    version "/zynaddsubfx-" version ".tar.gz"))
+              (sha256
+               (base32
+                "11yrady7xwfrzszkk2fvq81ymv99mq474h60qnirk27khdygk24m"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; 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
+     `(("liblo" ,liblo)
+       ("ntk" ,ntk)
+       ("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-1)
+       ("fftw" ,fftw)
+       ("minixml" ,minixml)
+       ("libxpm" ,libxpm)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://zynaddsubfx.sf.net/")
+    (synopsis "Software synthesizer")
+    (description
+     "ZynAddSubFX is a feature heavy realtime software synthesizer.  It offers
+three synthesizer engines, multitimbral and polyphonic synths, microtonal
+capabilities, custom envelopes, effects, etc.")
+    (license license:gpl2)))