我正在尝试在使用 WASAPI 的 windows phone 项目中使用 libsamplerate 将捕获的 2channel/48khz/32bit 音频重新采样为 1channel/8khz/32bit。
我需要通过重新采样从 960 个原始帧中获取 160 帧。使用GetBuffer
方法捕获音频后,我将捕获的 7680 字节的 BYTE 数组发送到以下方法:
void BackEndAudio::ChangeSampleRate(BYTE* buf)
{
int er2;
st=src_new(2,1,&er2);
//SRC_DATA sd defined before
sd=new SRC_DATA;
BYTE *onechbuf = new BYTE[3840];
int outputIndex = 0;
//convert Stereo to Mono
for (int n = 0; n < 7680; n+=8)
{
onechbuf[outputIndex++] = buf[n];
onechbuf[outputIndex++] = buf[n+1];
onechbuf[outputIndex++] = buf[n+2];
onechbuf[outputIndex++] = buf[n+3];
}
float *res1=new float[960];
res1=(float *)onechbuf;
float *res2=new float[160];
//change samplerate
sd->data_in=res1;
sd->data_out=res2;
sd->input_frames=960;
sd->output_frames=160;
sd->src_ratio=(double)1/6;
sd->end_of_input=1;
int er=src_process(st,sd);
transportController->WriteAudio((BYTE *)res2,640);
delete[] onechbuf;
src_delete(st);
delete sd;
}
src_process 方法没有返回错误并sd->input_frames_used
设置为 960 并sd->output_frames_gen
设置为 159,但渲染输出只是噪声。我在实时 VoIP 应用程序中使用该代码。问题的根源可能是什么?