summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/text.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/src/common/text.c b/src/common/text.c
index 4fad92ec..98f0bfba 100644
--- a/src/common/text.c
+++ b/src/common/text.c
@@ -47,6 +47,10 @@
 #include <windows.h>
 #endif
 
+#ifdef USE_LIBCANBERRA
+#include <canberra.h>
+#endif
+
 struct pevt_stage1
 {
 	int len;
@@ -2198,28 +2202,6 @@ sound_beep (session *sess)
 	}
 }
 
-static char *
-sound_find_command (void)
-{
-	/* some sensible unix players. You're bound to have one of them */
-	static const char * const progs[] = {"play", "paplay", "aplay", "esdplay", "artsplay", NULL};
-	char *cmd;
-	int i = 0;
-
-	if (prefs.hex_sound_command[0])
-		return g_strdup (prefs.hex_sound_command);
-
-	while (progs[i])
-	{
-		cmd = g_find_program_in_path (progs[i]);
-		if (cmd)
-			return cmd;
-		i++;
-	}
-
-	return NULL;
-}
-
 void
 sound_play (const char *file, gboolean quiet)
 {
@@ -2227,8 +2209,12 @@ sound_play (const char *file, gboolean quiet)
 	char *wavfile;
 #ifndef WIN32
 	char *cmd;
+#ifdef USE_LIBCANBERRA
+	ca_context *con;
+#endif
 #endif
 
+
 	/* the pevents GUI editor triggers this after removing a soundfile */
 	if (!file[0])
 	{
@@ -2254,7 +2240,17 @@ sound_play (const char *file, gboolean quiet)
 #ifdef WIN32
 		PlaySound (wavfile, NULL, SND_NODEFAULT|SND_FILENAME|SND_ASYNC);
 #else
-		cmd = sound_find_command ();
+#ifdef USE_LIBCANBERRA
+		ca_context_create (&con);
+		/* TODO: Volume setting? */
+		if (ca_context_play (con, 0,
+						CA_PROP_MEDIA_FILENAME, wavfile, NULL) == 0)
+		{
+			g_free (wavfile);
+			return;
+		}
+#endif
+		cmd = g_find_program_in_path ("play");
 
 		if (cmd)
 		{