Неверный код ошибки

я использую portaudio играть звук. Я хочу иметь возможность выбрать выход через пользовательский интерфейс. Мне это так удалось:

PaError err = Pa_Initialize();
if( err != paNoError )
return false;

qDebug() <<"Port audio succeed initialization !";

int numDevices;

numDevices = Pa_GetDeviceCount();
if( numDevices <= 0 )
{
qDebug() << "ERROR: Pa_CountDevices returned " << numDevices;
return false;
}

const PaDeviceInfo *deviceInfo;
bool isThereOutput = false;
int i = 0;
while(i < numDevices and !isThereOutput)
{
deviceInfo = Pa_GetDeviceInfo( i );
isThereOutput = (deviceInfo->maxOutputChannels > 0);
i++;
}
if(!isThereOutput)
{
qDebug() << "No output device";
return false;
}

PaError errorOpening;

if(outputDevice != "")
{
PaStreamParameters outputDeviceInfo;
int numDevices = Pa_GetDeviceCount();

const   PaDeviceInfo *deviceInfo;
for(int i = 0; i<numDevices; i++ )
{
deviceInfo = Pa_GetDeviceInfo( i );
if(deviceInfo->maxOutputChannels > 0 && deviceInfo->name == outputDevice)
{
outputDeviceInfo.device = i;
outputDeviceInfo.channelCount = 1;
outputDeviceInfo.sampleFormat = paInt8;
outputDeviceInfo.suggestedLatency = deviceInfo->defaultLowOutputLatency;
}
}

if(outputDeviceInfo.channelCount > 1)
{
errorOpening = Pa_OpenStream(&stream, NULL, &outputDeviceInfo, SAMPLE_RATE, FRAME_PER_BUFFER, paNoFlag, audioCallback, this);
}

}

if(outputDevice == "" or errorOpening != paNoError)
{
if(errorOpening != paNoError)
qDebug() << "Can't open selected device ("<< outputDevice <<"), switching to the default one. Error : " << Pa_GetErrorText(errorOpening);
errorOpening = Pa_OpenDefaultStream( &stream,
0,            /* no input channels */
1,            /* mono output */
paInt8,       /* 8 bits output */
SAMPLE_RATE,
FRAME_PER_BUFFER, /* frames per buffer, i.e. the number
of sample frames that PortAudio will
request from the callback. Many apps
may want to use
paFramesPerBufferUnspecified, which
tells PortAudio to pick the best,
possibly changing, buffer size.*/
audioCallback, /* this is your callback function */
this ); /*This is a pointer that will be passed to
your callback*/
}

if(errorOpening != paNoError)
return false;

if(Pa_StartStream( stream ) != paNoError)
return false;

И это не удается:

Невозможно открыть выбранное устройство («Sortie intégr»), переключаясь на устройство по умолчанию. Ошибка: неверный код ошибки (значение больше нуля)

Но я не могу понять, почему OpenStream терпит неудачу со странным кодом ошибки и Pa_OpenDefaultStream работает как шарм.

Так :

  • Почему это не удается?
  • Почему выдает неправильный код ошибки?

1

Решение

Я предполагаю, что вы используете C ++ (хотя есть несколько любопытных and а также or в вашем коде.)

Если твой for петля не нашла ни одного PaDeviceInfo который удовлетворяет eviceInfo->maxOutputChannels > 0 && deviceInfo->name == outputDeviceтогда ваш outputDeviceInfo осталось ООН-инициализируется. Это означает, что его channelConnect может иметь любые значения, включая большие отрицательные значения. затем Pa_OpenStream не вызывается и ваш errorOpening также осталось ООН-инициализируется. Могу поспорить, что это причина Invalid error code (value greater than zero) когда вы кормите его в Pa_GetErrorText(),

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]