Re: aggregate device
Re: aggregate device
- Subject: Re: aggregate device
- From: "Christoph Teschner" <email@hidden>
- Date: Thu, 04 May 2006 19:42:43 +0200
yea, I'm iterating through the list of availbale devices and select the
built-in.
the steps I'm doing are: locate the base plug-in, describe the aggregate I
want to create, tell the base plug in to create the aggregate device. so far
I think everything's fine, the newly created device shows up in AMS.
now, I'm doing the suggested work around. I set the master sub device to be
the built in, still seems to be fine. and finally, I create an array which
contains only the built-in for the sub device list.
I tried any possible order and variations of those steps, but I always get
the same problem.
whenever, I set the fullsubdevicelist property, two audio devices show up
when I select my aggregate device in AMS. the first one, doesn't have a name
or anything, but its check box is selected and the second one is the
built-in which is not selected. my device therefore has 0 in and outputs and
is unusable, unless I uncheck this unnamed device (my guess is that this
might be the aggreagte device I've created and it contains itself), then it
disappears in the list of sub devices and then I have to manually set the
check box for the built-in.
is this a bug and if so is there any work around for this ? any help again
much appreciated.
below I have added my code for setting the master sub device as well as full
sub device list. just to make sure that I'm doing everything right there.
thanks,
christoph
CFStringRef myMasterSubdevice;
for ( x = 0; x < numDevices; x++ ){
if([[self deviceName: deviceList[x]] isEqual:@"Built-in Audio"]){
myMasterSubdevice = CFStringCreateWithFormat(NULL, NULL, CFSTR("%i"),
deviceList[x]);
}
}
theAddress.mSelector = kAudioAggregateDevicePropertyMasterSubDevice;
theAddress.mScope = kAudioObjectPropertyScopeGlobal;
theAddress.mElement = kAudioObjectPropertyElementMaster;
result = AudioObjectSetPropertyData(theID, &theAddress,
0,NULL,sizeof(CFStringRef), &myMasterSubdevice);
// SUB DEVICE LIST
CFArrayRef mySubDeviceList= CFArrayCreate ( NULL, (const void *)&text, 1,
NULL );
CFMutableArrayRef mySubDeviceList = CFArrayCreateMutable(NULL,
0,NULL);
CFStringRef mySubdevice;
for ( x = 0; x < numDevices; x++ ){
if([[self deviceName: deviceList[x]] isEqual: @"Built-in Audio"]){
mySubdevice = CFStringCreateWithFormat(NULL, NULL, CFSTR("%i"),
deviceList[x]);
break;
}
}
CFArrayAppendValue(mySubDeviceList,mySubdevice);
theAddress.mSelector =
kAudioAggregateDevicePropertyFullSubDeviceList;
theAddress.mScope = kAudioObjectPropertyScopeGlobal;
theAddress.mElement = kAudioObjectPropertyElementMaster;
result = AudioObjectSetPropertyData(theID, &theAddress,
0,NULL,sizeof(CFArrayRef), &mySubDeviceList);
// I am not getting errors an any of these calls
From: Jeff Moore <email@hidden>
To: CoreAudio API <email@hidden>
Subject: Re: aggregate device
Date: Wed, 3 May 2006 17:27:49 -0700
The effect of clicking the "Use" checkbox in the AMS UI is ultimately to
set the property, kAudioAggregateDevicePropertyFullSubDeviceList. This
property tells the aggregate what devices to aggregate.
I thought I saw that you were also setting this property in the code you
had provided earlier. In fact, the complaint I recall was that you were
getting an aggregate that was aggregating some unknown device. At that
point, I saw that you were making the mistake of assuming that the first
device in the device list was the built-in hardware. This is bad because
there is almost always 2 or more devices on the system. You needed to add
code to search through the device list for the built-in device, and then
use it in building the CFArray you pass to
kAudioAggregateDevicePropertyFullSubDeviceList.
Was I mistaken?
On May 3, 2006, at 5:06 PM, Christoph Teschner wrote:
But when you create an aggregate device in AMS it also has 0 in and
outputs and isn't usable either. you also have to set the check box
after having created the aggregate in order to use it. so my process of
creating te aggr. device seems to be identical to AMS. it's really that
final step that can be done manually in AMS that I need to figure out how
to do. what's actually done when you set that check box in AMS ? do you
set a certain property ?
thanks again,
Christoph
From: Jeff Moore <email@hidden>
To: CoreAudio API <email@hidden>
Subject: Re: aggregate device
Date: Wed, 3 May 2006 16:35:47 -0700
You are using the same API calls that AMS uses, so my guess is that you
still have some issues with your code for creating the aggregate in the
first place. Not that it's your fault, mind you. This process isn't the
best documented thing in the universe.
On May 3, 2006, at 4:23 PM, Christoph Teschner wrote:
Hi Jeff,
by activate I mean setting the aggregate's sub devices to an active
state. when I create an aggregate device it always has 0 input an 0
outputs and I can neither use it in my app nor in AULab. the aggregate
device editor in AMS has this check box "use" for each of the
subdevices. only after I have manually set this check box in AMS, I
can play sound through my aggregate device in other applications. now
the question is, how can I programatically do what AMS does when I
click that "use" check box for a subdevice.
thanks,
christoph
From: Jeff Moore <email@hidden>
To: CoreAudio API <email@hidden>
Subject: Re: aggregate device
Date: Tue, 2 May 2006 17:56:40 -0700
What do you mean by "activate"?
On May 2, 2006, at 4:50 PM, Christoph Teschner wrote:
the last thing I am trying to figure out is how can I actually
activate an aggregate device. everything's fine with its creation
and it shows up in AMS. however, I can't use it in my app unless I
manually activate it in AMS. I'd like to do that programatically.
so what's actually done when you click that check box in AMS for a
device in the aggregate's sub device list. do I have to set a
certain property on the sub device?
--
Jeff Moore
Core Audio
Apple
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden