gpt4 book ai didi

c++ - 在 Windows Phone 中使用 libsamplerate 对音频重新采样

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:44 26 4
gpt4 key购买 nike

我正在尝试在使用 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 应用程序中使用该代码。问题的根源可能是什么?

最佳答案

我发现了问题。我不应该创建一个新的 SRC_STATE对象并通过调用 st=src_new(2,1,&er2); 在我的函数的每次调用中将其删除和 src_delete(st);但是调用它们一次就足以对整个音频进行重新采样。也不需要为 SRC_DATA 使用指针。 .我修改了我的代码如下,它现在工作正常。

void BackEndAudio::ChangeSampleRate(BYTE* buf)
{
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 *out=new float[160];

//change samplerate
sd.data_in=(float *)onechbuf;
sd.data_out=out;
sd.input_frames=960;
sd.output_frames=160;
sd.src_ratio=(double)1/6;
sd.end_of_input=0;
int er=src_process(st,&sd);
}

关于c++ - 在 Windows Phone 中使用 libsamplerate 对音频重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21063473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com