summary refs log tree commit diff
path: root/pkgs/applications/audio
diff options
context:
space:
mode:
authorJi-Haeng Huh <jhhuh.note@gmail.com>2017-03-01 16:22:25 +0100
committerJörg Thalheim <joerg@thalheim.io>2017-03-03 16:33:16 +0100
commit85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16 (patch)
tree66b52a3399bbdf6aa8541caad7b1de767cbc753a /pkgs/applications/audio
parentbcef9f83c00905cfc95b00698a99ac2fa7702210 (diff)
downloadnixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar.gz
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar.bz2
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar.lz
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar.xz
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.tar.zst
nixpkgs-85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16.zip
eflite: init at 0.4.1
fixes #23336
Diffstat (limited to 'pkgs/applications/audio')
-rw-r--r--pkgs/applications/audio/eflite/buf-overflow.patch22
-rw-r--r--pkgs/applications/audio/eflite/cvs-update.patch98
-rw-r--r--pkgs/applications/audio/eflite/default.nix32
-rw-r--r--pkgs/applications/audio/eflite/format.patch11
-rw-r--r--pkgs/applications/audio/eflite/link.patch11
5 files changed, 174 insertions, 0 deletions
diff --git a/pkgs/applications/audio/eflite/buf-overflow.patch b/pkgs/applications/audio/eflite/buf-overflow.patch
new file mode 100644
index 00000000000..8873aa77b0e
--- /dev/null
+++ b/pkgs/applications/audio/eflite/buf-overflow.patch
@@ -0,0 +1,22 @@
+Fix buffer overflow
+
+--- eflite-0.4.1.orig/es.c
++++ eflite-0.4.1/es.c
+@@ -329,7 +329,7 @@
+   char *p;
+ 
+   p = getenv("HOME");
+-  sprintf(buf, "%s/.es.conf", p);
++  snprintf(buf, sizeof(buf), "%s/.es.conf", p);
+   fp = fopen(buf, "r");
+   if (!fp) fp = fopen("/etc/es.conf", "r");
+   if (!fp) return 1;
+@@ -438,7 +438,7 @@
+   char logname[200];
+ 
+   if ((flags & 0xffff) > DEBUG) return;
+-  sprintf(logname, "%s/es.log", getenv("HOME"));
++  snprintf(logname, sizeof(logname), "%s/es.log", getenv("HOME"));
+   va_start(arg, text);
+   vsnprintf(buf, 200, text, arg);
+   va_end(arg);
diff --git a/pkgs/applications/audio/eflite/cvs-update.patch b/pkgs/applications/audio/eflite/cvs-update.patch
new file mode 100644
index 00000000000..1ceace83aa5
--- /dev/null
+++ b/pkgs/applications/audio/eflite/cvs-update.patch
@@ -0,0 +1,98 @@
+--- eflite-0.4.1.orig/fs.c
++++ eflite-0.4.1/fs.c
+@@ -9,7 +9,7 @@
+  * GNU General Public License, as published by the Free Software
+  * Foundation.  Please see the file COPYING for details.
+  *
+- * $Id: fs.c,v 1.19 2007/01/18 23:58:42 mgorse Exp $
++ * $Id: fs.c,v 1.22 2008/03/05 15:21:43 mgorse Exp $
+  *
+  * Notes:
+  *
+@@ -505,19 +505,6 @@
+   }
+ }
+ 
+-
+-
+-static void play_audio_close(void *cancel)
+-{
+-  if (audiodev)
+-  {
+-	audio_drain(audiodev);
+-	close_audiodev();
+-	//	usleep(5000);
+-  }
+-}
+-
+-
+ static inline void determine_playlen(int speed, cst_wave *wptr, int type, int *pl, int *s)
+ {
+   int playlen, skip;
+@@ -573,12 +560,12 @@
+ 	type = ac[ac_head].type;
+ 	WAVE_UNLOCK;
+ 	pthread_testcancel();
+-	pthread_cleanup_push(play_audio_close, NULL);
+-
++	
+ 	es_log(2, "Opening audio device.");
+ 	/* We abuse the wave mutex here to avoid being canceled
+ 	 * while the audio device is being openned */
+ 	WAVE_LOCK;
++	assert(audiodev == NULL);
+ 	audiodev = audio_open(wptr->sample_rate, wptr->num_channels, CST_AUDIO_LINEAR16);
+ 	WAVE_UNLOCK;
+ 	if (audiodev == NULL)
+@@ -606,8 +593,8 @@
+ #ifdef DEBUG
+ 	  start_time = get_ticks_count();
+ #endif
+-	  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
+       audio_write(audiodev, wptr->samples + skip, playlen * 2);
++      pthread_testcancel();
+ 	  es_log(2, "Write took %.2f seconds.", get_ticks_count() - start_time);
+ 	}
+     es_log(2, "play: syncing.");
+@@ -617,16 +604,16 @@
+     audio_flush(audiodev);
+ 	pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
+ 	es_log(2, "Flush took %.2f seconds.", get_ticks_count() - start_time);
+-    es_log(2, "play: Closing audio device");
+-	close_audiodev();
+-	pthread_cleanup_pop(0);
+-	  pthread_testcancel();
+-	  TEXT_LOCK;
++    	pthread_testcancel();
++
++	TEXT_LOCK;
+     time_left -= ((float)playlen) / wptr->sample_rate;
+ 	pthread_cond_signal(&text_condition);
+ 	TEXT_UNLOCK;
+ 
+ 	WAVE_LOCK;
++	es_log(2, "play: Closing audio device");
++	close_audiodev();
+     ac_destroy(&ac[ac_head]);
+ 	ac_head++;
+ 	if (ac_head == ac_tail)
+@@ -894,6 +881,7 @@
+ 	WAVE_LOCK_NI;
+ 	pthread_cond_signal(&wave_condition); // necessary because we inhibit cancellation while waiting
+ 	pthread_cancel(wave_thread);
++	if (audiodev != NULL) audio_drain(audiodev);
+ 	WAVE_UNLOCK_NI;
+   }
+ 
+@@ -917,7 +905,10 @@
+   }
+ 	
+   /* At this point, no thread is running */
+-  
++
++  // Make sure audio device is closed
++  close_audiodev();
++
+   /* Free any wave data */
+   es_log(2, "s_clear: freeing wave data: %d", ac_tail);
+   for (i = 0; i < ac_tail; i++)
diff --git a/pkgs/applications/audio/eflite/default.nix b/pkgs/applications/audio/eflite/default.nix
new file mode 100644
index 00000000000..36fbdbc2cc9
--- /dev/null
+++ b/pkgs/applications/audio/eflite/default.nix
@@ -0,0 +1,32 @@
+{stdenv,fetchurl,flite,alsaLib,debug ? false}:
+
+stdenv.mkDerivation rec {
+  name = "eflite-${version}";
+  version = "0.4.1";
+  src = fetchurl {
+    url = "https://sourceforge.net/projects/eflite/files/eflite/${version}/${name}.tar.gz";
+    sha256 = "088p9w816s02s64grfs28gai3lnibzdjb9d1jwxzr8smbs2qbbci";
+  };
+  buildInputs = [ flite alsaLib ];
+  configureFlags = "flite_dir=${flite} --with-audio=alsa --with-vox=cmu_us_kal16";
+  patches = [
+    ./buf-overflow.patch
+    ./cvs-update.patch
+    ./link.patch
+    ./format.patch
+  ]; # Patches are taken from debian.
+  CFLAGS = stdenv.lib.optionalString debug " -DDEBUG=2";
+  meta = {
+    homepage = http://eflite.sourceforge.net;
+    description = "EFlite is a speech server for screen readers";
+    longDescription = ''
+      EFlite is a speech server for Emacspeak and other screen
+      readers that allows them to interface with Festival Lite,
+      a free text-to-speech engine developed at the CMU Speech
+      Center as an off-shoot of Festival.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ jhhuh ];
+  };
+}
diff --git a/pkgs/applications/audio/eflite/format.patch b/pkgs/applications/audio/eflite/format.patch
new file mode 100644
index 00000000000..d1a81aac480
--- /dev/null
+++ b/pkgs/applications/audio/eflite/format.patch
@@ -0,0 +1,11 @@
+--- eflite-0.4.1.orig/es.c	2017-03-02 14:38:36.009731423 +0100
++++ eflite-0.4.1/es.c	2017-03-02 14:39:06.285894934 +0100
+@@ -449,7 +449,7 @@
+   fclose(fp);
+   if (flags & LOG_STDERR)
+   {
+-    fprintf(stderr, buf);
++    fprintf(stderr, "%s", buf);
+     fprintf(stderr, "\n");
+   }
+ #endif
diff --git a/pkgs/applications/audio/eflite/link.patch b/pkgs/applications/audio/eflite/link.patch
new file mode 100644
index 00000000000..73c69da965c
--- /dev/null
+++ b/pkgs/applications/audio/eflite/link.patch
@@ -0,0 +1,11 @@
+--- eflite-0.4.1/Makefile.in	2007-01-19 01:01:09.000000000 +0100
++++ eflite-0.4.1-new/Makefile.in	2017-03-01 23:25:34.223615492 +0100
+@@ -34,7 +34,7 @@
+ 	$(CC) $(LDFLAGS) -o $@ $^ -lm $(LIBS) $(FLITE_LIBS) $(AUDIOLIBS)
+ 
+ fs.o: fs.c
+-	$(CC) $(CFLAGS) @AUDIODEFS@ -I. -I$(flite_include_dir) -DREGISTER_VOX=register_$(subst cmu_us_kal16,cmu_us_kal,$(FL_VOX)) -DSTANDALONE -DEFLITE -c -o $@ $<
++	$(CC) $(CFLAGS) @AUDIODEFS@ -I. -I$(flite_include_dir) -DREGISTER_VOX=register_$(FL_VOX) -DSTANDALONE -DEFLITE -c -o $@ $<
+ 
+ tone.o: tone.c
+ 	$(CC) $(CFLAGS) -I$(flite_include_dir) -DEFLITE -c -o $@ $<