コードを調べるとsoxr.c
、ディザで疑似乱数ジェネレーターが使用されていることがわかりますが、シードは時間から生成された実装の詳細です。
p->seed = (unsigned long)time(0) ^ (unsigned long)(size_t)p;
ライブラリによって公開されているようには見えないため、テストを実行するたびに同じ結果を得るために特定のシードを設定することはできません。
これを容易にするために、以下のような API のマイナーな拡張を提案しましたが、ライブラリの知識が豊富な人はより良い方法を提案できるかもしれません。
加えSoxr.h
て:
typedef unsigned long soxr_seed_t;
// set or retrieve the random seed used by the dithering function
void soxr_setseed(soxr_t resampler, soxr_seed_t new_seed);
soxr_seed_t soxr_getseed(soxr_t* resampler);
加えSoxr.c
て:
void soxr_setseed(soxr_t resampler, soxr_seed_t new_seed)
{
resampler->seed = new_seed;
}
soxr_seed_t soxr_getseed(soxr_t resampler)
{
return resampler->seed;
}
ここでまだ私を驚かせているライブラリーの 1 つのことは
soxr_oneshot()
、この問題 (非決定性) に悩まされていないことです。SOXR_NO_DITHER
への内部呼び出しによってシードがどのように固定または設定されるのかわかりませんsoxr_create()
。
ライブラリの知識が豊富な人が説明できるかもしれない何かをここで明らかに見逃しています。