[Stk] RtAudio multiple channel input/output
Gary Scavone
gary at ccrma.Stanford.EDU
Mon Oct 18 07:35:10 PDT 2004
Hi Dimoni,
I suggest defining __RTAUDIO_DEBUG__ if you haven't already done so. I
don't have any personal experience with this hardware. Are you sure
you are using the correct device identifier? Compile and run the
"info.cpp" program in the tests directory to see what number you should
use.
--gary
On Sunday, October 17, 2004, at 03:48 PM, dimoni at dimoni.demon.nl wrote:
> Hi Gary et al.,
>
> I am trying to get multiple input/output channels with a Digi002r from
> Digidesign but I am running into problems.
> I have tested if I can get multiple input from other sound cards and I
> get the same errors although when running probe.cpp from the tutorial
> I obtain the correct information for each device.
>
> Output from probe.cpp:
>
> device = 1
> : maximum output channels = 8
> : maximum input channels = 2
> duplex = 2
> device = 2
> : maximum output channels = 2
> : maximum input channels = 2
> duplex = 2
> device = 3
> : maximum output channels = 18
> : maximum input channels = 18
> duplex = 18
>
> I have split your code in order to have an audio class where I define
> the process and stop member functions.
>
> AudioClass.cpp code:
>
> #include <iostream>
> #include <stk/RtAudio.h>
>
> class AudioClass
> {
> int SR;
> int nBuffers;
> int bufferSize;
> int inputChannels, outputChannels;
> int inputDevice, outputDevice;
> RtAudio *audio;
>
> public:
> AudioClass( int inputDevice,int inputChannels, int outputDevice, int
> outputChannels, int SR, int bufferSize, int nBuffers)
> {
> this -> SR = SR;
> this -> nBuffers = nBuffers;
> this -> bufferSize = bufferSize;
> this -> inputChannels = inputChannels;
> this -> outputChannels = outputChannels;
>
> this -> inputDevice = inputDevice;
> this -> outputDevice = outputDevice;
> this -> SR = SR;
>
> try
> {
> audio = new RtAudio(inputDevice, inputChannels, outputDevice,
> outputChannels,
> RTAUDIO_FLOAT64, SR, &bufferSize, nBuffers);
> }
>
> catch (RtError &error)
> {
> error.printMessage();
> exit(EXIT_FAILURE);
> }
> }
>
> ~AudioClass()
> {
> delete audio;
> }
>
> void ProcessAudio(int Callback)
> {
> try
> {
> audio->setStreamCallback(/*&AudioClass::*/Callback, NULL); // Set
> the stream callback function
> audio->startStream(); // Start the stream
> }
> catch (RtError &error)
> {
> error.printMessage();
> exit(1);
> }
> }
>
> void StopAudio()
> {
> try
> {
> // Stop and close the stream
> audio->stopStream();
> audio->closeStream();
> }
> catch (RtError &error)
> {
> error.printMessage();
> exit(1);
> }
> }
> }; //end of AudioClass
>
>
> ******* Main code: *******
>
>
> #include <iostream>
> #include "AudioClass.cpp"
>
> int Callback( char *buffer, int bufferSize, void *userData)
> {
> // Note: do nothing here for pass through.
> double *my_buffer = (double *) buffer;
>
> // Scale input data for output.
> for (int i=0; i<bufferSize; i++) {
> // Do for two channels.
> *my_buffer++ *= 0.9;
> *my_buffer++ *= 0.9;
> }
>
> return 0;
> }
>
> int main()
> {
> char input;
> AudioClass audio(3, 0, 3, 4, 44100, 256, 4);
>
> audio.ProcessAudio(&Callback);
> std::cout << "\nRunning duplex ... press <enter> to quit.\n";
> std::cin.get(input);
> audio.StopAudio();
>
> return 0;
> }
>
> After running it, I get the following error:
>
> "
> RtApi: unable to open specified device(s) with given stream parameters:
> RtApiCore: OS-X error getting stream format for device
> (Digidesign: Digidesign HW ( 002 )).
>
> rtAudioInOut has exited with status 1.
> "
> I have run the same code by providing 2 inputs and 2 outputs and it
> works fine.
> In order to test if there was a hardware problem, I have tried to get
> multiple outputs by using PortAudio and had no problems.
> Is there anything I am missing in my code?
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 7108 bytes
Desc: not available
URL: <https://cm-mail.stanford.edu/pipermail/stk/attachments/20041018/9c2e9449/attachment.bin>
More information about the Stk
mailing list