• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Output Channel Selection Redux
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Output Channel Selection Redux


  • Subject: Re: Output Channel Selection Redux
  • From: William Stewart <email@hidden>
  • Date: Tue, 24 Feb 2009 18:11:27 -0800

If you try this on the default output unit code (Developer/Examples/ CoreAudio) does it have the same problem?

Also - as my previous email described - you should be getting the number of output channels from the output unit - I had the code there, you had to take it out to put in your 16... I wonder if that is causing the problem...

As we use this in AULab, I don't see this as a problem in our code...

I also presume that the input that you are providing to the output unit is 2 channels?

On Feb 24, 2009, at 4:42 PM, Bob Ingraham wrote:

Thanks!

However, when I implement this code, I get a segmentation fault in one of the threads:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x2e445107
[Switching to process 12746 thread 0x7103]
0x90cfa76c in StereoInterleave32_X86 ()
(gdb) bt
#0 0x90cfa76c in StereoInterleave32_X86 ()
#1 0x90bdeaa2 in CBRConverter::RenderOutput ()
#2 0x90bde7dc in BufferedAudioConverter::FillBuffer ()
#3 0x90bde964 in AudioConverterChain::RenderOutput ()
#4 0x90bde7dc in BufferedAudioConverter::FillBuffer ()
#5 0x90bf5b73 in AudioConverterFillComplexBuffer ()
#6 0x700124ff in AUGenericOutputEntry ()
#7 0x90f2115b in HP_IOProc::Call ()
#8 0x90f20e4c in IOA_Device::CallIOProcs ()
#9 0x90f20d28 in HP_IOThread::PerformIO ()
#10 0x90f1f103 in HP_IOThread::WorkLoop ()
#11 0x90f1ec27 in HP_IOThread::ThreadEntry ()
#12 0x90f0f464 in CAPThread::Entry ()
#13 0x9101f095 in _pthread_start ()
#14 0x9101ef52 in thread_start ()
(gdb) info threads
* 4 process 12746 thread 0x7103 0x90cfa76c in StereoInterleave32_X86 ()
3 process 12746 thread 0x6f13 0x90ff53ae in __semwait_signal ()
2 process 12746 thread 0x5803 0x90fee1c6 in mach_msg_trap ()
1 process 12746 local thread 0x2d03 0x90ff53ae in __semwait_signal ()
(gdb)


Here is the code snippet:

SInt32 *channelMap = NULL;
//UInt32 numOfChannels = fileFormat.NumberChannels();
UInt32 numOfChannels = 16; // Number of output device channels
UInt32 mapSize = numOfChannels * sizeof(SInt32);
channelMap = (SInt32 *)malloc(mapSize);
for (i=0; i < numOfChannels; i++)
{
channelMap[i] = -1;
}
//channelMap[desiredInputChannel] = deviceOutputChannel;
channelMap[2] = 0;
channelMap[3] = 1;
err = AudioUnitSetProperty(auOutput, kAudioOutputUnitProperty_ChannelMap, kAudioUnitScope_Input, 0, channelMap, mapSize);



The AudioUnitSetProperty() returns noErr.

I must be doing something wrong...

----- Original Message -----
From: "William Stewart" <email@hidden>
To: "Bob Ingraham" <email@hidden>
Cc: "CoreAudio API" <email@hidden>
Sent: Tuesday, February 24, 2009 4:42:36 PM GMT -07:00 US/Canada Mountain
Subject: Re: Output Channel Selection Redux



On Feb 24, 2009, at 2:38 PM, Bob Ingraham wrote:

Hey All,

Thanks for the help thus far!

But I am just hitting a brick wall here. I think I'm on the right
track with the SimpleSDK PlayFile example I've been modifying, but I
just can't past the channel select problem using
kAudioOutputUnitProperty_ChannelMap.

Any help would be most appreciated...


Here's how we use this property in AULab:

	UInt32 numOutputChannels; // the number of channels of the device
	OSStatus result;
	SInt32 *channelMap = NULL;

	ca_require_noerr (result = mOutputAU.NumberChannels
(kAudioUnitScope_Output, 0, numOutputChannels), home);

		// this sets the channel map up so that all of the channels are
marked as unused
	channelMap = new SInt32 [numOutputChannels];
	for (unsigned int i = 0; i < numOutputChannels; ++i)
		channelMap[i] = -1;

//OUR_NUMBER_OF_CHANNELS is the number of channels you are using
// for AULab, this is the number of output channels of your AULab
session document

inDeviceChannels is a OUR_NUMBER_OF_CHANNELS sized array
each entry in this array describe which channel of the device that
channel fo the document should go to
if the number is > than the number of device channels, we skip it
(this is the "unused" part of the AULab output channel config)

	for (unsigned int i = 0; i < OUR_NUMBER_OF_CHANNELS ++i) {
		SInt32 chan = inDeviceChannels[i];
		if (chan >= 0 && UInt32(chan) < numOutputChannels)
			channelMap[chan] = i;
	}

// print it out
#if VERBOSE_DEVICE_CHANS
	printf ("Passed in:\n[");
	for (unsigned int i = 0; i < OUR_NUMBER_OF_CHANNELS; ++i)
		printf ("%d, ", inDeviceChannels[i]);
	printf ("]\n");
	printf ("Setting Device Channels\n\t[");
	for (unsigned int i = 0; i < numOutputChannels; ++i)
		printf ("%d, ", channelMap[i]);
	printf ("]\n");
#endif

// set it
	ca_require_noerr (result = mOutputAU.SetProperty
(kAudioOutputUnitProperty_ChannelMap, kAudioUnitScope_Input, 0,
								channelMap, (numOutputChannels * sizeof(SInt32))), home);


_______________________________________________ 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
References: 
 >Re: Output Channel Selection Redux (From: Bob Ingraham <email@hidden>)

  • Prev by Date: Re: Why Does Mono File Play as Stereo?
  • Next by Date: Subgraph Possibility?
  • Previous by thread: Re: Output Channel Selection Redux
  • Next by thread: Re: Output Channel Selection Redux
  • Index(es):
    • Date
    • Thread