static void play_sound (void) { ca_context_play (ca_gtk_context_get (), UPS_SOUND_LOOP_ID, CA_PROP_EVENT_ID, "battery-caution", CA_PROP_EVENT_DESCRIPTION, _("Battery is critically low"), NULL); }
static gboolean bell_audible_notify (MetaDisplay *display, MetaWindow *window) { #ifdef HAVE_LIBCANBERRA ca_proplist *p; int res; ca_proplist_create (&p); ca_proplist_sets (p, CA_PROP_EVENT_ID, "bell-window-system"); ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event")); ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent"); if (window) { ca_proplist_sets (p, CA_PROP_WINDOW_NAME, window->title); ca_proplist_setf (p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long)window->xwindow); ca_proplist_sets (p, CA_PROP_APPLICATION_NAME, window->res_name); ca_proplist_setf (p, CA_PROP_APPLICATION_PROCESS_ID, "%d", window->net_wm_pid); } res = ca_context_play_full (ca_gtk_context_get (), 1, p, NULL, NULL); ca_proplist_destroy (p); return res == CA_SUCCESS || res == CA_ERROR_DISABLED; #endif /* HAVE_LIBCANBERRA */ return FALSE; }
/** * empathy_sound_manager_stop: * @self: a #EmpathySoundManager * @sound_id: The #EmpathySound to stop playing. * * Stop playing a sound. If it has been stated in loop with * empathy_sound_start_playing(), it will also stop replaying. */ void empathy_sound_manager_stop (EmpathySoundManager *self, EmpathySound sound_id) { EmpathySoundEntry *entry; EmpathyRepeatableSound *repeatable_sound; g_return_if_fail (sound_id < LAST_EMPATHY_SOUND); entry = &(sound_entries[sound_id]); g_return_if_fail (entry->sound_id == sound_id); repeatable_sound = g_hash_table_lookup (self->priv->repeating_sounds, GINT_TO_POINTER (sound_id)); if (repeatable_sound != NULL) { /* The sound must be stopped... If it is waiting for replay, remove * it from hash table to cancel. Otherwise we'll cancel the sound * being played. */ if (repeatable_sound->replay_timeout_id != 0) { g_hash_table_remove (self->priv->repeating_sounds, GINT_TO_POINTER (sound_id)); return; } } ca_context_cancel (ca_gtk_context_get (), entry->sound_id); }
void screenshot_play_sound_effect (const gchar *event_id, const gchar *event_desc) { ca_context *c; ca_proplist *p = NULL; int res; c = ca_gtk_context_get (); res = ca_proplist_create (&p); if (res < 0) goto done; res = ca_proplist_sets (p, CA_PROP_EVENT_ID, event_id); if (res < 0) goto done; res = ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, event_desc); if (res < 0) goto done; res = ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent"); if (res < 0) goto done; ca_context_play_full (c, 0, p, NULL, NULL); done: if (p != NULL) ca_proplist_destroy (p); }
static void workspace_switch_sound(MetaWorkspace *from, MetaWorkspace *to) { MetaWorkspaceLayout layout; int i, nw, x, y, fi, ti; const char *e; nw = meta_screen_get_n_workspaces(from->screen); fi = meta_workspace_index(from); ti = meta_workspace_index(to); meta_screen_calc_workspace_layout(from->screen, nw, fi, &layout); for (i = 0; i < nw; i++) if (layout.grid[i] == ti) break; if (i >= nw) { meta_bug("Failed to find destination workspace in layout\n"); goto finish; } y = i / layout.cols; x = i % layout.cols; /* We priorize horizontal over vertical movements here. The rationale for this is that horizontal movements are probably more interesting for sound effects because speakers are usually positioned on a horizontal and not a vertical axis. i.e. your spatial "Woosh!" effects will easily be able to encode horizontal movement but not such much vertical movement. */ if (x < layout.current_col) e = "desktop-switch-left"; else if (x > layout.current_col) e = "desktop-switch-right"; else if (y < layout.current_row) e = "desktop-switch-up"; else if (y > layout.current_row) e = "desktop-switch-down"; else { meta_bug("Uh, origin and destination workspace at same logic position!\n"); goto finish; } #ifdef HAVE_CANBERRA ca_context_play(ca_gtk_context_get(), 1, CA_PROP_EVENT_ID, e, CA_PROP_EVENT_DESCRIPTION, "Desktop switched", CA_PROP_CANBERRA_CACHE_CONTROL, "permanent", NULL); #endif finish: meta_screen_free_workspace_layout (&layout); }
static gboolean empathy_sound_play_internal (GtkWidget *widget, EmpathySound sound_id, ca_finish_callback_t callback, gpointer user_data) { EmpathySoundEntry *entry; ca_context *c; ca_proplist *p = NULL; entry = &(sound_entries[sound_id]); g_return_val_if_fail (entry->sound_id == sound_id, FALSE); c = ca_gtk_context_get (); ca_context_cancel (c, entry->sound_id); DEBUG ("Play sound \"%s\" (%s)", entry->event_ca_id, entry->event_ca_description); if (ca_proplist_create (&p) < 0) goto failed; if (ca_proplist_sets (p, CA_PROP_EVENT_ID, entry->event_ca_id) < 0) goto failed; if (ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, gettext (entry->event_ca_description)) < 0) goto failed; if (ca_gtk_proplist_set_for_widget (p, widget) < 0) goto failed; ca_context_play_full (ca_gtk_context_get (), entry->sound_id, p, callback, user_data); ca_proplist_destroy (p); return TRUE; failed: if (p != NULL) ca_proplist_destroy (p); return FALSE; }
void play_loop_stop (guint *id) { if (*id == 0) return; ca_context_cancel (ca_gtk_context_get (), UPS_SOUND_LOOP_ID); g_source_remove (*id); *id = 0; }
void meta_bell_notify (MetaDisplay *display, XkbAnyEvent *xkb_ev) { /* flash something */ if (meta_prefs_get_visual_bell ()) bell_visual_notify (display, xkb_ev); if (meta_prefs_bell_is_audible ()) { XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev; #ifdef HAVE_CANBERRA ca_proplist *p; MetaWindow *window; int res; ca_proplist_create (&p); ca_proplist_sets (p, CA_PROP_EVENT_ID, "bell-window-system"); ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event")); ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent"); window = meta_display_lookup_x_window (display, xkb_bell_event->window); if (!window && (display->focus_window) && (display->focus_window->frame)) window = display->focus_window; if (window) { ca_proplist_sets (p, CA_PROP_WINDOW_NAME, window->title); ca_proplist_setf (p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long)window->xwindow); ca_proplist_sets (p, CA_PROP_APPLICATION_NAME, window->res_name); ca_proplist_setf (p, CA_PROP_APPLICATION_PROCESS_ID, "%d", window->net_wm_pid); } /* First, we try to play a real sound ... */ res = ca_context_play_full (ca_gtk_context_get (), 1, p, NULL, NULL); ca_proplist_destroy (p); if (res != CA_SUCCESS && res != CA_ERROR_DISABLED) #else if (1) #endif /* HAVE_CANBERRA */ { /* ...and in case that failed we use the classic X11 bell. */ XkbForceDeviceBell (display->xdisplay, xkb_bell_event->device, xkb_bell_event->bell_class, xkb_bell_event->bell_id, xkb_bell_event->percent); } } }
static void play_sound_effect (GdkWindow *window) { ca_context *c; ca_proplist *p = NULL; int res; c = ca_gtk_context_get (); res = ca_proplist_create (&p); if (res < 0) goto done; res = ca_proplist_sets (p, CA_PROP_EVENT_ID, "screen-capture"); if (res < 0) goto done; res = ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Screenshot taken")); if (res < 0) goto done; if (window != NULL) { res = ca_proplist_setf (p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long) GDK_WINDOW_XID (window)); if (res < 0) goto done; } ca_context_play_full (c, 0, p, NULL, NULL); done: if (p != NULL) ca_proplist_destroy (p); }
/* * Volume is a value from 0.0 to 1.0 */ static void update_volume_label (MpdVolumeTile *self, double volume) { MpdVolumeTilePrivate *priv = GET_PRIVATE (self); char *old_level; float label_width; float slider_width; float x; g_return_if_fail (0.0 <= volume && volume <= 1.0); old_level = g_strdup (mx_label_get_text (MX_LABEL (priv->volume_label))); /* Label text */ if (volume == 1.0) mx_label_set_text (MX_LABEL (priv->volume_label), _("Turned up to 11")); else if (volume >= 0.90) mx_label_set_text (MX_LABEL (priv->volume_label), _("Very loud")); else if (volume >= 0.75) mx_label_set_text (MX_LABEL (priv->volume_label), _("Loud")); else if (volume > 0.50) mx_label_set_text (MX_LABEL (priv->volume_label), _("Fairly loud")); else if (volume == 0.50) mx_label_set_text (MX_LABEL (priv->volume_label), _("Middle of the road")); else if (volume >= 0.25) mx_label_set_text (MX_LABEL (priv->volume_label), _("Fairly quiet")); else if (volume >= 0.10) mx_label_set_text (MX_LABEL (priv->volume_label), _("Quiet")); else if (volume > 0.0) mx_label_set_text (MX_LABEL (priv->volume_label), _("Very quiet")); else mx_label_set_text (MX_LABEL (priv->volume_label), _("Silent")); /* Label position */ label_width = clutter_actor_get_width (priv->volume_label); slider_width = clutter_actor_get_width (priv->volume_slider); x = slider_width * volume - label_width / 2; x = CLAMP (x, 0.0, slider_width - label_width); clutter_actor_set_x (priv->volume_label, x); /* Notification */ if (0 != g_strcmp0 (old_level, mx_label_get_text (MX_LABEL (priv->volume_label)))) { gint res; ca_proplist *proplist; ca_context *context; if (g_atomic_int_get (&priv->playing_event_sound) > 0) return; context = ca_gtk_context_get (); ca_proplist_create (&proplist); ca_proplist_sets (proplist, CA_PROP_EVENT_ID, VOLUME_CHANGED_EVENT); res = ca_context_play_full (context, 1, proplist, (ca_finish_callback_t )_play_sound_completed_cb, self); ca_proplist_destroy (proplist); if (res != CA_SUCCESS) { g_warning ("%s: Error playing test sound: %s", G_STRLOC, ca_strerror (res)); } else { g_atomic_int_inc (&priv->playing_event_sound); } } g_free (old_level); }