changeset 4004:b2520034b62f

[gaim-migrate @ 4204] No more compiled-in sounds. Thanks, Robot101 committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Wed, 27 Nov 2002 18:39:53 +0000
parents b5947f2716a0
children 7aab0cc1ec78
files sounds/Makefile.am src/gaim.h src/sound.c
diffstat 3 files changed, 25 insertions(+), 259 deletions(-) [+]
line wrap: on
line diff
--- a/sounds/Makefile.am	Wed Nov 27 17:48:21 2002 +0000
+++ b/sounds/Makefile.am	Wed Nov 27 18:39:53 2002 +0000
@@ -1,17 +1,8 @@
-noinst_PROGRAMS = au2h
-
-au2h_SOURCES = au2h.c
-
-EXTRA_DIST = BuddyArrive.au BuddyLeave.au Send.au Receive.au RedAlert.au
-
-all: BuddyArrive.h BuddyLeave.h Send.h Receive.h RedAlert.h
+EXTRA_DIST =	arrive.wav \
+		leave.wav \
+		send.wav \
+		receive.wav \
+		redalert.wav
 
-clean distclean:
-	rm -f BuddyArrive.h BuddyLeave.h Send.h Receive.h RedAlert.h
-
-SUFFIXES = .au .h
-
-BuddyArrive.h BuddyLeave.h Send.h Receive.h RedAlert.h: au2h
-
-.au.h: au2h
-	./au2h $< $@
+soundsdir =	$(datadir)/sounds/gaim
+sounds_DATA =	$(EXTRA_DIST)
--- a/src/gaim.h	Wed Nov 27 17:48:21 2002 +0000
+++ b/src/gaim.h	Wed Nov 27 18:39:53 2002 +0000
@@ -331,8 +331,7 @@
 struct sound_struct {
 	char *label;
 	guint opt;
-	unsigned char *snd;
-	size_t snd_size;
+	char *def;
 };
 extern struct sound_struct sounds[];
 
--- a/src/sound.c	Wed Nov 27 17:48:21 2002 +0000
+++ b/src/sound.c	Wed Nov 27 18:39:53 2002 +0000
@@ -53,32 +53,27 @@
 #endif
 
 #include "gaim.h"
-#include "sounds/BuddyArrive.h"
-#include "sounds/BuddyLeave.h"
-#include "sounds/Send.h"
-#include "sounds/Receive.h"
-#include "sounds/RedAlert.h"
 
 gboolean mute_sounds = 0;
 
-/* description, option bit, default sound array, and it's size.   *
+/* description, option bit, default sound file                    *
  * if you want it to get displayed in the prefs dialog, it needs  *
  * to be added to the sound_order array in prefs.c, if not, and   *
  * it has no option bit, set it to 0. the order here has to match *
  * the defines in gaim.h.                               -Robot101 */
 struct sound_struct sounds[NUM_SOUNDS] = {
-	{N_("Buddy logs in"), OPT_SOUND_LOGIN, BuddyArrive, sizeof(BuddyArrive)},
-	{N_("Buddy logs out"), OPT_SOUND_LOGOUT, BuddyLeave, sizeof(BuddyLeave)},
-	{N_("Message received"), OPT_SOUND_RECV, Receive, sizeof(Receive)},
-	{N_("Message received begins conversation"), OPT_SOUND_FIRST_RCV, Receive, sizeof(Receive)},
-	{N_("Message sent"), OPT_SOUND_SEND, Send, sizeof(Send)},
-	{N_("Person enters chat"), OPT_SOUND_CHAT_JOIN, BuddyArrive, sizeof(BuddyArrive)},
-	{N_("Person leaves chat"), OPT_SOUND_CHAT_PART, BuddyLeave, sizeof(BuddyLeave)},
-	{N_("You talk in chat"), OPT_SOUND_CHAT_YOU_SAY, Send, sizeof(Send)},
-	{N_("Others talk in chat"), OPT_SOUND_CHAT_SAY, Receive, sizeof(Receive)},
+	{N_("Buddy logs in"), OPT_SOUND_LOGIN, "arrive.wav"},
+	{N_("Buddy logs out"), OPT_SOUND_LOGOUT, "leave.wav"},
+	{N_("Message received"), OPT_SOUND_RECV, "receive.wav"},
+	{N_("Message received begins conversation"), OPT_SOUND_FIRST_RCV, "receive.wav"},
+	{N_("Message sent"), OPT_SOUND_SEND, "send.wav"},
+	{N_("Person enters chat"), OPT_SOUND_CHAT_JOIN, "arrive.wav"},
+	{N_("Person leaves chat"), OPT_SOUND_CHAT_PART, "leave.wav"},
+	{N_("You talk in chat"), OPT_SOUND_CHAT_YOU_SAY, "send.wav"},
+	{N_("Others talk in chat"), OPT_SOUND_CHAT_SAY, "receive.wav"},
 	/* this isn't a terminator, it's the buddy pounce default sound event ;-) */
-	{NULL, 0, RedAlert, sizeof(RedAlert)},
-	{N_("Someone says your name in chat"), OPT_SOUND_CHAT_NICK, Receive, sizeof(Receive)}
+	{NULL, 0, "redalert.wav"},
+	{N_("Someone says your name in chat"), OPT_SOUND_CHAT_NICK, "redalert.wav"}
 };
 int sound_order[] = {
 	SND_BUDDY_ARRIVE, SND_BUDDY_LEAVE,
@@ -113,18 +108,6 @@
 	return 0;
 }
 
-
-static void play_audio(unsigned char *data, int size)
-{
-	int fd;
-
-	fd = open("/dev/audio", O_WRONLY | O_EXCL | O_NDELAY);
-	if (fd < 0)
-		return;
-	write(fd, data, size);
-	close(fd);
-}
-
 static void play_audio_file(char *file)
 {
 	/* here we can assume that we can write to /dev/audio */
@@ -157,67 +140,10 @@
 	return check_dev("/dev/audio");
 }
 
-
-#if defined(ESD_SOUND) || defined(ARTSC_SOUND)
-
-/*
-** This routine converts from ulaw to 16 bit linear.
-**
-** Craig Reese: IDA/Supercomputing Research Center
-** 29 September 1989
-**
-** References:
-** 1) CCITT Recommendation G.711  (very difficult to follow)
-** 2) MIL-STD-188-113,"Interoperability and Performance Standards
-**     for Analog-to_Digital Conversion Techniques,"
-**     17 February 1987
-**
-** Input: 8 bit ulaw sample
-** Output: signed 16 bit linear sample
-** Z-note -- this is from libaudiofile.  Thanks guys!
-*/
-
-static int _af_ulaw2linear(unsigned char ulawbyte)
-{
-	static int exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
-	int sign, exponent, mantissa, sample;
-
-	ulawbyte = ~ulawbyte;
-	sign = (ulawbyte & 0x80);
-	exponent = (ulawbyte >> 4) & 0x07;
-	mantissa = ulawbyte & 0x0F;
-	sample = exp_lut[exponent] + (mantissa << (exponent + 3));
-	if (sign != 0)
-		sample = -sample;
-
-	return (sample);
-}
-
-#endif
-
 #ifdef ESD_SOUND
 
 int esd_fd;
 
-static int play_esd(unsigned char *data, int size)
-{
-	int i;
-	guint16 *lineardata;
-
-	lineardata = g_malloc(size * 2);
-
-	for (i = 0; i < size; i++)
-		lineardata[i] = _af_ulaw2linear(data[i]);
-
-	write(esd_fd, lineardata, size * 2);
-
-	close(esd_fd);
-	g_free(lineardata);
-
-	return 1;
-
-}
-
 static int can_play_esd()
 {
 	esd_format_t format = ESD_BITS16 | ESD_STREAM | ESD_PLAY | ESD_MONO;
@@ -235,36 +161,6 @@
 
 #ifdef ARTSC_SOUND
 
-static int play_artsc(unsigned char *data, int size)
-{
-	arts_stream_t stream;
-	guint16 *lineardata;
-	int result = 1;
-	int error;
-	int i;
-
-	lineardata = g_malloc(size * 2);
-
-	for (i = 0; i < size; i++) {
-		lineardata[i] = _af_ulaw2linear(data[i]);
-	}
-
-	stream = arts_play_stream(8012, 16, 1, "gaim");
-
-	error = arts_write(stream, lineardata, size);
-	if (error < 0) {
-		result = 0;
-	}
-
-	arts_close_stream(stream);
-
-	g_free(lineardata);
-
-	arts_free();
-
-	return result;
-}
-
 static int can_play_artsc()
 {
 	int error;
@@ -343,48 +239,6 @@
 	return AuTrue;
 }
 
-
-static int play_nas(unsigned char *data, int size)
-{
-	AuDeviceID device = AuNone;
-	AuFlowID flow;
-	AuElement elements[3];
-	int i, n, w;
-
-	/* look for an output device */
-	for (i = 0; i < AuServerNumDevices(nas_serv); i++) {
-		if ((AuDeviceKind(AuServerDevice(nas_serv, i)) ==
-		     AuComponentKindPhysicalOutput) &&
-		    AuDeviceNumTracks(AuServerDevice(nas_serv, i)) == 1) {
-			device = AuDeviceIdentifier(AuServerDevice(nas_serv, i));
-			break;
-		}
-	}
-
-	if (device == AuNone)
-		return 0;
-
-	if (!(flow = AuCreateFlow(nas_serv, NULL)))
-		return 0;
-
-
-	AuMakeElementImportClient(&elements[0], 8012, AuFormatULAW8, 1, AuTrue, size, size / 2, 0, NULL);
-	AuMakeElementExportDevice(&elements[1], 0, device, 8012, AuUnlimitedSamples, 0, NULL);
-	AuSetElements(nas_serv, flow, AuTrue, 2, elements, NULL);
-
-	AuStartFlow(nas_serv, flow, NULL);
-
-	AuWriteElement(nas_serv, flow, 0, size, data, AuTrue, NULL);
-
-	AuRegisterEventHandler(nas_serv, AuEventHandlerIDMask, 0, flow, NasEventHandler, NULL);
-
-	while (1) {
-		AuHandleEvents(nas_serv);
-	}
-
-	return 1;
-}
-
 static int can_play_nas()
 {
 	if ((nas_serv = AuOpenServer(NULL, 0, NULL, 0, NULL, NULL)))
@@ -492,92 +346,10 @@
 #endif
 }
 
-void play(unsigned char *data, int size)
-{
-#ifndef _WIN32
-	int pid;
-#endif
-	if (sound_options & OPT_SOUND_BEEP) {
-		gdk_beep();
-		return;
-	}
-#ifndef _WIN32
-	else if ((sound_options & OPT_SOUND_CMD) && sound_cmd[0]) {
-		char command[4096];
-		FILE *child;
-
-		g_snprintf(command, sizeof(command), sound_cmd, "-");
-		
-		child=popen(command, "w");
-		if(child == NULL) {
-			perror("popen");
-			return;
- 	     }
- 
-		fwrite(data, size, 1, child);
-		pclose(child);
-		return;
-	}
-
-	pid = fork();
-	
-	if (pid < 0)
-		return;
-	else if (pid == 0) {
-		alarm(30);
-		
-#ifdef ESD_SOUND
-		/* ESD is our player of choice.  Are we OK to
-		 * go there? */
-		if (sound_options & OPT_SOUND_ESD) {
-			if (can_play_esd()) {
-				if (play_esd(data, size))
-					_exit(0);
-			}
-		}
-#endif
-
-#ifdef ARTSC_SOUND
-		/* ArtsC is the new second choice. */
-		if (sound_options & OPT_SOUND_ARTSC) {
-			if (can_play_artsc()) {
-				if (play_artsc(data, size))
-					_exit(0);
-			}
-		}
-#endif
-
-#ifdef NAS_SOUND
-		/* NAS is our second choice setup. */
-		if (sound_options & OPT_SOUND_NAS) {
-			if (can_play_nas()) {
-				if (play_nas(data, size))
-					_exit(0);
-			}
-		}
-#endif
-
-		/* Lastly, we can try just plain old /dev/audio */
-		if (sound_options & OPT_SOUND_NORMAL) {
-			if (can_play_audio()) {
-				play_audio(data, size);
-				_exit(0);
-			}
-		}
-
-		_exit(0);
-	}
-#else /* _WIN32 */
-	if (!PlaySound(data, 0, SND_ASYNC | SND_MEMORY))
-	  debug_printf("Error playing sound.");
-#endif
-}
-
 extern int logins_not_muted;
 
 void play_sound(int sound)
 {
-
 	if (mute_sounds)
 		return;
 	
@@ -597,7 +369,11 @@
 		if (sound_file[sound]) {
 			play_file(sound_file[sound]);
 		} else {
-			play(sounds[sound].snd, sounds[sound].snd_size);
+			gchar *filename = NULL;
+
+			filename = g_build_filename(DATADIR, "sounds", "gaim", sounds[sound].def, NULL);
+			play_file(filename);
+			g_free(filename);
 		}
 	}
 }