alConnect(3dm) alConnect(3dm)
alConnect - connect two audio I/O resources
#include <dmedia/audio.h>
int alConnect(int source, int dest, ALpv *props, int nprops)
source is the source resource.
dest is the destination resource.
props is a parameter/value list of desired properties for the
connection (see alGetParams(3dm) for more information on
parameter/value lists).
nprops is the number of parameter/value pairs in the list props.
An audio connection moves audio data from one audio I/O resource to
another. For example, when an application opens an audio input port, the
audio system creates a connection from an input device to the input port.
See alResources(3dm) for information on resources in general.
alConnect creates a connection from the resource source to the resource
dest. alConnect can connect a port to a device, a device to a port, or a
device to a device; port-to-port connections are not supported at this
time. Other types of resources cannot be connected.
In addition, there are certain constraints on the directions of source
and dest. source must be either an input device or an output port. dest
must be either an output device or an input port.
A connection performs certain operations on the audio data. These
operations are given by the properties list props. See below for the
currently supported properties. If nprops is 0, the connection will be
given a default set of properties.
If a connection already exists between the given source and dest,
alConnect will return the resource ID of the existing connection and set
the given properties props on that connection.
Note that by default, connections persist after the application which
creates them exits. In order to remove the connection, you must
explicitly call alDisconnect(3dm), or create the connection with the
AL_ASSOCIATE property.
Only one property is currently supported for connections, AL_ASSOCIATE,
which allows you to associate a connection with a particular port.
AL_ASSOCIATE takes as its value the resource ID of a port (see
alGetResource(3dm)). When the port is destroyed, the connection is
Page 1
alConnect(3dm) alConnect(3dm)
destroyed as well. This allows an application to create a connection
which is guaranteed to go away when the application goes away.
The following simple program takes two device names as command-line
arguments and creates a connection between them. This connection will
persist after the program exits.
main(int argc, char **argv)
{
int fd;
int src, dest;
int id;
if (argc != 3) {
printf("usage: %s <src> <dest>\n",argv[0]);
exit(-1);
}
/* Find the source resource */
src = alGetResourceByName(AL_SYSTEM, argv[1], AL_DEVICE_TYPE);
if (!src) {
printf("invalid device %s\n", argv[1]);
exit(-1);
}
/* Find the destination resource */
dest = alGetResourceByName(AL_SYSTEM, argv[2], AL_DEVICE_TYPE);
if (!dest) {
printf("invalid device %s\n", argv[2]);
exit(-1);
}
/* Attempt to connect them */
if ((id = alConnect(src, dest, 0, 0))<0) {
printf("connect failed: %s\n",alGetErrorString(oserror()));
}
printf("connection ID is %d\n",id);
}
The following code fragment creates a connection which goes away when a
port goes away. Since the port is tied to the application, this
connection does not persist after the application exits. This particular
example creates a port which does not actually do audio; it is connected
to no audio device. We also give it a minimal queue size so that it
consumes few audio resources.
Page 2
alConnect(3dm) alConnect(3dm)
ALport p;
ALconfig c;
ALpv pv;
int id, src, dest;
/* code here to set src & dest */
[...]
/* create a config structure */
c = alNewConfig();
if (!c) {
printf("alNewConfig failed: %s0,alGetErrorString(oserror()));
exit(-1);
}
/* set the config so the port does no audio */
alSetDevice(c, AL_NULL_RESOURCE);
alSetQueueSize(c, 100);
/* now open a port using the config */
p = alOpenPort("null port","r",c);
if (!p) {
printf("alOpenPort failed: %s0,alGetErrorString(oserror()));
exit(-1);
}
/* Attempt to connect src & dest. We assume that these are set
to valid resource IDs. */
pv.param = AL_ASSOCIATE;
pv.value.i = alGetResource(p);
if ((id = alConnect(src, dest, &pv, 1))<0) {
printf("connect failed: %s\n",alGetErrorString(oserror()));
}
printf("connection ID is %d\n",id);
/* now, when we close the port, or the application exits (also
closing the port), the connection will automatically go away */
[...]
If successful, alConnect returns the resource ID of the connection. It
returns -1 if the connection fails, and sets an error code which can be
retrieved with oserror(3C).
alConnect can fail for the following reasons:
Page 3
alConnect(3dm) alConnect(3dm)
AL_BAD_RESOURCE [Toc] [Back]
source or dest is an invalid resource.
AL_BAD_DEVICE_ACCESS [Toc] [Back]
The audio system is not present or improperly configured.
AL_BAD_PVBUFFER [Toc] [Back]
props is invalid and nprops is nonzero.
AL_BAD_BUFFERLENGTH [Toc] [Back]
nprops is less than zero.
oserror(3C), alIntro(3dm), alGetParams(3dm), alDisconnect(3dm)
PPPPaaaaggggeeee 4444 [ Back ]
|