之前不是做了个东方游戏的音乐ogg vorbis化的工具吗,现在xiph又出了一个新的编码叫做opus,于是想试试。不过它原生支持的是48kHz采样率,没有44.1kHz。看官方的说明,是推荐在需要的时候resample而不是更改代码让它支持44.1kHz。
本人对resample算法又没有研究,自然第一个想到的是去找现成的代码。网上搜索了一下,gpl啊lgpl协议下的代码倒是不少,这些协议都对私有软件不太友好。以后万一要做私有软件的话这些库就不能用了。
于是想着找个协议宽松一点的吧,网上看到有人推荐speex里面的resample。找是找来了不过一开始怎么样就是编译不过去。然后看到有人说opus_tools那一包代码里面也包含了这个resample,所以去参考了一下那边是怎么调用的。
最后得出的结论是要定义这些宏:
#define OUTSIDE_SPEEX #define RANDOM_PREFIX 这里填入你自己的一些字符 #define HAVE_GETOPT_H 1 #define FLOATING_POINT 1 #define USE_ALLOCA 1 #define SPX_RESAMPLE_EXPORT
然后需要的文件有
arch.h
resample.c
speex_resampler.h
stack_alloc.h
嗯,挺好,bsd协议,可以不开源的情况下静态链接。