libcanberra Reference Manual | ||||
---|---|---|---|---|
#define CA_PROP_MEDIA_NAME #define CA_PROP_MEDIA_TITLE #define CA_PROP_MEDIA_ARTIST #define CA_PROP_MEDIA_LANGUAGE #define CA_PROP_MEDIA_FILENAME #define CA_PROP_MEDIA_ICON #define CA_PROP_MEDIA_ICON_NAME #define CA_PROP_MEDIA_ROLE #define CA_PROP_EVENT_ID #define CA_PROP_EVENT_DESCRIPTION #define CA_PROP_EVENT_MOUSE_X #define CA_PROP_EVENT_MOUSE_Y #define CA_PROP_EVENT_MOUSE_HPOS #define CA_PROP_EVENT_MOUSE_VPOS #define CA_PROP_EVENT_MOUSE_BUTTON #define CA_PROP_WINDOW_NAME #define CA_PROP_WINDOW_ID #define CA_PROP_WINDOW_ICON #define CA_PROP_WINDOW_ICON_NAME #define CA_PROP_WINDOW_X11_DISPLAY #define CA_PROP_WINDOW_X11_SCREEN #define CA_PROP_WINDOW_X11_MONITOR #define CA_PROP_WINDOW_X11_XID #define CA_PROP_APPLICATION_NAME #define CA_PROP_APPLICATION_ID #define CA_PROP_APPLICATION_VERSION #define CA_PROP_APPLICATION_ICON #define CA_PROP_APPLICATION_ICON_NAME #define CA_PROP_APPLICATION_LANGUAGE #define CA_PROP_APPLICATION_PROCESS_ID #define CA_PROP_APPLICATION_PROCESS_BINARY #define CA_PROP_APPLICATION_PROCESS_USER #define CA_PROP_APPLICATION_PROCESS_HOST #define CA_PROP_CANBERRA_CACHE_CONTROL #define CA_PROP_CANBERRA_VOLUME #define CA_PROP_CANBERRA_XDG_THEME_NAME #define CA_PROP_CANBERRA_XDG_THEME_OUTPUT_PROFILE typedef ca_context; void (*ca_finish_callback_t) (ca_context *c, uint32_t id, int error_code, void *userdata); int ca_context_create (ca_context **c); int ca_context_destroy (ca_context *c); int ca_context_open (ca_context *c); int ca_context_set_driver (ca_context *c, const char *driver); int ca_context_change_device (ca_context *c, const char *device); int ca_context_change_props (ca_context *c, ...); int ca_context_change_props_full (ca_context *c, ca_proplist *p); int ca_context_play (ca_context *c, uint32_t id, ...); int ca_context_play_full (ca_context *c, uint32_t id, ca_proplist *p, ca_finish_callback_t cb, void *userdata); int ca_context_cancel (ca_context *c, uint32_t id); int ca_context_cache (ca_context *c, ...); int ca_context_cache_full (ca_context *c, ca_proplist *p); const char* ca_strerror (int code); typedef ca_proplist; int ca_proplist_create (ca_proplist **p); int ca_proplist_destroy (ca_proplist *p); int ca_proplist_sets (ca_proplist *p, const char *key, const char *value); int ca_proplist_setf (ca_proplist *p, const char *key, const char *format, ...); int ca_proplist_set (ca_proplist *p, const char *key, const void *data, size_t nbytes);
libcanberra defines a simple abstract interface for playing event sounds.
libcanberra relies on the XDG sound naming specification for identifying event sounds. On Unix/Linux the right sound to play is found via the mechanisms defined in the XDG sound themeing specification. On other systems the XDG sound name is translated to the native sound id for the operating system.
An event sound is triggered via libcanberra by calling the
ca_context_play()
function on a previously created ca_context
object. The ca_context_play()
takes a list of key-value pairs that
describe the event sound to generate as closely as possible. The
most important property is CA_PROP_EVENT_ID
which defines the XDG
sound name for the sound to play.
libcanberra is not a generic event abstraction system. It's only purpose is playing sounds -- however in a very elaborate way. As much information about the context the sound is triggered from shall be supplied to the sound system as possible, so that it can replace the sound with some other kind of feedback for a11y cases. Also this additional information can be used to enhance user experience (e.g. by positioning sounds in space depending on the place on the screen the sound was triggered from, and similar uses).
The set of properties defined for event sounds is extensible and shared with other audio systems, such as PulseAudio. Some of the properties that may be set are specific to an application, to a window, to an input event or to the media being played back.
The user can attach a set of properties to the context itself,
which is than automatically inherited by each sample being played
back. (ca_context_change_props()
).
Some of the properties can be filled in by libcanberra or one of
its backends automatically and thus need not be be filled in by the
application (such as CA_PROP_APPLICATION_PROCESS_ID
and
friends). However the application can always overwrite any of these
implicit properties.
libcanberra is thread-safe and OOM-safe (as far as the backend allows this). It is not async-signal safe.
Most libcanberra functions return an integer that indicates success
when 0 (CA_SUCCESS
) or an error when negative. In the latter case
ca_strerror()
can be used to convert this code into a human
readable string.
libcanberra property names need to be in 7bit ASCII, string property values UTF8.
Optionally a libcanberra backend can support caching of sounds in a
sound system. If this functionality is used, the latencies for
event sound playback can be much smaller and fewer resources are
needed to start playback. If a backend does not support cacheing,
the respective functions will return an error code of
CA_ERROR_NOTSUPPORTED
.
It is highly recommended that the application sets the
CA_PROP_APPLICATION_NAME
, CA_PROP_APPLICATION_ID
,
CA_PROP_APPLICATION_ICON_NAME
/CA_PROP_APPLICATION_ICON
properties
immediately after creating the ca_context, before calling
ca_context_open()
or ca_context_play()
.
Its is highly recommended to pass at least CA_PROP_EVENT_ID
,
CA_PROP_EVENT_DESCRIPTION
to ca_context_play()
for each event
sound generated. For sound events based on mouse inputs events
CA_PROP_EVENT_MOUSE_X
, CA_PROP_EVENT_MOUSE_Y
, CA_PROP_EVENT_MOUSE_HPOS
,
CA_PROP_EVENT_MOUSE_VPOS
, CA_PROP_EVENT_MOUSE_BUTTON
should be
passed. For sound events attached to a widget on the screen, the
CA_PROP_WINDOW_xxx
properties should be set.
#define CA_PROP_MEDIA_NAME "media.name"
A name describing the media being played. Localized if possible and applicable.
#define CA_PROP_MEDIA_TITLE "media.title"
A (song) title describing the media being played. Localized if possible and applicable.
#define CA_PROP_MEDIA_ARTIST "media.artist"
The artist of this media. Localized if possible and applicable.
#define CA_PROP_MEDIA_LANGUAGE "media.language"
The language this media is in, in some standard POSIX locale string, such as "de_DE".
#define CA_PROP_MEDIA_FILENAME "media.filename"
The file name this media was or can be loaded from.
#define CA_PROP_MEDIA_ICON "media.icon"
An icon for this media in binary PNG format.
#define CA_PROP_MEDIA_ICON_NAME "media.icon_name"
An icon name as defined in the XDG icon naming specifcation.
#define CA_PROP_MEDIA_ROLE "media.role"
The "role" this media is played in. For event sounds the string "event". For other cases strings like "music", "video", "game", ...
#define CA_PROP_EVENT_ID "event.id"
A textual id for an event sound, as mandated by the XDG sound naming specification.
#define CA_PROP_EVENT_DESCRIPTION "event.description"
A descriptive string for the sound event. Localized if possible and applicable.
#define CA_PROP_EVENT_MOUSE_X "event.mouse.x"
If this sound event was triggered by a mouse input event, the X position of the mouse cursor on the screen, formatted as string.
#define CA_PROP_EVENT_MOUSE_Y "event.mouse.y"
If this sound event was triggered by a mouse input event, the Y position of the mouse cursor on the screen, formatted as string.
#define CA_PROP_EVENT_MOUSE_HPOS "event.mouse.hpos"
If this sound event was triggered by a mouse input event, the X position of the mouse cursor as fractional value between 0 and 1, formatted as string, 0 reflecting the left side of the screen, 1 the right side.
#define CA_PROP_EVENT_MOUSE_VPOS "event.mouse.vpos"
If this sound event was triggered by a mouse input event, the Y position of the mouse cursor as fractional value between 0 and 1, formatted as string, 0 reflecting the top end of the screen, 1 the bottom end.
#define CA_PROP_EVENT_MOUSE_BUTTON "event.mouse.button"
If this sound event was triggered by a mouse input event, the number of the mouse button that triggered it, formatted as string. 1 for left mouse button, 3 for right, 2 for middle.
#define CA_PROP_WINDOW_NAME "window.name"
If this sound event was triggered by a window on the screen, the name of this window as human readable string.
#define CA_PROP_WINDOW_ID "window.id"
If this sound event was triggered by a window on the screen, some identification string for this window, so that the sound system can recognize specific windows.
#define CA_PROP_WINDOW_ICON "window.icon"
If this sound event was triggered by a window on the screen, binary icon data in PNG format for this window.
#define CA_PROP_WINDOW_ICON_NAME "window.icon_name"
If this sound event was triggered by a window on the screen, an icon name for this window, as defined in the XDG icon naming specification.
#define CA_PROP_WINDOW_X11_DISPLAY "window.x11.display"
If this sound event was triggered by a window on the screen and the windowing system is X11, the X display name of the window (e.g. ":0").
#define CA_PROP_WINDOW_X11_SCREEN "window.x11.screen"
If this sound event was triggered by a window on the screen and the windowing system is X11, the X screen id of the window formatted as string (e.g. "0").
#define CA_PROP_WINDOW_X11_MONITOR "window.x11.monitor"
If this sound event was triggered by a window on the screen and the windowing system is X11, the X monitor id of the window formatted as string (e.g. "0").
#define CA_PROP_WINDOW_X11_XID "window.x11.xid"
If this sound event was triggered by a window on the screen and the windowing system is X11, the XID of the window formatted as string.
#define CA_PROP_APPLICATION_NAME "application.name"
The name of the application this sound event was triggered by as human readable string. (e.g. "GNU Emacs") Localized if possible and applicable.
#define CA_PROP_APPLICATION_ID "application.id"
An identifier for the program this sound event was triggered by. (e.g. "org.gnu.emacs").
#define CA_PROP_APPLICATION_VERSION "application.version"
A version number for the program this sound event was triggered by. (e.g. "22.2")
#define CA_PROP_APPLICATION_ICON "application.icon"
Binary icon data in PNG format for the application this sound event is triggered by.
#define CA_PROP_APPLICATION_ICON_NAME "application.icon_name"
An icon name for the application this sound event is triggered by, as defined in the XDG icon naming specification.
#define CA_PROP_APPLICATION_LANGUAGE "application.language"
The locale string the application that is triggering this sound
event is running in. A POSIX locale string such as de_DEeuro
.
#define CA_PROP_APPLICATION_PROCESS_ID "application.process.id"
The unix PID of the process that is triggering this sound event, formatted as string.
#define CA_PROP_APPLICATION_PROCESS_BINARY "application.process.binary"
The path to the process binary of the process that is triggering this sound event.
#define CA_PROP_APPLICATION_PROCESS_USER "application.process.user"
The user that owns the process that is triggering this sound event.
#define CA_PROP_APPLICATION_PROCESS_HOST "application.process.host"
The host name of the host the process that is triggering this sound event runs on.
#define CA_PROP_CANBERRA_CACHE_CONTROL "canberra.cache-control"
A special property that can be used to control the automatic sound caching of sounds in the sound server. One of "permanent", "volatile", "never". "permanent" will cause this sample to be cached in the server permanently. This is useful for very frequently used sound events such as those used for input feedback. "volatile" may be used for cacheing sounds in the sound server temporarily. They will expire after some time or on cache pressure. Finally, "never" may be used for sounds that should never be cached, because they are only generated very seldomly or even only once at most (such as desktop login sounds).
If this property is not explicitly passed to ca_context_play()
it
will default to "never". If it is not explicitly passed to
ca_context_cache()
it will default to "permanent".
If the list of properties is handed on to the sound server this property is stripped from it.
#define CA_PROP_CANBERRA_VOLUME "canberra.volume"
A special property that can be used to control the volume this sound event is played in if the backend supports it. A floating point value for the decibel multiplier for the sound. 0 dB relates to zero gain, and is the default volume these sounds are played in.
If the list of properties is handed on to the sound server this property is stripped from it.
#define CA_PROP_CANBERRA_XDG_THEME_NAME "canberra.xdg-theme.name"
A special property that can be used to control the XDG sound theme that is used for this sample.
If the list of properties is handed on to the sound server this property is stripped from it.
#define CA_PROP_CANBERRA_XDG_THEME_OUTPUT_PROFILE "canberra.xdg-theme.output-profile"
A special property that can be used to control the XDG sound theme output profile that is used for this sample.
If the list of properties is handed on to the sound server this property is stripped from it.
void (*ca_finish_callback_t) (ca_context *c, uint32_t id, int error_code, void *userdata);
Playback completion event callback. The context this callback is called in is undefined, it might or might not be called from a background thread, and from any stack frame. The code implementing this function may not call any libcanberra API call from this callback -- this might result in a deadlock. Instead it may only be used to asynchronously signal some kind of notification object (semaphore, message queue, ...).
c : |
The libcanberra context this callback is called for |
id : |
The numerical id passed to the ca_context_play_full() when starting the event sound playback.
|
error_code : |
A numerical error code describing the reason this callback is called. If CA_SUCCESS is passed in the playback of the event sound was successfully completed. |
userdata : |
Some arbitrary user data the caller of ca_context_play_full() passed in.
|
int ca_context_create (ca_context **c);
Create an (unconnected) context object. This call will not connect
to the sound system, calling this function might even suceed if no
working driver backend is available. To find out if one is
available call ca_context_open()
.
c : |
A pointer wheere to fill in the newly created context object. |
Returns : | 0 on success, negative error code on error. |
int ca_context_destroy (ca_context *c);
Destroy a (connected or unconnected) context object.
c : |
the context to destroy. |
Returns : | 0 on success, negative error code on error. |
int ca_context_open (ca_context *c);
Connect the context to the sound system. This call is implicitly
called in ca_context_play()
or ca_context_cache()
if not called
explicitly. It is recommended to initialize application properties
with ca_context_change_props()
before calling this function.
c : |
the context to connect. |
Returns : | 0 on success, negative error code on error. |
int ca_context_set_driver (ca_context *c, const char *driver);
Specify the backend driver used. This function may not be called again after
ca_context_open()
suceeded. This function might suceed even when
the specified driver backend is not available. Use
ca_context_open()
to find out whether the backend is available.
c : |
the context to change the backend driver for |
driver : |
the backend driver to use (e.g. "alsa", "pulse", "null", ...) |
Returns : | 0 on success, negative error code on error. |
int ca_context_change_device (ca_context *c, const char *device);
Specify the backend device to use. This function may be called not be called after
ca_context_open()
suceeded. This function might suceed even when
the specified driver backend is not available. Use
ca_context_open()
to find out whether the backend is available
Depending on the backend use this might or might not cause all currently playing event sounds to be moved to the new device..
c : |
the context to change the backend device for |
device : |
the backend device to use, in a format that is specific to the backend. |
Returns : | 0 on success, negative error code on error. |
int ca_context_change_props (ca_context *c, ...);
Write one or more string properties to the context object. Requires
final NULL sentinel. Properties set like this will be attached to
both the client object of the sound server and to all event sounds
played or cached. It is recommended to call this function at least
once before calling ca_context_open()
, so that the initial
application properties are set properly before the initial
connection to the sound system. This function can be called both
before and after the ca_context_open()
call. Properties that have
already been set before will be overwritten.
c : |
the context to set the properties on. |
... : |
the list of string pairs for the properties. Needs to be a NULL terminated list. |
Returns : | 0 on success, negative error code on error. |
int ca_context_change_props_full (ca_context *c, ca_proplist *p);
Similar to ca_context_change_props()
, but takes a ca_proplist
instead of a variable list of properties. Can be used to set binary
properties such as CA_PROP_APPLICATION_ICON
.
c : |
the context to set the properties on. |
p : |
the property list to set. |
Returns : | 0 on success, negative error code on error. |
int ca_context_play (ca_context *c, uint32_t id, ...);
Play one event sound. id can be any numeric value which later can
be used to cancel an event sound that is currently being
played. You may use the same id twice or more times if you want to
cancel multiple event sounds with a single ca_context_cancel()
call
at once. It is recommended to pass 0 for the id if the event sound
shall never be canceled. If the requested sound is not cached in
the server yet this call might result in the sample being uploaded
temporarily or permanently (this may be controlled with CA_PROP_CANBERRA_CACHE_CONTROL
). This function will start playback
in the background. It will not wait until playback
completed. Depending on the backend used a sound that is started
shortly before your application terminates might or might not continue to
play after your application terminated. If you want to make sure
that all sounds finish to play you need to wait synchronously for
the callback function of ca_context_play_full()
to be called before you
terminate your application.
The sample to play is identified by the CA_PROP_EVENT_ID
property. If it is already cached in the server the cached version
is played. The properties passed in this call are merged with the
properties supplied when the sample was cached (if applicable)
and the context properties as set with ca_context_change_props()
.
If CA_PROP_EVENT_ID
is not defined the sound file passed in the
CA_PROP_MEDIA_FILENAME
is played.
On Linux/Unix the right sound to play is determined according to
CA_PROP_EVENT_ID
,
CA_PROP_APPLICATION_LANGUAGE
/CA_PROP_MEDIA_LANGUAGE
, the system
locale, CA_PROP_CANBERRA_XDG_THEME_NAME
and
CA_PROP_CANBERRA_XDG_THEME_OUTPUT_PROFILE
, following the XDG Sound
Theming Specification. On non-Unix systems the native event sound
that matches the XDG sound name in CA_PROP_EVENT_ID
is played.
c : |
the context to play the event sound on |
id : |
an integer id this sound can later be identified with when calling ca_context_cancel()
|
... : |
additional properties for this sound event. |
Returns : | 0 on success, negative error code on error. |
int ca_context_play_full (ca_context *c, uint32_t id, ca_proplist *p, ca_finish_callback_t cb, void *userdata);
Play one event sound, and call the specified callback function when
completed. See ca_finish_callback_t for the semantics the callback
is called in. Also see ca_context_play()
.
It is guaranteed that the callback is called exactly once if
ca_context_play_full()
returns CA_SUCCESS. You thus may safely pass
allocated memory to the callback and assume that it is freed
properly.
c : |
the context to play the event sound on |
id : |
an integer id this sound can be later be identified with when calling ca_context_cancel() or when the callback is called.
|
p : |
A property list of properties for this event sound |
cb : |
A callback to call when this sound event sucessfully finished playing or when an error occured during playback. |
userdata : |
|
Returns : | 0 on success, negative error code on error. |
int ca_context_cancel (ca_context *c, uint32_t id);
Cancel one or more event sounds that have been started via
ca_context_play()
. If the sound was started with
ca_context_play_full()
and a callback function was passed this
might cause this function to be called with CA_ERROR_CANCELED
as
error code.
c : |
the context to cancel the sounds on |
id : |
the id that identify the sounds to cancel. |
Returns : | 0 on success, negative error code on error. |
int ca_context_cache (ca_context *c, ...);
Upload the specified sample into the audio server and attach the specified properties to it. This function will only return after the sample upload was finished.
The sound to cache is found with the same algorithm that is used to
find the sounds for ca_context_play()
.
If the backend doesn't support caching sound samples this function
will return CA_ERROR_NOTSUPPORTED
.
c : |
The context to use for uploading. |
... : |
The properties for this event sound. Terminated with NULL. |
Returns : | 0 on success, negative error code on error. |
int ca_context_cache_full (ca_context *c, ca_proplist *p);
Upload the specified sample into the server and attach the
specified properties to it. Similar to ca_context_cache()
but takes
a ca_proplist instead of a variable number of arguments.
If the backend doesn't support caching sound samples this function will return CA_ERROR_NOTSUPPORTED.
c : |
The context to use for uploading. |
p : |
The property list for this event sound. |
Returns : | 0 on success, negative error code on error. |
const char* ca_strerror (int code);
Converts a numerical error code as returned by most libcanberra API functions into a human readable error string.
code : |
Numerical error code as returned by a libcanberra API function |
Returns : | a human readable error string. |
typedef struct ca_proplist ca_proplist;
A canberra property list object. Basically a hashtable.
int ca_proplist_create (ca_proplist **p);
Allocate a new empty property list.
p : |
A pointer where to fill in a pointer for the new property list. |
Returns : | 0 on success, negative error code on error. |
int ca_proplist_destroy (ca_proplist *p);
Destroys a property list that was created with ca_proplist_create()
earlier.
p : |
The property list to destroy |
Returns : | 0 on success, negative error code on error. |
int ca_proplist_sets (ca_proplist *p, const char *key, const char *value);
Add a new string key/value pair to the property list.
p : |
The property list to add this key/value pair to |
key : |
The key for this key/value pair |
value : |
The value for this key/value pair |
Returns : | 0 on success, negative error code on error. |
int ca_proplist_setf (ca_proplist *p, const char *key, const char *format, ...);
Much like ca_proplist_sets()
: add a new string key/value pair to
the property list. Takes a standard C format string plus arguments
and formats a string of it.
p : |
The property list to add this key/value pair to |
key : |
The key for this key/value pair |
format : |
The format string for the value for this key/value pair |
... : |
The parameters for the format string |
Returns : | 0 on success, negative error code on error. |
int ca_proplist_set (ca_proplist *p, const char *key, const void *data, size_t nbytes);
Add a new binary key/value pair to the property list.
p : |
The property list to add this key/value pair to |
key : |
The key for this key/value pair |
data : |
The binary value for this key value pair |
nbytes : |
The size of thebinary value for this key value pair. |
Returns : | 0 on success, negative error code on error. |