gnu: icecat: Update to 78.10.0-guix0-preview1 [security fixes].
[jackhill/guix/guix.git] / gnu / packages / mp3.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
3 ;;; Copyright © 2014, 2015, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
5 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
6 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
7 ;;; Copyright © 2017, 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
8 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
9 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
10 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
11 ;;;
12 ;;; This file is part of GNU Guix.
13 ;;;
14 ;;; GNU Guix is free software; you can redistribute it and/or modify it
15 ;;; under the terms of the GNU General Public License as published by
16 ;;; the Free Software Foundation; either version 3 of the License, or (at
17 ;;; your option) any later version.
18 ;;;
19 ;;; GNU Guix is distributed in the hope that it will be useful, but
20 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;;; GNU General Public License for more details.
23 ;;;
24 ;;; You should have received a copy of the GNU General Public License
25 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
26
27 (define-module (gnu packages mp3)
28 #:use-module ((guix licenses) #:prefix license:)
29 #:use-module (gnu packages)
30 #:use-module (gnu packages autotools)
31 #:use-module (gnu packages base)
32 #:use-module (gnu packages gcc)
33 #:use-module (gnu packages boost)
34 #:use-module (gnu packages cdrom)
35 #:use-module (gnu packages check)
36 #:use-module (gnu packages compression)
37 #:use-module (gnu packages gettext)
38 #:use-module (gnu packages ghostscript)
39 #:use-module (gnu packages ncurses)
40 #:use-module (gnu packages glib)
41 #:use-module (gnu packages gtk)
42 #:use-module (gnu packages pcre)
43 #:use-module (gnu packages pkg-config)
44 #:use-module (gnu packages python)
45 #:use-module (gnu packages python-web)
46 #:use-module (gnu packages python-xyz)
47 #:use-module (gnu packages xiph)
48 #:use-module (gnu packages pulseaudio)
49 #:use-module (gnu packages linux) ;alsa-lib
50 #:use-module (gnu packages video) ;ffmpeg
51 #:use-module (guix packages)
52 #:use-module (guix download)
53 #:use-module (guix git-download)
54 #:use-module (guix utils)
55 #:use-module (guix build-system gnu)
56 #:use-module (guix build-system python)
57 #:use-module (guix build-system cmake))
58
59 (define-public libmad
60 (package
61 (name "libmad")
62 (version "0.15.1b")
63 (source (origin
64 (method url-fetch)
65 (uri (string-append "mirror://sourceforge/mad/libmad/"
66 version "/libmad-"
67 version ".tar.gz"))
68 (sha256
69 (base32
70 "14460zhacxhswnzb36qfpd1f2wbk10qvksvm6wyq5hpvdgnw7ymv"))
71 (patches (search-patches "libmad-armv7-thumb-pt1.patch"
72 "libmad-armv7-thumb-pt2.patch"
73 "libmad-md_size.patch"
74 "libmad-length-check.patch"
75 "libmad-mips-newgcc.patch"))))
76 (build-system gnu-build-system)
77 (arguments
78 `(#:phases
79 (modify-phases %standard-phases
80 (add-before 'configure 'remove-unsupported-gcc-flags
81 (lambda _
82 ;; remove option that is not supported by gcc any more
83 (substitute* "configure" ((" -fforce-mem") ""))
84 #t))
85 ;; Normally one should not add a pkg-config file if one is not provided
86 ;; by upstream developers, but Audacity expects a pkg-config file for
87 ;; this package, and other major GNU/Linux distributions already provide
88 ;; such a file.
89 (add-after 'install 'install-pkg-config
90 (lambda* (#:key outputs #:allow-other-keys)
91 (let* ((out (assoc-ref outputs "out"))
92 (pkg-config-dir (string-append out "/lib/pkgconfig")))
93 (mkdir-p pkg-config-dir)
94 (with-output-to-file (string-append pkg-config-dir "/mad.pc")
95 (lambda _
96 (format #t
97 "prefix=~@*~a~@
98 libdir=${prefix}/lib~@
99 includedir=${prefix}/include~@
100
101 Name: libmad~@
102 Description:~@
103 Version: ~a~@
104 Libs: -L${libdir} -lmad~@
105 Cflags: -I${includedir}~%"
106 out ,version)))))))))
107 (synopsis "MPEG audio decoder")
108 (description
109 "MAD (MPEG Audio Decoder) supports MPEG-1 and the MPEG-2 extension to
110 lower sampling frequencies, as well as the de facto MPEG 2.5 format.
111 All three audio layers — Layer I, Layer II, and Layer III (i.e. MP3) — are
112 fully implemented.
113
114 This package contains the library.")
115 (license license:gpl2+)
116 (home-page "https://www.underbit.com/products/mad/")))
117
118 (define-public libid3tag
119 (package
120 (name "libid3tag")
121 (version "0.15.1b")
122 (source (origin
123 (method url-fetch)
124 (uri (string-append "mirror://sourceforge/mad/libid3tag/"
125 version "/libid3tag-"
126 version ".tar.gz"))
127 (sha256
128 (base32
129 "0lb1w883dc46dajbdvnia5870brl5lvnlk7g7y58y9wpg5p4znk3"))))
130 (build-system gnu-build-system)
131 (arguments
132 `(#:phases
133 (modify-phases %standard-phases
134 ;; Normally one should not add a pkg-config file if one is not provided
135 ;; by upstream developers, but Audacity expects a pkg-config file for
136 ;; this package, and other major GNU/Linux distributions already provide
137 ;; such a file.
138 (add-after 'install 'install-pkg-config
139 (lambda* (#:key outputs #:allow-other-keys)
140 (let* ((out (assoc-ref outputs "out"))
141 (pkg-config-dir (string-append out "/lib/pkgconfig")))
142 (mkdir-p pkg-config-dir)
143 (with-output-to-file (string-append pkg-config-dir "/id3tag.pc")
144 (lambda _
145 (format #t
146 "prefix=~@*~a~@
147 libdir=${prefix}/lib~@
148 includedir=${prefix}/include~@
149
150 Name: libid3tag~@
151 Description:~@
152 Version: ~a~@
153 Libs: -L${libdir} -lid3tag -lz~@
154 Cflags: -I${includedir}~%"
155 out ,version)))))))))
156 (inputs `(("zlib" ,zlib)))
157 (synopsis "Library for reading ID3 tags")
158 (description
159 "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various
160 versions of ID3v2.")
161 (license license:gpl2+)
162 (home-page "https://www.underbit.com/products/mad/")))
163
164 (define-public id3lib
165 (package
166 (name "id3lib")
167 (version "3.8.3")
168 (source (origin
169 (method url-fetch)
170 (uri (string-append "mirror://sourceforge/id3lib/id3lib/"
171 version "/id3lib-" version ".tar.gz"))
172 (sha256
173 (base32
174 "0yfhqwk0w8q2hyv1jib1008jvzmwlpsxvc8qjllhna6p1hycqj97"))
175 (modules '((guix build utils)))
176 ;; Don't use bundled zlib
177 (snippet '(begin (delete-file-recursively "zlib") #t))
178 (patches (search-patches "id3lib-CVE-2007-4460.patch"
179 "id3lib-UTF16-writing-bug.patch"))))
180 (build-system gnu-build-system)
181 (inputs `(("zlib" ,zlib)))
182 (arguments
183 `(#:phases
184 (modify-phases %standard-phases
185 (add-before 'configure 'apply-patches
186 ;; TODO: create a patch for origin instead?
187 (lambda _
188 (substitute* "configure"
189 (("iomanip.h") "")) ; drop check for unused header
190 ;; see http://www.linuxfromscratch.org/patches/downloads/id3lib/
191 (substitute* "include/id3/id3lib_strings.h"
192 (("include <string>") "include <cstring>\n#include <string>"))
193 (substitute* "include/id3/writers.h"
194 (("//\\#include <string.h>") "#include <cstring>"))
195 (substitute* "examples/test_io.cpp"
196 (("dami;") "dami;\nusing namespace std;"))
197 #t)))))
198 (synopsis "Library for reading, writing, and manipulating ID3v1 and ID3v2 tags")
199 (description
200 "Id3lib is a cross-platform software development library for reading,
201 writing, and manipulating ID3v1 and ID3v2 tags. It is an on-going project
202 whose primary goals are full compliance with the ID3v2 standard, portability
203 across several platforms, and providing a powerful and feature-rich API with
204 a highly stable and efficient implementation.")
205 (license license:lgpl2.0+)
206 (home-page "http://id3lib.sourceforge.net/")))
207
208 (define-public taglib
209 (package
210 (name "taglib")
211 (version "1.12")
212 (source (origin
213 (method git-fetch)
214 (uri (git-reference
215 (url "https://github.com/taglib/taglib")
216 (commit (string-append "v" version))))
217 (file-name (git-file-name name version))
218 (sha256
219 (base32
220 "0q7dkn5rh9v6b0scmcp2qmjv3iransafmpn6jvgid0yq75m2nqd2"))))
221 (build-system cmake-build-system)
222 (arguments
223 '(#:tests? #f ; Tests are not ran with BUILD_SHARED_LIBS on.
224 #:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
225 #:phases (modify-phases %standard-phases
226 (add-before 'configure 'adjust-zlib-ldflags
227 (lambda* (#:key inputs #:allow-other-keys)
228 ;; Make sure users of 'taglib-config --libs' get the -L
229 ;; flag for zlib.
230 (substitute* "CMakeLists.txt"
231 (("set\\(ZLIB_LIBRARIES_FLAGS -lz\\)")
232 (string-append "set(ZLIB_LIBRARIES_FLAGS \"-L"
233 (assoc-ref inputs "zlib")
234 "/lib -lz\")")))
235 #t)))))
236 (inputs `(("zlib" ,zlib)))
237 (home-page "https://taglib.org")
238 (synopsis "Library to access audio file meta-data")
239 (description
240 "TagLib is a C++ library for reading and editing the meta-data of several
241 popular audio formats. Currently it supports both ID3v1 and ID3v2 for MP3
242 files, Ogg Vorbis comments and ID3 tags and Vorbis comments in FLAC, MPC,
243 Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
244
245 ;; Dual-licensed: user may choose between LGPLv2.1 or MPLv1.1.
246 (license (list license:lgpl2.1 license:mpl1.1))))
247
248 (define-public mp3info
249 (package
250 (name "mp3info")
251 (version "0.8.5a")
252 (source (origin
253 (method url-fetch)
254 (uri (string-append
255 "https://ibiblio.org"
256 "/pub/linux/apps/sound/mp3-utils/mp3info/mp3info-"
257 version ".tgz"))
258 (sha256
259 (base32
260 "042f1czcs9n2sbqvg4rsvfwlqib2gk976mfa2kxlfjghx5laqf04"))
261 (modules '((guix build utils)))
262 (snippet
263 '(begin
264 (substitute* "Makefile"
265 (("/bin/rm") "rm")
266 (("/usr/bin/install") "install")
267 (("man/man1") "share/man/man1"))
268 #t))))
269 (build-system gnu-build-system)
270 (outputs '("out" "gui")) ;GTK+ interface in "gui"
271 (arguments
272 '(#:phases
273 (modify-phases %standard-phases
274 (replace 'configure
275 (lambda* (#:key outputs #:allow-other-keys)
276 (let ((out (assoc-ref outputs "out")))
277 (substitute* "Makefile"
278 (("prefix=.*")
279 (string-append "prefix := " out "\n"))))
280 #t))
281 (add-before 'install 'pre-install
282 (lambda* (#:key outputs #:allow-other-keys)
283 (let ((out (assoc-ref outputs "out")))
284 (mkdir-p (string-append out "/bin"))
285 (mkdir-p (string-append out "/share/man/man1")))
286 #t))
287 (add-after 'install 'post-install
288 (lambda* (#:key outputs #:allow-other-keys)
289 ;; Move the GTK+ interface to "gui".
290 (let ((out (assoc-ref outputs "out"))
291 (gui (assoc-ref outputs "gui")))
292 (mkdir-p (string-append gui "/bin"))
293 (rename-file (string-append out "/bin/gmp3info")
294 (string-append gui "/bin/gmp3info")))
295 #t)))
296 #:tests? #f))
297 (native-inputs
298 `(("pkg-config" ,pkg-config)))
299 (inputs
300 `(("gtk+" ,gtk+-2)
301 ("ncurses" ,ncurses)))
302 (home-page "https://www.ibiblio.org/mp3info/")
303 (synopsis "MP3 technical info viewer and ID3 1.x tag editor")
304 (description
305 "MP3Info is a little utility used to read and modify the ID3 tags of MP3
306 files. MP3Info can also display various technical aspects of an MP3 file
307 including playing time, bit-rate, sampling frequency and other attributes in a
308 pre-defined or user-specifiable output format.")
309 (license license:gpl2+)))
310
311 (define-public libmp3splt
312 (package
313 (name "libmp3splt")
314 (version "0.9.2")
315 (source (origin
316 (method url-fetch)
317 (uri (string-append "mirror://sourceforge/mp3splt/libmp3splt/"
318 version "/libmp3splt-"
319 version ".tar.gz"))
320 (sha256
321 (base32
322 "1p1mn2hsmj5cp40fnc8g1yfvk72p8pjxi866gjdkgjsqrr7xdvih"))))
323 (build-system gnu-build-system)
324 (inputs `(("flac" ,flac)
325 ("libid3tag" ,libid3tag)
326 ("libmad" ,libmad)
327 ("libogg" ,libogg)
328 ("libltdl" ,libltdl)
329 ("libvorbis" ,libvorbis)
330 ("pcre" ,pcre)))
331 (native-inputs
332 `(("pkg-config" ,pkg-config)))
333 (synopsis "Library for splitting mp3 and ogg vorbis files")
334 (description
335 "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
336 and an end time position, without decoding. For splitting an album, one may
337 select split points and file names manually or obtain them automatically from
338 CDDB (internet or a local file) or from .cue files. The tool also supports
339 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
340
341 This package contains the library.")
342 (license license:gpl2+)
343 (home-page "http://mp3splt.sourceforge.net/mp3splt_page/home.php")))
344
345 (define-public mp3splt
346 (package
347 (name "mp3splt")
348 (version "2.6.2")
349 (source (origin
350 (method url-fetch)
351 (uri (string-append "mirror://sourceforge/mp3splt/mp3splt/"
352 version "/mp3splt-"
353 version ".tar.gz"))
354 (sha256
355 (base32
356 "1aiv20gypb6r84qabz8gblk8vi42cg3x333vk2pi3fyqvl82phry"))))
357 (build-system gnu-build-system)
358 (native-inputs `(("pkg-config" ,pkg-config)))
359 (inputs `(("libmp3splt" ,libmp3splt)))
360 (synopsis "Utility for splitting mp3 and ogg vorbis files")
361 (description
362 "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
363 and an end time position, without decoding. For splitting an album, one may
364 select split points and file names manually or obtain them automatically from
365 CDDB (internet or a local file) or from .cue files. The tool also supports
366 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
367
368 This package contains the binary.")
369 (license license:gpl2+)
370 (home-page "http://mp3splt.sourceforge.net/mp3splt_page/home.php")))
371
372 (define-public mpg123
373 (package
374 (name "mpg123")
375 (version "1.26.5")
376 (source
377 (origin
378 (method url-fetch)
379 (uri (list (string-append "mirror://sourceforge/mpg123/mpg123/"
380 version "/mpg123-" version ".tar.bz2")
381 (string-append
382 "https://www.mpg123.org/download/mpg123-"
383 version ".tar.bz2")))
384 (sha256
385 (base32 "01pgcqjbbi2r7nlg5118bkivl0gkv0hq0cw7v4vpxgimv7h9fajh"))))
386 (build-system gnu-build-system)
387 (arguments '(#:configure-flags '("--with-default-audio=pulse")))
388 (native-inputs
389 `(("pkg-config" ,pkg-config)))
390 (inputs
391 `(("alsa-lib" ,alsa-lib)
392 ("pulseaudio" ,pulseaudio)))
393 (home-page "https://www.mpg123.org/")
394 (synopsis "Console MP3 player and decoder library")
395 (description
396 "Mpg123 is a real time MPEG 1.0/2.0/2.5 audio player/decoder for layers
397 1,2 and 3 (MPEG 1.0 layer 3 aka MP3 most commonly tested). It comes with a
398 command-line tool as well as a C library, libmpg123.")
399 (license license:lgpl2.1)))
400
401 (define-public mpg321
402 (package
403 (name "mpg321")
404 (version "0.3.2")
405 (source (origin
406 (method url-fetch)
407 (uri (string-append "mirror://sourceforge/mpg321/mpg321/"
408 version "/mpg321_" version ".orig.tar.gz"))
409 (file-name (string-append "mpg321-" version ".tar.gz"))
410 (sha256
411 (base32
412 "0ki8mh76bbmdh77qsiw682dvi8y468yhbdabqwg05igmwc1wqvq5"))
413 (patches
414 (search-patches "mpg321-CVE-2019-14247.patch"))))
415 (build-system gnu-build-system)
416 (arguments '(#:configure-flags '("--disable-alsa")))
417 (inputs
418 `(("zlib" ,zlib)
419 ("libmad" ,libmad)
420 ("libid3tag" ,libid3tag)
421 ("libao" ,ao)))
422 (home-page "http://mpg321.sourceforge.net/")
423 (synopsis "Command-line MP3 player")
424 (description "Mpg321 is a command-line mp3 player. mpg321 is used for
425 frontends, as an mp3 player and as an mp3 to wave file decoder (primarily for
426 use with CD-recording software).")
427 (license license:gpl2)))
428
429 (define-public lame
430 (package
431 (name "lame")
432 (version "3.100")
433 (source (origin
434 (method url-fetch)
435 (uri (string-append "mirror://sourceforge/lame/lame/"
436 (version-major+minor version) "/lame-"
437 version ".tar.gz"))
438 (sha256
439 (base32
440 "07nsn5sy3a8xbmw1bidxnsj5fj6kg9ai04icmqw40ybkp353dznx"))))
441 (build-system gnu-build-system)
442 (arguments
443 `(#:phases
444 (modify-phases %standard-phases
445 (add-after 'install 'install-pkg-config
446 (lambda* (#:key outputs #:allow-other-keys)
447 (let* ((out (assoc-ref outputs "out"))
448 (pkg-config-dir (string-append out "/lib/pkgconfig")))
449 (mkdir-p pkg-config-dir)
450 (with-output-to-file (string-append pkg-config-dir "/lame.pc")
451 (lambda _
452 (format #t
453 "prefix=~@*~a~@
454 libdir=${prefix}/lib~@
455 includedir=${prefix}/include~@
456
457 Name: lame~@
458 Description:~@
459 Version: ~a~@
460 Libs: -L${libdir} -lmp3lame~@
461 Cflags: -I${includedir}~%"
462 out ,version)))))))))
463 (home-page "http://lame.sourceforge.net/")
464 (synopsis "MPEG Audio Layer III (MP3) encoder")
465 (description "LAME is a high quality MPEG Audio Layer III (MP3) encoder.")
466 (license license:lgpl2.0)))
467
468 (define-public ripperx
469 (package
470 (name "ripperx")
471 (version "2.8.0")
472 (source (origin
473 (method url-fetch)
474 (uri (string-append "mirror://sourceforge/ripperx/ripperx/"
475 version "/ripperx-"
476 version ".tar.bz2"))
477 (sha256
478 (base32
479 "1ss3c1a5hx6c99q1cryxg0jhbnbdj6ga9xyz0dzlz9qhzg5qswfs"))
480 (patches (search-patches "ripperx-missing-file.patch"))))
481 (build-system gnu-build-system)
482 (propagated-inputs
483 `(("gs-fonts" ,gs-fonts)
484 ("cdparanoia" ,cdparanoia)
485 ("flac" ,flac)
486 ("lame" ,lame)
487 ("vorbis-tools" ,vorbis-tools)))
488 (inputs
489 `(("glib" ,glib)
490 ("gtk+" ,gtk+-2)
491 ("id3lib" ,id3lib)
492 ("taglib" ,taglib)))
493 (native-inputs
494 `(("pkg-config" ,pkg-config)))
495 (synopsis "GTK program to rip and encode CD audio tracks")
496 (description
497 "RipperX is a GTK program to rip CD audio tracks and encode them to the
498 Ogg, MP3, or FLAC formats. Its goal is to be easy to use, requiring only
499 a few mouse clicks to convert an entire album. It supports CDDB lookups
500 for album and track information.")
501 (license license:gpl2)
502 (home-page "https://sourceforge.net/projects/ripperx/")))
503
504 (define-public libmpcdec
505 (package
506 (name "libmpcdec")
507 (version "1.2.6")
508 (source (origin
509 (method url-fetch)
510 (uri (string-append
511 "https://files.musepack.net/source/libmpcdec-"
512 version ".tar.bz2"))
513 (sha256
514 (base32
515 "1a0jdyga1zfi4wgkg3905y6inghy3s4xfs5m4x7pal08m0llkmab"))))
516 (build-system gnu-build-system)
517 (synopsis "Decoding library for the Musepack audio format")
518 (description
519 "This library supports decoding of the Musepack (MPC) audio compression
520 format.")
521 (license license:bsd-3)
522 (home-page "https://musepack.net")))
523
524 (define-public mpc123
525 (package
526 (name "mpc123")
527 (version "0.2.4")
528 (source (origin
529 (method url-fetch)
530 (uri (list (string-append "mirror://sourceforge/mpc123/version%20"
531 version "/mpc123-" version ".tar.gz")
532 (string-append "mirror://debian/pool/main/m/" name
533 "/" name "_" version ".orig.tar.gz")))
534 (sha256
535 (base32
536 "0sf4pns0245009z6mbxpx7kqy4kwl69bc95wz9v23wgappsvxgy1"))
537 (patches (search-patches "mpc123-initialize-ao.patch"))))
538 (build-system gnu-build-system)
539 (arguments
540 '(#:phases
541 (modify-phases %standard-phases
542 (replace 'configure
543 (lambda _
544 (substitute* "Makefile"
545 (("CC[[:blank:]]*:=.*")
546 "CC := gcc\n"))))
547 (replace 'install
548 (lambda* (#:key outputs #:allow-other-keys)
549 (let* ((out (assoc-ref outputs "out"))
550 (bin (string-append out "/bin")))
551 (install-file "mpc123" bin)))))
552 #:tests? #f))
553 (native-inputs
554 `(("gettext" ,gettext-minimal)))
555 (inputs
556 `(("libao" ,ao)
557 ("libmpcdec" ,libmpcdec)))
558 (home-page "https://github.com/bucciarati/mpc123")
559 (synopsis "Audio player for Musepack-formatted files")
560 (description
561 "Mpc123 is a command-line player for files in the Musepack audio
562 compression format (.mpc files).")
563 (license license:gpl2+)))
564
565 (define-public eyed3
566 (package
567 (name "eyed3")
568 (version "0.8.12")
569 (source
570 (origin
571 (method url-fetch)
572 (uri (pypi-uri "eyeD3" version))
573 (sha256
574 (base32 "0vabr7hh6vy1w8gn35vmx9qwiyrfv734d5ahifg7x3pv0c5fqkp5"))))
575 (build-system python-build-system)
576 (arguments
577 `(#:tests? #f)) ; the required test data contains copyrighted material
578 (propagated-inputs
579 `(("python-grako" ,python-grako)
580 ("python-magic" ,python-magic)
581 ("python-pathlib" ,python-pathlib)
582 ("python-six" ,python-six)))
583 (synopsis "MP3 tag ID3 metadata editor")
584 (description "eyeD3 is a Python tool for working with audio files,
585 specifically mp3 files containing ID3 metadata (i.e. song info). It provides a
586 command-line tool (eyeD3) and a Python library (import eyed3) that can be used
587 to write your own applications or plugins that are callable from the
588 command-line tool.")
589 (home-page "https://eyed3.readthedocs.io/en/latest/")
590 (license license:gpl2+)))
591
592 (define-public chromaprint
593 (package
594 (name "chromaprint")
595 (version "1.5.0")
596 (source (origin
597 (method url-fetch)
598 (uri (string-append
599 "https://github.com/acoustid/chromaprint/releases/download/v"
600 version "/chromaprint-" version ".tar.gz"))
601 (sha256
602 (base32
603 "0sknmyl5254rc55bvkhfwpl4dfvz45xglk1rq8zq5crmwq058fjp"))))
604 (build-system cmake-build-system)
605 (arguments
606 `(#:tests? #f ; tests require googletest *sources*
607 ;;#:configure-flags '("-DBUILD_TESTS=ON") ; for building the tests
608 #:configure-flags '("-DBUILD_TOOLS=ON") ; for fpcalc
609 #:test-target "check"))
610 (inputs
611 ;; requires one of FFmpeg (prefered), FFTW3 or vDSP
612 ;; use the same ffmpeg version as for acoustid-fingerprinter
613 `(("ffmpeg" ,ffmpeg)
614 ("boost" ,boost)))
615 (home-page "https://acoustid.org/chromaprint")
616 (synopsis "Audio fingerprinting library")
617 (description "Chromaprint is a library for calculating audio
618 fingerprints which are used by the Acoustid service. Its main purpose
619 is to provide an accurate identifier for record tracks.")
620 (license license:lgpl2.1+)))
621
622 (define-public python-audioread
623 (package
624 (name "python-audioread")
625 (version "2.1.9")
626 (source
627 (origin
628 (method url-fetch)
629 (uri (pypi-uri "audioread" version))
630 (sha256
631 (base32 "129hab8x9sb3plff2bkq4xnzc3i8k9rgcm1a36l813kc0m10wj53"))))
632 (build-system python-build-system)
633 (arguments `(#:tests? #f)) ; there is no "audiofile" fixture
634 (native-inputs
635 `(("python-pytest" ,python-pytest)
636 ("python-pytest-runner" ,python-pytest-runner)))
637 (home-page "https://github.com/sampsyo/audioread")
638 (synopsis "Decode audio files using whichever backend is available")
639 (description
640 "This package provides a Python library for audo decoding. It uses
641 whatever audio backend is available, such as GStreamer, Core Audio, MAD,
642 FFmpeg, etc.")
643 (license license:expat)))
644
645 (define-public python-pyacoustid
646 (package
647 (name "python-pyacoustid")
648 (version "1.1.7")
649 (source
650 (origin
651 (method url-fetch)
652 (uri (pypi-uri "pyacoustid" version))
653 (sha256
654 (base32
655 "1zan6c22ca6sjy0g9ajwjp6mkzw7jv8r3n7jzska09a6x254lf87"))))
656 (build-system python-build-system)
657 (propagated-inputs
658 `(("python-audioread" ,python-audioread)
659 ("python-requests" ,python-requests)))
660 (home-page "https://github.com/sampsyo/pyacoustid")
661 (synopsis "Bindings for Chromaprint acoustic fingerprinting")
662 (description
663 "This package provides bindings for the Chromaprint acoustic
664 fingerprinting library and the Acoustid API.")
665 (license license:expat)))
666
667 (define-public python-pytaglib
668 (package
669 (name "python-pytaglib")
670 (version "1.4.6")
671 (source
672 (origin
673 (method url-fetch)
674 (uri (pypi-uri "pytaglib" version))
675 (sha256
676 (base32
677 "0li970qslfymz4vk1wrij2nfqw3l15cpc3fjjci48mpvg17gbnhn"))
678 ;; Delete file generated by Cython.
679 (modules '((guix build utils)))
680 (snippet
681 '(begin
682 (delete-file "src/taglib.cpp")))))
683 (build-system python-build-system)
684 (arguments
685 '(#:phases
686 (modify-phases %standard-phases
687 ;; Ensure that the Cython file is regenerated.
688 (add-after 'unpack 'setup-environment
689 (lambda _
690 (setenv "PYTAGLIB_CYTHONIZE" "1"))))))
691 (native-inputs
692 `(("python-cython" ,python-cython)
693 ("python-pytest" ,python-pytest)))
694 (inputs
695 `(("taglib" ,taglib)))
696 (home-page
697 "https://github.com/supermihi/pytaglib")
698 (synopsis
699 "Python bindings for taglib")
700 (description
701 "This package is a Python audio tagging library. It is
702 cross-platform, works with all Python versions, and is very
703 simple to use yet fully featured.")
704 (license license:gpl3)))