2015-12-17 2 views
3

Я хочу сделать программу гитарных эффектов, поэтому я пытаюсь запустить пример кода pa_fuzz.c из PORTAUDIO API.Проблема с кодом примера PortAudio

Он работает на paWDMKS host api. Но когда я подключаю гитару с помощью Behringer ucg 102 (без lantency), host api изменяется на paMME, и я получаю код ErrorCode 1 и сообщение: «неопределенная внешняя ошибка». Также в Видеовыход студии консоли я получаю тонны сообщений, как:

'ConsoleApplication4.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\SHCore.dll' 
'ConsoleApplication4.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\shlwapi.dll' 
'ConsoleApplication4.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\shell32.dll' 
'ConsoleApplication4.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\dbgcore.dll' 
'ConsoleApplication4.exe' (Win32): Unloaded 'C:\Program Files\Native Instruments\Rig Kontrol 3 Driver\asio\rig3asio32.dll' 

Вот фрагмент кода для объекта «PaHostErrorInfo»;

PaHostErrorInfo *err2 = Pa_GetLastHostErrorInfo(); 
    printf(err2->errorText); 

Вот исходный код:

#include <stdio.h> 
#include <math.h> 
#include "portaudio.h" 
/* 
** Note that many of the older ISA sound cards on PCs do NOT support 
** full duplex audio (simultaneous record and playback). 
** And some only support full duplex at lower sample rates. 
*/ 
#define SAMPLE_RATE   (8000) 
#define PA_SAMPLE_TYPE  paFloat32 
#define FRAMES_PER_BUFFER (64) 

typedef float SAMPLE; 

float CubicAmplifier(float input); 
static int fuzzCallback(const void *inputBuffer, void *outputBuffer, 
         unsigned long framesPerBuffer, 
         const PaStreamCallbackTimeInfo* timeInfo, 
         PaStreamCallbackFlags statusFlags, 
         void *userData); 

/* Non-linear amplifier with soft distortion curve. */ 
float CubicAmplifier(float input) 
{ 
    float output, temp; 
    if(input < 0.0) 
    { 
     temp = input + 1.0f; 
     output = (temp * temp * temp) - 1.0f; 
    } 
    else 
    { 
     temp = input - 1.0f; 
     output = (temp * temp * temp) + 1.0f; 
    } 

    return output; 
} 
#define FUZZ(x) CubicAmplifier(CubicAmplifier(CubicAmplifier(CubicAmplifier(x)))) 

static int gNumNoInputs = 0; 
/* This routine will be called by the PortAudio engine when audio is needed. 
** It may be called at interrupt level on some machines so don't do anything 
** that could mess up the system like calling malloc() or free(). 
*/ 
static int fuzzCallback(const void *inputBuffer, void *outputBuffer, 
         unsigned long framesPerBuffer, 
         const PaStreamCallbackTimeInfo* timeInfo, 
         PaStreamCallbackFlags statusFlags, 
         void *userData) 
{ 
    SAMPLE *out = (SAMPLE*)outputBuffer; 
    const SAMPLE *in = (const SAMPLE*)inputBuffer; 
    unsigned int i; 
    (void) timeInfo; /* Prevent unused variable warnings. */ 
    (void) statusFlags; 
    (void) userData; 

    if(inputBuffer == NULL) 
    { 
     for(i=0; i<framesPerBuffer; i++) 
     { 
      *out++ = 0; /* left - silent */ 
      *out++ = 0; /* right - silent */ 
     } 
     gNumNoInputs += 1; 
    } 
    else 
    { 
     for(i=0; i<framesPerBuffer; i++) 
     { 
      *out++ = FUZZ(*in++); /* left - distorted */ 
      *out++ = *in++;   /* right - clean */ 
     } 
    } 

    return paContinue; 
} 

/*******************************************************************/ 
int main(void); 
int main(void) 
{ 
    PaStreamParameters inputParameters, outputParameters; 
    PaStream *stream; 
    PaError err; 
    PaDeviceInfo *info; 
    err = Pa_Initialize(); 

    if(err != paNoError) goto error; 
    info = Pa_GetDeviceInfo(1); 
    inputParameters.device = Pa_GetDefaultInputDevice(); /* default input device */ 
    if (inputParameters.device == paNoDevice) { 
     fprintf(stderr,"Error: No default input device.\n"); 
     goto error; 
    } 
    inputParameters.channelCount = 2;  /* stereo input */ 
    inputParameters.sampleFormat = PA_SAMPLE_TYPE; 
    inputParameters.suggestedLatency = Pa_GetDeviceInfo(inputParameters.device)->defaultLowInputLatency; 
    inputParameters.hostApiSpecificStreamInfo = NULL; 
    info = Pa_GetDeviceInfo(4); 
    outputParameters.device = Pa_GetDefaultOutputDevice(); /* default output device */ 
    if (outputParameters.device == paNoDevice) { 
     fprintf(stderr,"Error: No default output device.\n"); 
     goto error; 
    } 
    outputParameters.channelCount = 2;  /* stereo output */ 
    outputParameters.sampleFormat = PA_SAMPLE_TYPE; 
    outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency; 
    outputParameters.hostApiSpecificStreamInfo = NULL; 

    err = Pa_OpenStream(
       &stream, 
       &inputParameters, 
       &outputParameters, 
       SAMPLE_RATE, 
       FRAMES_PER_BUFFER, 
       0, /* paClipOff, */ /* we won't output out of range samples so don't bother clipping them */ 
       fuzzCallback, 
       NULL); 
    PaHostErrorInfo *err2 = Pa_GetLastHostErrorInfo(); 
    printf(err2->errorText); 
    if(err != paNoError) goto error; 

    err = Pa_StartStream(stream); 
    if(err != paNoError) goto error; 

    printf("Hit ENTER to stop program.\n"); 
    getchar(); 
    err = Pa_CloseStream(stream); 
    if(err != paNoError) goto error; 

    printf("Finished. gNumNoInputs = %d\n", gNumNoInputs); 
    Pa_Terminate(); 
    return 0; 

error: 
    Pa_Terminate(); 
    fprintf(stderr, "An error occured while using the portaudio stream\n"); 
    fprintf(stderr, "Error number: %d\n", err); 
    fprintf(stderr, "Error message: %s\n", Pa_GetErrorText(err)); 
    return -1; 
} 

Может вы, ребята, пожалуйста, посмотрите на то, что может быть проблема? Я установил драйверы BEHRINGER USB WDM AUDIO 2.8.40. (Я использую этот интерфейс usb с гитарной установкой)

+1

Пожалуйста, не размещать изображения * текста *. Копировать и вставлять текст, как есть, в сообщение вместо этого. Идет как для кода, так и для ошибок. –

+0

Выполняется ли разгрузка dll до или после сообщения об ошибке? –

+0

разгрузка происходит, когда Pa_Terminate (), я выложу код. Я думаю, что это не проблема – Heixss

ответ

1

Я переключился на другой порт USB, и это сработало. Я думаю, что это ошибка от portaudio. Я оставлю этот ответ здесь. Теперь у меня другая проблема. LATENCY :(так расстраивает играть на гитаре с латентностью. Что может быть причиной этой латентности? Я подключаю свою гитару к behringer ucg102 (славящийся без латентности). И снова я использую его с гитарной риг, где я .? близко к 0 латентности Это проблема из Portaudio библиотеки Этот код на их примере «pa_fuzz.c»

New Edit:. латентность Исправлена ​​проблема, выбрав нужный вход и выход deivice

 Смежные вопросы

  • Нет связанных вопросов^_^