端口音频遍历音频数据
PortAudio iterate through audio data
由于我是PortAudio的新手,我尝试了一个来自互联网的示例程序。该程序能够通过回调功能记录麦克风的输入。
我想获取表示为数值(例如浮点数)的录制音频的每个样本。我无法弄清楚麦克风的录制数据存储在哪里。
这是回调函数:
static int recordCallback(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData)
{
paTestData *data = (paTestData*)userData;
const SAMPLE *rptr = (const SAMPLE*)inputBuffer;
SAMPLE *wptr = &data->recordedSamples[data->frameIndex * NUM_CHANNELS];
long framesToCalc;
long i;
int finished;
unsigned long framesLeft = data->maxFrameIndex - data->frameIndex;
(void)outputBuffer; /* Prevent unused variable warnings. */
(void)timeInfo;
(void)statusFlags;
(void)userData;
if (framesLeft < framesPerBuffer)
{
framesToCalc = framesLeft;
finished = paComplete;
}
else
{
framesToCalc = framesPerBuffer;
finished = paContinue;
}
if (inputBuffer == NULL)
{
for (i = 0; i<framesToCalc; i++)
{
*wptr++ = SAMPLE_SILENCE; /* left */
if (NUM_CHANNELS == 2) *wptr++ = SAMPLE_SILENCE; /* right */
}
}
else
{
cout << endl << "SAMPLE" << endl;
for (i = 0; i<framesToCalc; i++)
{
*wptr++ = *rptr++; /* left */
//cout << rptr<<endl;
if (NUM_CHANNELS == 2) *wptr++ = *rptr++; /* right */
}
}
data->frameIndex += framesToCalc;
return finished;
}
音频输入流在此处初始化:
err = Pa_OpenStream(
&stream,
&inputParameters,
NULL, /* &outputParameters, */
SAMPLE_RATE,
FRAMES_PER_BUFFER,
paClipOff, /* we won't output out of range samples so don't bother clipping them */
recordCallback,
&data);
传入数据存储在回调的inputBuffer
指针中。根据调用Pa_OpenStream
时使用inputParameters
应该能够将输入缓冲区转换为相应数据类型的数组(例如,如果paFloat32
用作示例格式,则可以将缓冲区解释为const float*
)。
函数中将传入数据复制到另一个缓冲区中以进行进一步处理(在回调之外)。
多个通道样本在缓冲器中交错。例如,对于立体声输入inputBuffer[0]
是左声道的第一个样本,inputBuffr[1]
是右声道的第一个样本,inputBuffer[2]
是左声道的第一个样本,依此类推。样本总数通过回调的framesPerBuffer
参数提供。
相关文章:
- 捕获音频数据并保存到AudioFlinger中的原始PCM文件
- 如何将 cdparanoia 读取的 CD 音频数据移交给 ALSA 播放器?
- 如何将静默音频数据写入音频流
- 使用FFMPEG编写多线程视频和音频数据包
- 以选定的比特率发送音频数据 - 喊播
- 使用C 中的套接字通过网络发送音频数据
- C++将音频数据发送到Linux和Mac OS X上的扬声器输出
- 使用C++(基于C#程序)保存wav文件时,音频数据不正确
- FFmpeg:编码PCM 16音频数据分配错误
- 如何在Raspberry Pi上用C++将接收到的UDP音频数据正确写入ALSA
- 实时录制/转换音频数据到WAV
- 端口音频遍历音频数据
- 在 C++ 中使用 libsndfile 从 WAV 文件中提取原始音频数据
- 如何用音频数据填充AVFrame
- 如何获取 mp3 音频数据包以在 C/C++ 中流式传输
- OpenAL回放捕获的音频数据c++
- 如何从Tizen上的实时FFT中获得最准确的音频数据?
- 如何使用Windows内置的mp3解码器访问原始解码音频数据?
- 播放产生的音频数据在声音中有噪音和周期性的咔嗒声
- 音频数据?我需要一个典型的例子