【发布时间】:2020-11-27 08:42:42
【问题描述】:
我正在尝试学习 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;
}
我首先尝试将输入缓冲区写入输出缓冲区以播放它正在接收的内容,然后尝试仅打印它以查看它是否正在获取任何数据。它总是 0.0 或 -0.0。
一些可能相关的事情:
- 我正在使用 macos Catalina。
- 播放示例代码运行良好,可以生成锯齿波并听到。
- 我正在使用带有两个立体声输入和两个立体声输出的 USB 音频接口。
- 我已经尝试了 Pa_GetDeviceCount() 提供的所有设备,并通过 Pa_GetDeviceInfo(i) 进行了迭代。
- 在从任何类型的开发工作中休息一段时间后,我又回到了 C/C++,那是使用 C# 和 JS,所以我忘记了很多低级的东西。
我初始化流的代码是:
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
}
我的代码或我的设置有什么问题会导致这种情况吗?
【问题讨论】:
标签: c++ macos audio signal-processing portaudio