aboutsummaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authortobik <tobik@FreeBSD.org>2017-10-30 17:44:12 +0800
committertobik <tobik@FreeBSD.org>2017-10-30 17:44:12 +0800
commitd7645a3f1bd0b2e38819edbb58050ca90c5fb969 (patch)
tree4b8258de60c7e54761976d4a67485ecd5ae79fc6 /audio
parent292885c2fa211374a4d851058f3a1b65d4e8015b (diff)
downloadfreebsd-ports-gnome-d7645a3f1bd0b2e38819edbb58050ca90c5fb969.tar.gz
freebsd-ports-gnome-d7645a3f1bd0b2e38819edbb58050ca90c5fb969.tar.zst
freebsd-ports-gnome-d7645a3f1bd0b2e38819edbb58050ca90c5fb969.zip
New port: audio/cava
C.A.V.A. is a bar spectrum audio visualizer for the terminal using ALSA, PulseAudio, sndio or fifo buffer for input. This program is not intended for scientific use. It's written to look responsive and aesthetic when used to visualize music. WWW: https://karlstav.github.io/cava - Include a backport of an sndio input contributed by me PR: 223301 Submitted by: omar.polo@protonmail.com (based on)
Diffstat (limited to 'audio')
-rw-r--r--audio/Makefile1
-rw-r--r--audio/cava/Makefile46
-rw-r--r--audio/cava/distinfo3
-rw-r--r--audio/cava/files/patch-config.c11
-rw-r--r--audio/cava/files/patch-sndio176
-rw-r--r--audio/cava/pkg-descr7
-rw-r--r--audio/cava/pkg-plist2
7 files changed, 246 insertions, 0 deletions
diff --git a/audio/Makefile b/audio/Makefile
index 836b2bff529e..476330bad349 100644
--- a/audio/Makefile
+++ b/audio/Makefile
@@ -63,6 +63,7 @@
SUBDIR += cantata
SUBDIR += caps-lv2
SUBDIR += caps-plugins
+ SUBDIR += cava
SUBDIR += ccaudio2
SUBDIR += cd-console
SUBDIR += cd-discid
diff --git a/audio/cava/Makefile b/audio/cava/Makefile
new file mode 100644
index 000000000000..dee7a87a7b3e
--- /dev/null
+++ b/audio/cava/Makefile
@@ -0,0 +1,46 @@
+# $FreeBSD$
+
+PORTNAME= cava
+DISTVERSION= 0.6.0
+CATEGORIES= audio
+
+MAINTAINER= omar.polo@protonmail.com
+COMMENT= Console-based Audio Visualizer for ALSA, MPD, PulseAudio, and sndio
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+LIB_DEPENDS= libfftw3.so:math/fftw3 \
+ libiniparser.so:devel/iniparser
+
+USES= autoreconf libtool localbase ncurses
+USE_GITHUB= yes
+GH_ACCOUNT= karlstav
+
+GNU_CONFIGURE= yes
+CONFIGURE_ENV= ac_cv_lib_asound_snd_pcm_open=no
+
+INSTALL_TARGET= install-strip
+
+OPTIONS_DEFINE= PULSEAUDIO SNDIO
+OPTIONS_DEFAULT=PULSEAUDIO
+
+PULSEAUDIO_CONFIGURE_ENV_OFF= ac_cv_lib_pulse_simple_pa_simple_new=no
+PULSEAUDIO_LIB_DEPENDS= libpulse-simple.so:audio/pulseaudio \
+ libpulse.so:audio/pulseaudio \
+
+SNDIO_CONFIGURE_ENV_OFF= ac_cv_lib_sndio_sio_open=no
+SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
+
+post-patch:
+ @${REINPLACE_CMD} '/^cava_font/d' ${WRKSRC}/Makefile.am
+ @${REINPLACE_CMD} '/<alloca.h>/d' ${WRKSRC}/cava.c
+
+pre-configure:
+ @${ECHO_CMD} ${DISTVERSION} > ${WRKSRC}/version
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ ${INSTALL_DATA} ${WRKSRC}/example_files/config ${STAGEDIR}${EXAMPLESDIR}
+
+.include <bsd.port.mk>
diff --git a/audio/cava/distinfo b/audio/cava/distinfo
new file mode 100644
index 000000000000..1a33c786224e
--- /dev/null
+++ b/audio/cava/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1509139935
+SHA256 (karlstav-cava-0.6.0_GH0.tar.gz) = 42d51c6c283cd2b0f5125954ea8c61a12385703d1953ef9c40103402c7a744dc
+SIZE (karlstav-cava-0.6.0_GH0.tar.gz) = 40990
diff --git a/audio/cava/files/patch-config.c b/audio/cava/files/patch-config.c
new file mode 100644
index 000000000000..8059acc60d45
--- /dev/null
+++ b/audio/cava/files/patch-config.c
@@ -0,0 +1,11 @@
+--- config.c.orig 2017-08-26 08:52:40 UTC
++++ config.c
+@@ -378,7 +378,7 @@ if (p->smcount > 0) {
+ iniparser_getseckeys(ini, "eq", keys);
+ #endif
+ #ifdef LEGACYINIPARSER
+- char **keys = iniparser_getseckeys(ini, "eq");
++ char **keys = iniparser_getseckeys(ini, "eq", keys);
+ #endif
+ for (int sk = 0; sk < p->smcount; sk++) {
+ p->smooth[sk] = iniparser_getdouble(ini, keys[sk], 1);
diff --git a/audio/cava/files/patch-sndio b/audio/cava/files/patch-sndio
new file mode 100644
index 000000000000..47fff0abd39e
--- /dev/null
+++ b/audio/cava/files/patch-sndio
@@ -0,0 +1,176 @@
+https://github.com/karlstav/cava/commit/76fa7c132da25f5499a0f1b5dc4b416a34dad737
+
+diff --git a/cava.c b/cava.c
+index 76197cd..64dff25 100644
+--- cava.c
++++ cava.c
+@@ -53,6 +53,10 @@
+ #include "input/pulse.c"
+ #endif
+
++#ifdef SNDIO
++#include "input/sndio.c"
++#endif
++
+ #include <iniparser.h>
+
+ #include "config.h"
+@@ -287,6 +291,9 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co
+ #ifdef PULSE
+ strcat(supportedInput,", 'pulse'");
+ #endif
++ #ifdef SNDIO
++ strcat(supportedInput,", 'sndio'");
++ #endif
+
+ //fft: planning to rock
+ fftw_complex outl[M / 2 + 1][2];
+@@ -388,6 +395,13 @@ as of 0.4.0 all options are specified in config file, see in '/home/username/.co
+ }
+ #endif
+
++ #ifdef SNDIO
++ if (p.im == 4) {
++ thr_id = pthread_create(&p_thread, NULL, input_sndio, (void*)&audio);
++ audio.rate = 44100;
++ }
++ #endif
++
+ if (p.highcf > audio.rate / 2) {
+ cleanup();
+ fprintf(stderr,
+diff --git a/config.c b/config.c
+index 1da11cd..9f8465e 100644
+--- config.c
++++ config.c
+@@ -87,6 +87,13 @@ if (strcmp(inputMethod, "pulse") == 0) {
+ #endif
+
+ }
++if (strcmp(inputMethod, "sndio") == 0) {
++ p->im = 4;
++ #ifndef SNDIO
++ fprintf(stderr, "cava was built without sndio support\n");
++ exit(EXIT_FAILURE);
++ #endif
++}
+ if (p->im == 0) {
+ fprintf(stderr,
+ "input method '%s' is not supported, supported methods are: %s\n",
+@@ -325,6 +332,10 @@ inputMethod = (char *)iniparser_getstring(ini, "input:method", "fifo");
+ inputMethod = (char *)iniparser_getstring(ini, "input:method", "pulse");
+ #endif
+
++//setting sndio to defaualt if supported
++#ifdef SNDIO
++ inputMethod = (char *)iniparser_getstring(ini, "input:method", "sndio");
++#endif
+
+ #ifdef NCURSES
+ outputMethod = (char *)iniparser_getstring(ini, "output:method", "ncurses");
+@@ -402,6 +413,12 @@ if (strcmp(inputMethod, "pulse") == 0) {
+ p->im = 3;
+ p->audio_source = (char *)iniparser_getstring(ini, "input:source", "auto");
+ }
++#ifdef SNDIO
++if (strcmp(inputMethod, "sndio") == 0) {
++ p->im = 4;
++ p->audio_source = (char *)iniparser_getstring(ini, "input:source", SIO_DEVANY);
++}
++#endif
+
+ validate_config(supportedInput, params);
+ //iniparser_freedict(ini);
+diff --git a/configure.ac b/configure.ac
+index 6e3c291..92fa281 100644
+--- configure.ac
++++ configure.ac
+@@ -64,6 +64,19 @@ AC_CHECK_LIB(pulse-simple, pa_simple_new, have_pulse=yes, have_pulse=no)
+ AC_MSG_NOTICE([WARNING: No pusleaudio dev files found building without pulseaudio support])
+ fi
+
++dnl ######################
++dnl checking for sndio dev
++dnl ######################
++AC_CHECK_LIB(sndio, sio_open, have_sndio=yes, have_sndio=no)
++ if [[ $have_sndio = "yes" ]] ; then
++ LIBS="$LIBS -lsndio"
++ CPPFLAGS="$CPPFLAGS -DSNDIO"
++ fi
++
++ if [[ $have_sndio = "no" ]] ; then
++ AC_MSG_NOTICE([WARNING: No sndio dev files found building without sndio support])
++ fi
++
+ dnl ######################
+ dnl checking for math lib
+ dnl ######################
+diff --git a/input/sndio.c b/input/sndio.c
+new file mode 100644
+index 0000000..6142225
+--- /dev/null
++++ input/sndio.c
+@@ -0,0 +1,63 @@
++#include <assert.h>
++#include <errno.h>
++#include <sndio.h>
++#include <string.h>
++
++void* input_sndio(void* data)
++{
++ struct audio_data *audio = (struct audio_data *)data;
++ struct sio_par par;
++ struct sio_hdl *hdl;
++ int16_t buf[256];
++ unsigned int i, n, channels;
++
++ assert(audio->channels > 0);
++ channels = audio->channels;
++
++ sio_initpar(&par);
++ par.sig = 1;
++ par.bits = 16;
++ par.le = 1;
++ par.rate = 44100;
++ par.rchan = channels;
++ par.appbufsz = sizeof(buf) / channels;
++
++ if ((hdl = sio_open(audio->source, SIO_REC, 0)) == NULL) {
++ fprintf(stderr, __FILE__": Could not open sndio source: %s\n", audio->source);
++ exit(EXIT_FAILURE);
++ }
++
++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par) || par.sig != 1 || par.le != 1 || par.rate != 44100 || par.rchan != channels) {
++ fprintf(stderr, __FILE__": Could not set required audio parameters\n");
++ exit(EXIT_FAILURE);
++ }
++
++ if (!sio_start(hdl)) {
++ fprintf(stderr, __FILE__": sio_start() failed\n");
++ exit(EXIT_FAILURE);
++ }
++
++ n = 0;
++ while (audio->terminate != 1) {
++ if (sio_read(hdl, buf, sizeof(buf)) == 0) {
++ fprintf(stderr, __FILE__": sio_read() failed: %s\n", strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++
++ for (i = 0; i < sizeof(buf)/sizeof(buf[0]); i += 2) {
++ if (par.rchan == 1) {
++ // sndiod has already taken care of averaging the samples
++ audio->audio_out_l[n] = buf[i];
++ } else if (par.rchan == 2) {
++ audio->audio_out_l[n] = buf[i];
++ audio->audio_out_r[n] = buf[i + 1];
++ }
++ n = (n + 1) % 2048;
++ }
++ }
++
++ sio_stop(hdl);
++ sio_close(hdl);
++
++ return 0;
++}
diff --git a/audio/cava/pkg-descr b/audio/cava/pkg-descr
new file mode 100644
index 000000000000..09f188cb05be
--- /dev/null
+++ b/audio/cava/pkg-descr
@@ -0,0 +1,7 @@
+C.A.V.A. is a bar spectrum audio visualizer for the terminal using
+ALSA, PulseAudio, sndio or fifo buffer for input.
+
+This program is not intended for scientific use. It's written to look
+responsive and aesthetic when used to visualize music.
+
+WWW: https://karlstav.github.io/cava
diff --git a/audio/cava/pkg-plist b/audio/cava/pkg-plist
new file mode 100644
index 000000000000..e206a4ca5b2c
--- /dev/null
+++ b/audio/cava/pkg-plist
@@ -0,0 +1,2 @@
+bin/cava
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/config