还是音频重采样的问题,https://segmentfault.com/a/11... 的后续,利用场景是对已解码的8K采样率、16bit采样深度、单声道、无文件头的raw格局语音数据进行重采样,将采样率变为16K,其余参数不变。之前试过libsox,Release版本始终无奈正确运行,起因也没有找到,FFmpeg做进去的采样后果又和SoX不同,跟模型对不上。依据官网的说法soxr和SoX应该是一样的,只不过是专门做疾速高精度的一维声采样。对于我这么简略的利用场景,实践上它俩成果应该能够达到齐全一样,然而我用libsoxr做进去的采样后果和SoX就不一样,肉眼看上去波形没有区别,然而看二进制文件差异还挺大的……我尝试扭转了一些参数,包含dither和quality的各项参数,然而都没有失去雷同后果。也搜了讨论区和StackOverflow,都没有失去解答。
上面是代码,心愿有人能指出我的问题。

#include "soxr.h"bool Resample (short* pWavBuf, int wavLen, short* pWav16k, int wavLen16k) {//pWavBuf为输出的raw格局语音数据,采样率8K,采样深度16bit;//wavLen为输出数据的长度,单位为样点数,并非数据长度的字节数//pWav16k为输入的缓存//wavLen16k为输入数据的长度,单位仍然为样点数    size_t ilen = wavLen;       //input samples per channel    size_t olen = ilen * 2;     //output samples per channel    wavLen16k = olen;    double irate = 8000;        //input sample reate    double orate = 16000;       //output sample rate        soxr_io_spec_t io_spec;     //io format    io_spec.itype = SOXR_INT16; //input datatype    io_spec.otype = SOXR_INT16; //output datatype    io_spec.scale = 1;          //linear    io_spec.e = NULL;           //reserved    io_spec.flags = SOXR_TPDF;  //SOXR_NO_DITHER也试过,都不行        soxr_quality_spec_t qua_spec;   //quality    qua_spec = soxr_quality_spec(SOXR_HQ, 0);   //not sure        size_t idone, odone;    soxr_error_t error;        //single call to resample one wav    error = soxr_oneshot(irate, orate, 1, pWavBuf, ilen, &idone, pWav16k, olen, &odone, &io_spec, &qua_spec, NULL);        return true;}