Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Portaudio输入缓冲区始终为空_C++_Macos_Audio_Signal Processing_Portaudio - Fatal编程技术网

C++ Portaudio输入缓冲区始终为空

C++ Portaudio输入缓冲区始终为空,c++,macos,audio,signal-processing,portaudio,C++,Macos,Audio,Signal Processing,Portaudio,我正在学习DSP编程,尝试创建自己的吉他效果,我正在使用Portaudio库来实现这一点。我遇到的问题是,无论我做什么,每当我在回调中读取输入缓冲区时,它都是空的。我已经尝试了几种不同的portaudio示例程序,但它们都不起作用。我还尝试了不同的输入,从音频接口到内部麦克风 我尝试过的基本回调代码: #define SAMPLE_RATE (44100) #define PA_SAMPLE_TYPE paFloat32 #define FRAMES_PER_BUFFE

我正在学习DSP编程,尝试创建自己的吉他效果,我正在使用Portaudio库来实现这一点。我遇到的问题是,无论我做什么,每当我在回调中读取输入缓冲区时,它都是空的。我已经尝试了几种不同的portaudio示例程序,但它们都不起作用。我还尝试了不同的输入,从音频接口到内部麦克风

我尝试过的基本回调代码:

#define SAMPLE_RATE         (44100)
#define PA_SAMPLE_TYPE      paFloat32
#define FRAMES_PER_BUFFER   (64)

static int paCallback(  const void *inputBuffer, 
                            void *outputBuffer,
                            unsigned long framesPerBuffer,
                            const PaStreamCallbackTimeInfo* timeInfo,
                            PaStreamCallbackFlags statusFlags,
                            void *userData )
{
    float *out = (float*)outputBuffer;
    const float *in = (const float*)inputBuffer;

    //unused variables
    (void) timeInfo;
    (void) statusFlags;
    (void) userData;

    for (int i = 0; i < FRAMES_PER_BUFFER; i+=2){
        printf("%.1f ", in[i]);
    }
    printf("\r");

    return paContinue;
}

我的代码或设置是否有任何问题导致出现这种情况?

对我来说,这个问题似乎是通过IDE运行应用程序造成的。Catalina拥有严格的权限,并且Visual Studio代码未被授予访问(或提示访问)麦克风的权限。当我直接运行可执行文件时,它会按预期工作

PaStreamParameters getInputParameters(){
    // input parameters
    PaStreamParameters inPar;
    inPar.device = Pa_GetDefaultInputDevice();// choose_device();

    inPar.channelCount = 2; // stereo
    inPar.sampleFormat = PA_SAMPLE_TYPE;
    inPar.suggestedLatency = Pa_GetDeviceInfo( inPar.device )->defaultLowInputLatency;
    inPar.hostApiSpecificStreamInfo = NULL;

    return inPar;
}

PaError err;
    printf("Initialising\n");
    err = Pa_Initialize();
    if( err != paNoError ) { printf(  "PortAudio error: %s\n", Pa_GetErrorText( err ) ); }

    printf("Getting parameters\n");
    PaStreamParameters inputParameters = getInputParameters();
    PaStreamParameters outputParameters = getOutputParameters();

    printf("Opening stream\n");
    PaStream *stream;
    /* Open an audio I/O stream. */
    err = Pa_OpenStream(    &stream,
                            &inputParameters,
                            &outputParameters,
                            SAMPLE_RATE,
                            FRAMES_PER_BUFFER,
                            0, //paclipoff
                            paCallback,
                            NULL
    );
    if( err != paNoError ) { printf(  "PortAudio error: %s\n", Pa_GetErrorText( err ) ); }

    ... // wait for input, close stream, etc
}