summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-10-04 22:45:49 +0200
committerLudovic Courtès <ludo@gnu.org>2013-10-04 22:46:09 +0200
commit37bfb4488d3035be0d896b1fb55ed3734fa461f4 (patch)
tree9343e20e2f5d3b9eab1b3f11de545648e9e7f422 /gnu
parent37e6cdcdd73404ab4e7cc9cf1b9002127281487e (diff)
downloadguix-37bfb4488d3035be0d896b1fb55ed3734fa461f4.tar.gz
gnu: Add PulseAudio and related libraries.
* gnu/packages/pulseaudio.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/pulseaudio.scm187
1 files changed, 187 insertions, 0 deletions
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
new file mode 100644
index 0000000000..99da0de556
--- /dev/null
+++ b/gnu/packages/pulseaudio.scm
@@ -0,0 +1,187 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages pulseaudio)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'l:))
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages oggvorbis)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages avahi)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages algebra)
+  #:use-module ((gnu packages autotools) #:select (libtool))
+  #:use-module (gnu packages gdbm)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages check)
+  #:export (libsndfile
+            libsamplerate
+            json-c
+            pulseaudio))
+
+(define libsndfile
+  (package
+    (name "libsndfile")
+    (version "1.0.25")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://www.mega-nerd.com/libsndfile/files/libsndfile-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "10j8mbb65xkyl0kfy0hpzpmrp0jkr12c7mfycqipxgka6ayns0ar"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libvorbis" ,libvorbis)
+       ("libogg" ,libogg)
+       ("flac" ,flac)
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://www.mega-nerd.com/libsndfile/")
+    (synopsis "Reading and writing files containing sampled sound")
+    (description
+     "Libsndfile is a C library for reading and writing files containing
+sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format) through
+one standard library interface.
+
+It was designed to handle both little-endian (such as WAV) and
+big-endian (such as AIFF) data, and to compile and run correctly on
+little-endian (such as Intel and DEC/Compaq Alpha) processor systems as well
+as big-endian processor systems such as Motorola 68k, Power PC, MIPS and
+SPARC.  Hopefully the design of the library will also make it easy to extend
+for reading and writing new sound file formats.")
+    (license l:gpl2+)))
+
+(define libsamplerate
+  (package
+    (name "libsamplerate")                     ; aka. Secret Rabbit Code (SRC)
+    (version "0.1.8")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://www.mega-nerd.com/SRC/libsamplerate-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "01hw5xjbjavh412y63brcslj5hi9wdgkjd3h9csx5rnm8vglpdck"))))
+    (build-system gnu-build-system)
+    (inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("libsndfile" ,libsndfile)
+       ("fftw" ,fftw)))
+    (home-page "http://www.mega-nerd.com/SRC/index.html")
+    (synopsis "Audio sample rate conversion library")
+    (description
+     "Secret Rabbit Code (aka. libsamplerate) is a Sample Rate Converter for
+audio.  One example of where such a thing would be useful is converting audio
+from the CD sample rate of 44.1kHz to the 48kHz sample rate used by DAT
+players.
+
+SRC is capable of arbitrary and time varying conversions; from downsampling by
+a factor of 256 to upsampling by the same factor.  Arbitrary in this case means
+that the ratio of input and output sample rates can be an irrational
+number.  The conversion ratio can also vary with time for speeding up and
+slowing down effects.
+
+SRC provides a small set of converters to allow quality to be traded off
+against computation cost.  The current best converter provides a
+signal-to-noise ratio of 145dB with -3dB passband extending from DC to 96% of
+the theoretical best bandwidth for a given pair of input and output sample
+rates. ")
+    (license l:gpl2+)))
+
+(define json-c
+  (package
+    (name "json-c")
+    (version "0.11")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "https://s3.amazonaws.com/json-c_releases/releases/json-c-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "1324jja19jgsvcz9ij3nf4sgkrf4fg0ilw77vzqls3fw8m8wdpr8"))))
+    (build-system gnu-build-system)
+    (arguments '(#:parallel-build? #f
+                 #:parallel-tests? #f))
+    (home-page "https://github.com/json-c/json-c/wiki")
+    (synopsis "JSON implementation in C")
+    (description
+     "JSON-C implements a reference counting object model that allows you to
+easily construct JSON objects in C, output them as JSON formatted strings and
+parse JSON formatted strings back into the C representation of JSON objects.")
+    (license l:x11)))
+
+(define pulseaudio
+  (package
+    (name "pulseaudio")
+    (version "4.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-"
+                   version ".tar.xz"))
+             (sha256
+              (base32
+               "1bndz4l8jxyq3zq128gzp3gryxl6yjs66j2y1d7yabw2n5mv7kim"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--localstatedir=/var" ;"--sysconfdir=/etc"
+                           "--disable-oss-output")
+       #:phases (alist-cons-before
+                 'check 'pre-check
+                 (lambda _
+                   ;; 'tests/lock-autospawn-test.c' wants to create a file
+                   ;; under ~/.config/pulse.
+                   (setenv "HOME" (getcwd)))
+                 %standard-phases)))
+    (inputs
+     ;; TODO: Add optional inputs (GTK+?).
+     `(;; ("sbc" ,sbc)
+       ("alsa-lib" ,alsa-lib)
+       ("json-c" ,json-c)
+       ("speex" ,speex)
+       ("libsndfile" ,libsndfile)
+       ("libsamplerate" ,libsamplerate)
+       ("dbus" ,dbus)
+       ("glib" ,glib)
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)
+       ("m4" ,m4)
+       ("libtool" ,libtool)
+       ("fftw" ,fftw)
+       ("avahi" ,avahi)
+       ("check" ,check)))
+    (propagated-inputs
+     ;; 'libpulse*.la' contain `-lgdbm' and `-lcap', so propagate them.
+     `(;; ("libcap" ,libcap)
+       ("gdbm" ,gdbm)))
+    (home-page "http://www.pulseaudio.org/")
+    (synopsis "Sound server")
+    (description
+     "PulseAudio is a sound server.  It is basically a proxy for your sound applications.
+It allows you to do advanced operations on your sound data as it passes
+between your application and your hardware.  Things like transferring the
+audio to a different machine, changing the sample format or channel count and
+mixing several sounds into one are easily achieved using a sound server. ")
+
+    ;; PulseAudio is LGPLv2+, but some of the optional dependencies (GNU dbm,
+    ;; FFTW, etc.) are GPL'd, so the result is effectively GPLv2+.  See
+    ;; 'LICENSE' for details.
+    (license l:gpl2+)))