【问题标题】:Issue with sox resample library apissox 重采样库 API 的问题
【发布时间】:2014-09-16 12:03:21
【问题描述】:

组,

目标:我正在尝试使用 sox-resample 库,从输入速率(44.1Khz,2 通道,16 位)下采样, 输出速率(16Khz,1 通道,16 位)。是否可以在此过程中使用 sox-resample 库。

Sox Resample 库来源在这里:http://sourceforge.net/p/soxr/code/ci/master/tree/

我试过soxr_oneshot这个api,产生的输出,没有输入缓冲区的原声, 它的语音输出听起来很奇怪,与原始语音输入相差甚远。

还尝试了 soxr_create 和 soxr_process api,但没有得到正确的输出。

我不确定,如果这些 api(soxr_oneshot、soxr_create 和 soxr_process)有一个选项, 降级通道数,以及是否可以指定16位或8位。

也不确定,我是否应该使用 LibSox api,例如 sox_create_effect/sox_add_effect,以及这是否是一个更好的选择。

这是使用 soxr_oneshot 的示例代码,请告诉我,可能是什么问题,或者如果您有任何建议。

#define INPUT_RATE  (44100)
#define OUTPUT_RATE (16000)
#define INPUT_NUM_CHANNELS (2)
#define OUTPUT_NUM_CHANNELS (1)

#define OUTPUT_BLOCK_ALIGN (2)

/*
ibuf - pointer to input buffer.
length - length of input buffer.
block_align - sample size of input rate.
*/
static int sox_test_function(void *ibuf, UINT32 length, UINT32 block_align)
{

    size_t olen = (size_t)((length * OUTPUT_RATE * OUTPUT_NUM_CHANNELS)/ (INPUT_RATE * OUTPUT_NUM_CHANNELS));   
    float * obuf = (float *)malloc(OUTPUT_BLOCK_ALIGN * olen);
    memset(obuf, 0, (OUTPUT_BLOCK_ALIGN * olen));
    size_t odone;
    FILE *ofile;
    UINT32 written = 0;

    //SKR: Need to find out, if we can downgrade # of channels..can we do that..??
    //also not sure..how to specify 16 bit/8 bit..etc..
    soxr_error_t err = soxr_oneshot(
    INPUT_RATE,
    OUTPUT_RATE,
    1,
    ibuf , length/block_align, NULL,
    obuf, olen/OUTPUT_BLOCK_ALIGN, &odone,
    NULL,
    NULL,
    NULL);

    ofile = fopen("nwave_file_16k_pcm.raw", "wb");

    if (ofile == NULL) {
        perror("Invalid file specified.");
        exit(-1);
    }

    written = fwrite(obuf, OUTPUT_BLOCK_ALIGN, odone, ofile); // Consume output.

   return 0;

}

如果有什么问题,或者您有什么建议,请告诉我。

【问题讨论】:

    标签: sox libsox


    【解决方案1】:

    请参考sox源文件中示例程序中的example3.c。您已使用 sox 效果“速率”进行下采样。我尝试了它并能够成功地对 wav 文件进行下采样,但我在波形被剪裁时遇到了问题。你可以参考我的帖子她Downsampling a wav file using libsox

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 2015-11-21
      • 2021-06-02
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      相关资源
      最近更新 更多