From 22d0223ae662590bbed20384d92580b43575de93 Mon Sep 17 00:00:00 2001 From: Andreas Frisch Date: Fri, 3 Jun 2016 12:48:33 +0200 Subject: [PATCH] add touch event sounds using libcanberra --- Makefile | 4 +-- default.ini | 7 ++++- ding.ogg | Bin 0 -> 6040 bytes error.ogg | Bin 0 -> 6644 bytes photobooth.c | 76 +++++++++++++++++++++++++++++++++++++++------------ 5 files changed, 66 insertions(+), 21 deletions(-) create mode 100644 ding.ogg create mode 100644 error.ogg diff --git a/Makefile b/Makefile index 3d728c3..efe01bf 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CC ?= gcc PKGCONFIG = $(shell which pkg-config) -CFLAGS = $(shell $(PKGCONFIG) --cflags gtk+-3.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-app-1.0 libgphoto2 libcurl x11) -Wl,--export-dynamic -rdynamic -g -LIBS = $(shell $(PKGCONFIG) --libs gtk+-3.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-app-1.0 libgphoto2 gmodule-export-2.0 libcurl x11) +CFLAGS = $(shell $(PKGCONFIG) --cflags gtk+-3.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-app-1.0 libgphoto2 libcurl x11 libcanberra-gtk3) -Wl,--export-dynamic -rdynamic -g +LIBS = $(shell $(PKGCONFIG) --libs gtk+-3.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-app-1.0 libgphoto2 gmodule-export-2.0 libcurl x11 libcanberra-gtk3) GLIB_COMPILE_RESOURCES = $(shell $(PKGCONFIG) --variable=glib_compile_resources gio-2.0) SRC = photobooth.c photoboothwin.c focus.c photoboothled.c diff --git a/default.ini b/default.ini index 27777f8..7032134 100644 --- a/default.ini +++ b/default.ini @@ -1,6 +1,5 @@ [general] countdown = 6 -countdown_audio_file = beep.m4a template = photobooth.ui stylesheet = photobooth.css overlay_image = overlay_print_rainbows.png @@ -11,6 +10,12 @@ screensaver_timeout = 30 #screensaver_file can be image, video, audio (or freezes preview if omitted) screensaver_file = /home/fraxinas/Desktop/Troye Sivan - Youth (1080p AAC).mkv +[sounds] +countdown_audio_file = beep.m4a +# event sounds must be in ogg format +ack_sound = ding.ogg +error_sound = error.ogg + [printer] backend = mitsu9550 copies_min = 1 diff --git a/ding.ogg b/ding.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4e3dfd949035069688cf446b099df85a04debc6e GIT binary patch literal 6040 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 a^G#0RwV9kBPWT&Oqw4;#Gx6X@UGSf!MQ!u| literal 0 HcmV?d00001 diff --git a/error.ogg b/error.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5483459a2f2e2eb16c0721574613d1146d309242 GIT binary patch literal 6644 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 #include #include +// #ifdef HAVE_LIBCANBERRA +#include +// #endif #include "photobooth.h" #include "photoboothwin.h" #include "photoboothled.h" @@ -74,6 +77,8 @@ struct _PhotoBoothPrivate GstElement *screensaver_playbin; gchar *countdown_audio_uri; + gchar *error_sound; + gchar *ack_sound; gchar *screensaver_uri; gint screensaver_timeout; @@ -101,6 +106,8 @@ struct _PhotoBoothPrivate #define PREVIEW_HEIGHT 424 #define PT_PER_IN 72 +typedef enum { NONE, ACK_SOUND, ERROR_SOUND } sound_t; + G_DEFINE_TYPE_WITH_PRIVATE (PhotoBooth, photo_booth, GTK_TYPE_APPLICATION); GST_DEBUG_CATEGORY_STATIC (photo_booth_debug); @@ -238,6 +245,8 @@ static void photo_booth_init (PhotoBooth *pb) priv->printer_settings = NULL; priv->overlay_image = NULL; priv->countdown_audio_uri = NULL; + priv->ack_sound = NULL; + priv->error_sound = NULL; priv->screensaver_uri = NULL; priv->screensaver_timeout = DEFAULT_SCREENSAVER_TIMEOUT; priv->screensaver_timeout_id = 0; @@ -323,6 +332,8 @@ static void photo_booth_dispose (GObject *object) if (priv->printer_settings != NULL) g_object_unref (priv->printer_settings); g_free (priv->countdown_audio_uri); + g_free (priv->ack_sound); + g_free (priv->error_sound); g_free (priv->screensaver_uri); g_free (priv->print_icc_profile); g_free (priv->cam_icc_profile); @@ -378,22 +389,6 @@ void photo_booth_load_settings (PhotoBooth *pb, const gchar *filename) G_template_filename = g_key_file_get_string (gkf, "general", "template", NULL); G_stylesheet_filename = g_key_file_get_string (gkf, "general", "stylesheet", NULL); priv->countdown = g_key_file_get_integer (gkf, "general", "countdown", NULL); - gchar *audiofile = g_key_file_get_string (gkf, "general", "countdown_audio_file", NULL); - if (audiofile) - { - gchar *audioabsfilename; - if (!g_path_is_absolute (audiofile)) - { - gchar *cdir = g_get_current_dir (); - audioabsfilename = g_strdup_printf ("%s/%s", cdir, audiofile); - g_free (cdir); - } - else - audioabsfilename = g_strdup (audiofile); - priv->countdown_audio_uri = g_filename_to_uri (audioabsfilename, NULL, NULL); - g_free (audiofile); - g_free (audioabsfilename); - } priv->overlay_image = g_key_file_get_string (gkf, "general", "overlay_image", NULL); priv->screensaver_timeout = g_key_file_get_integer (gkf, "general", "screensaver_timeout", NULL); gchar *screensaverfile = g_key_file_get_string (gkf, "general", "screensaver_file", NULL); @@ -430,6 +425,27 @@ void photo_booth_load_settings (PhotoBooth *pb, const gchar *filename) g_free (save_path_template); } } + if (g_key_file_has_group (gkf, "sounds")) + { + gchar *countdownaudiofile = g_key_file_get_string (gkf, "sounds", "countdown_audio_file", NULL); + if (countdownaudiofile) + { + gchar *audioabsfilename; + if (!g_path_is_absolute (countdownaudiofile)) + { + gchar *cdir = g_get_current_dir (); + audioabsfilename = g_strdup_printf ("%s/%s", cdir, countdownaudiofile); + g_free (cdir); + } + else + audioabsfilename = g_strdup (countdownaudiofile); + priv->countdown_audio_uri = g_filename_to_uri (audioabsfilename, NULL, NULL); + g_free (countdownaudiofile); + g_free (audioabsfilename); + } + priv->ack_sound = g_key_file_get_string (gkf, "sounds", "ack_sound", NULL); + priv->error_sound = g_key_file_get_string (gkf, "sounds", "error_sound", NULL); + } if (g_key_file_has_group (gkf, "printer")) { priv->printer_backend = g_key_file_get_string (gkf, "printer", "backend", NULL); @@ -1180,6 +1196,23 @@ static gboolean photo_booth_screensaver_stop (PhotoBooth *pb) return FALSE; } +void _play_event_sound (PhotoBoothPrivate *priv, sound_t sound) +{ + gchar *soundfile = NULL; + switch (sound) { + case ACK_SOUND: + soundfile = priv->ack_sound; + break; + case ERROR_SOUND: + soundfile = priv->error_sound; + break; + default: + break; + } + if (soundfile) + ca_context_play (ca_gtk_context_get(), 0, CA_PROP_MEDIA_FILENAME, soundfile, NULL); +} + void photo_booth_background_clicked (GtkWidget *widget, GdkEventButton *event, PhotoBoothWindow *win) { PhotoBooth *pb = PHOTO_BOOTH_FROM_WINDOW (win); @@ -1206,25 +1239,30 @@ void photo_booth_background_clicked (GtkWidget *widget, GdkEventButton *event, P case PB_STATE_PREVIEW_COOLDOWN: { GST_DEBUG_OBJECT (pb, "BUSY... ignore event!"); + _play_event_sound (priv, ERROR_SOUND); break; } case PB_STATE_ASK_PRINT: case PB_STATE_ASK_UPLOAD: { // photo_booth_button_cancel_clicked (pb); + _play_event_sound (priv, ERROR_SOUND); break; } case PB_STATE_SCREENSAVER: { photo_booth_screensaver_stop (pb); + _play_event_sound (priv, ACK_SOUND); break; } case PB_STATE_NONE: { photo_booth_screensaver (pb); + _play_event_sound (priv, ACK_SOUND); break; } default: + _play_event_sound (priv, ERROR_SOUND); break; } @@ -1694,6 +1732,7 @@ void photo_booth_button_print_clicked (GtkButton *button, PhotoBoothWindow *win) GST_DEBUG_OBJECT (pb, "photo_booth_button_print_clicked"); if (priv->state == PB_STATE_ASK_PRINT) { + _play_event_sound (priv, ACK_SOUND); photo_booth_print (pb); } } @@ -1706,6 +1745,7 @@ void photo_booth_button_upload_clicked (GtkButton *button, PhotoBoothWindow *win GST_DEBUG_OBJECT (pb, "photo_booth_button_upload_clicked"); if (priv->state == PB_STATE_ASK_UPLOAD) { + _play_event_sound (priv, ACK_SOUND); photo_booth_window_set_spinner (priv->win, TRUE); gtk_label_set_text (priv->win->status, _("Uploading...")); priv->upload_thread = g_thread_try_new ("upload", (GThreadFunc) photo_booth_facebook_post_thread_func, pb, NULL); @@ -1717,6 +1757,7 @@ void photo_booth_button_cancel_clicked (GtkButton *button, PhotoBoothWindow *win { PhotoBooth *pb = PHOTO_BOOTH_FROM_WINDOW (win); GST_DEBUG_OBJECT (button, "photo_booth_button_cancel_clicked"); + _play_event_sound (photo_booth_get_instance_private (pb), ACK_SOUND); photo_booth_cancel (pb); } @@ -1849,7 +1890,7 @@ static void photo_booth_draw_page (GtkPrintOperation *operation, GtkPrintContext GST_ERROR_OBJECT (context, "can't draw because we have no photo buffer!"); return; } - GST_INFO_OBJECT (context, "draw_page no. %i . %" GST_PTR_FORMAT " size %dx%x, %i dpi, offsets (%.2f, %.2f)", page_nr, priv->print_buffer, priv->print_width, priv->print_height, priv->print_dpi, priv->print_x_offset, priv->print_y_offset); + GST_DEBUG_OBJECT (context, "draw_page no. %i . %" GST_PTR_FORMAT " size %dx%x, %i dpi, offsets (%.2f, %.2f)", page_nr, priv->print_buffer, priv->print_width, priv->print_height, priv->print_dpi, priv->print_x_offset, priv->print_y_offset); gst_buffer_map(priv->print_buffer, &map, GST_MAP_READ); guint8 *h = map.data; @@ -1896,7 +1937,6 @@ static void photo_booth_print_done (GtkPrintOperation *operation, GtkPrintOperat { gtk_print_operation_get_error (operation, &print_error); photo_booth_printing_error_dialog (priv->win, print_error); - GST_ERROR_OBJECT (user_data, "print_done photos_printed GTK_PRINT_OPERATION_RESULT_ERROR: %s", print_error->message); g_error_free (print_error); } else if (result == GTK_PRINT_OPERATION_RESULT_APPLY)