gpt4 book ai didi

c++ - 使用soxr重采样时发生访问冲突

转载 作者:行者123 更新时间:2023-12-03 02:04:10 37 4
gpt4 key购买 nike

我无法使以下代码正常工作:

soxr_error_t err;
soxr_datatype_t itype = SOXR_INT16_I;
soxr_datatype_t otype = SOXR_INT16_I;
soxr_io_spec_t iospec = soxr_io_spec(itype, otype);
size_t idone = 0;
size_t odone = 0;
size_t const olen = (size_t)((speed * 44100) * (numframes * 2) / (44100 + (44100 * speed)) + .5);

// Do the resampling
short* output = new short[numframes * 2];
soxr_t sox = soxr_create(44100, 44100 * speed, 2, &err, &iospec, NULL, NULL);
if (!err)
soxr_process(sox, input, numframes * 2, &idone, output, olen * 2, &odone);
soxr_delete(sox);

我有PCM短数据输入( input对象),我也希望它也被重新采样为值 speed,并与原始采样率相乘(如您所看到的(44100是标准))。 numframes也是我发送的数据块中的帧数(以立体声表示)

问题是执行 soxr_process()方法时我的应用程序崩溃。 soxr_create()方法似乎没有错误,所以我真的不知道它可能是什么。

我目前只是在尝试加快声音,因此我将输出缓冲区设置为与原始缓冲区一样大,足以在重采样后容纳所有内容。

我怎么解决这个问题?我是否给 soxr_process()方法提供了错误的值?

编辑:
我也尝试过这种方法:
soxr_oneshot(4410, 44100 * speed, 2, input, numframes * 2, &idone, output, outputFrames * 2, &odone, &iospec, NULL, NULL);

但这也会引发违反Acces的错误。

提前致谢!

最佳答案

我已经可以使用以下代码修复它:

// Check the number of frames needed to fill extra or send to the next block
int outputFrames = numframes * speed;
int extraReadNeeded = numframes - outputFrames;

soxr_error_t err;

soxr_datatype_t itype = SOXR_INT16_I;
soxr_datatype_t otype = SOXR_INT16_I;
soxr_io_spec_t iospec = soxr_io_spec(itype, otype);

size_t idone = 0;
size_t odone = 0;

size_t const olen = (size_t)((speed * 44100) * (numframes * 2) / (44100 + (44100 * speed)) + .5);

// Do the resampling
short* output = new short[outputFrames * 4];
soxr_t sox = soxr_create(44100, 44100 * speed, 2, &err, &iospec, NULL, NULL);
if (!err)
err = soxr_process(sox, input, numframes * 2, &idone, output, outputFrames, &odone);
soxr_delete(sox);

似乎输出的大小不足我的预期。虽然真的不知道如何将其写入指针。现在是固定的。

如果有人有任何评论,请随时指出错误

关于c++ - 使用soxr重采样时发生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810789/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com