2

WASAPI を使用する Windows Phone プロジェクトで libsamplerate を使用して、キャプチャした 2 チャネル/48khz/32 ビット オーディオを 1 チャネル/8khz/32 ビットに再サンプリングしようとしています。

リサンプリングによって、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 アプリでコードを使用します。問題の原因は何ですか?

4

1 に答える 1