问题标签 [resampling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
20887 浏览

algorithm - 我在哪里可以找到有关双三次插值和 Lanczos 重采样的好读物?

我想在 C++ 中实现上述两种图像重采样算法(双三次和 Lanczos)。我知道那里有几十个现有的实现,但我仍然想自己做。我想做到这一点,部分是因为我想了解它们是如何工作的,部分是因为我想给他们一些主流实现中没有的功能(比如可配置的多 CPU 支持和进度报告)。

我尝试阅读维基百科,但这些东西对我来说有点太干了。也许对这些算法有更好的解释?我在 SO 或 Google 上都找不到任何东西。

补充:似乎没有人能给我一个关于这些主题的好链接。至少有人可以在这里解释一下吗?

0 投票
4 回答
15956 浏览

audio - How do you do bicubic (or other non-linear) interpolation of re-sampled audio data?

I'm writing some code that plays back WAV files at different speeds, so that the wave is either slower and lower-pitched, or faster and higher-pitched. I'm currently using simple linear interpolation, like so:

This works fine, but it tends to sound OK only when I lower the frequency of the playback (i.e. slow it down). If I raise the pitch on playback, this method tends to produce high-frequency artifacts, presumably because of the loss of sample information.

I know that bicubic and other interpolation methods resample using more than just the two nearest sample values as in my code example, but I can't find any good code samples (C# preferably) that I could plug in to replace my linear interpolation method here.

Does anyone know of any good examples, or can anyone write a simple bicubic interpolation method? I'll bounty this if I have to. :)

Update: here are a couple of C# implementations of interpolation methods (thanks to Donnie DeBoer for the first one and nosredna for the second):

In these functions, x1 is the sample value ahead of the point you're trying to estimate and x2 is the sample value after your point. x0 is left of x1, and x3 is right of x2. t goes from 0 to 1 and is the distance between the point you're estimating and the x1 point.

The Hermite method seems to work pretty well, and appears to reduce the noise somewhat. More importantly it seems to sound better when the wave is sped up.

0 投票
8 回答
17713 浏览

algorithm - 实时数据捕获的百分比

我正在寻找一种确定实时数据捕获百分位数的算法。

例如,考虑一个服务器应用程序的开发。

服务器的响应时间可能如下:17 ms 33 ms 52 ms 60 ms 55 ms 等。

报告第 90 个百分位响应时间、第 80 个百分位响应时间等很有用。

天真的算法是将每个响应时间插入到一个列表中。当请求统计时,对列表进行排序并在适当的位置获取值。

内存使用量与请求数量呈线性关系。

在有限的内存使用情况下,是否有一种算法可以产生“近似”百分位数统计信息?例如,假设我想以一种处理数百万个请求的方式解决这个问题,但只想使用一千字节的内存进行百分位跟踪(放弃对旧请求的跟踪不是一个选项,因为百分位应该是适用于所有请求)。

还要求没有分布的先验知识。例如,我不想提前指定任何桶范围。

0 投票
1 回答
1272 浏览

bash - 如何确保 sox 在不知道版本的情况下不会执行自动抖动?

在将音频引入我们的语音检测系统之前,我使用 sox 对音频进行重新采样,但是我遇到了一个问题,即 sox 的 14.3 版本默认为重新采样操作添加了自动抖动,这是我们不想要的。

如果我们知道我们总是使用 sox ≥ 14.3,这将不是问题,因为我们可以使用新-D标志来禁用它:

但是,我们不能保证我们将使用 sox ≥ 14.3,因此如果需要,我需要某种方式来指定 -D 标志,否则将其省略(因为它在无法识别时出错)。

有任何想法吗?

0 投票
1 回答
4121 浏览

resize - 如何使用 Lanczos 调整大小

我可以很容易地计算出 Lanczos 中使用的 sinc(x) 曲线的值,并且我已经阅读了之前关于 Lanczos 调整大小的解释,但是对于这个领域的新手,我不明白如何实际应用它们。

要使用 lanczos 重新采样,假设您将输出和输入相互叠加,点表示像素位置的位置。对于每个输出像素位置,您从该点取一个框 +- 3 个输出像素。对于位于该框中的每个输入像素,计算该位置的 lanczos 函数的值,并将输出像素坐标中与输出位置的距离作为参数。然后,您需要通过缩放计算值来归一化计算值,使它们加起来为 1。然后将每个输入像素值与相应的缩放值相乘,并将结果加在一起以获得输出像素的值。

  1. 例如,在编程术语中“覆盖输入和输出”实际上是什么意思?
  2. 在给定的方程中 lanczos(x) = { 0 if abs(x) > 3, 1 if x == 0, else sin(x*pi)/x } x 是什么?

作为一个简单的例子,假设我有一个具有 14 个值的输入图像(即在地址 In0-In13 中): 20 25 30 35 40 45 50 45 40 35 30 25 20 15

我想将其放大 2 倍,即具有 28 个值的图像(即在地址 Out0-Out27 中)。

显然,地址 Out13 中的值将与地址 In7 中的值相似,但我实际乘以哪些值来计算 Out13 的正确值?算法中的 x 是什么?

0 投票
1 回答
1098 浏览

java - 使用 java imageIO 重新采样时 jpeg 已损坏

ImageIO 生成的 JPEG 图像在 windows 文件资源管理器和 safari 网络浏览器上正确查看,但在 FireFox 中,重新采样的图像被剪裁。

如何在不破坏重采样的情况下使用 ImageIO?

代码应该调整图像大小以保持纵横比,以及进行 jpeg 压缩,将其转换为字节 [] 数组,该数组可以写入套接字。

我的一些代码。在这个片段中,我尝试添加 Jui 库,但仍然是同样的问题。

0 投票
2 回答
1411 浏览

algorithm - 重新采样一系列点

我有一个带有 X 个样本的 3d 点数组(想象一个球的轨迹)。

现在,我想重新采样这些点,以便我有一个新的数组,其中包含 y 个样本的位置。

y 可以大于或小于 x 但不能小于 1。总会有至少 1 个样本。

算法如何将原始数组重新采样为新数组?谢谢!

0 投票
4 回答
10843 浏览

java - resample / upsample sound frames from 8Khz to 48Khz (Java/Android)

The application that I am trying to develop for andriod, records frames at 48Khz (PCM 16bits & mono) and sends them to the network. Also, there is an incoming stream of audio at 8Khz. So, I receive 8Khz sampled frames and play them (my AudioTrack object is set to 8Khz), but when playing them, everything works but the latency is HUGE. It takes like around 3 seconds until you hear something.

I think that if I upsample the received frames from 8Khz to 48Khz and play them, there won't be such a huge playing latency. In fact when I record and play frames at the same rate, the latency is really low. The bad thing is that I am forced to do it this way: send to 48Khz and receive to 8Khz.

As explained before, I'm trying to upsample a sound frame (16bits PCM) from 8Khz to 48Khz. Does anybody know any routine/library/API in Java that does this???

I know the basics about upsampling a discreet signal, but I consider that to design and implement my own FIR filter and convolute it with the audio stream ....is way too much. Also, it is over my knowledge.

So...does anybody can help me with this?? Does anybody know any library/routine in Java that I can use?? Any suggestions or alternatives??

0 投票
1 回答
903 浏览

java - 如何在 java/xuggler 中混音多个音频通道?

像将 6 声道环绕声混合到立体声?xuggler 抛出:错误 com.xuggle.xuggler - 错误:inputChannels > 2;不支持

0 投票
2 回答
1774 浏览

java - Java中最快和最有效的音频上采样例程

我需要将音频样本从 11025 和 22050 转换为 44100;我正在寻找最快和最好听的转换程序。我要求用纯 Java 给出答案,而不需要外部例程或库。源是代表左右通道的短值数组,像这样交错LRLRLRLR
我听说高斯变换是最好的,但它是CPU杀手。

更新
要添加更多细节,我想要最好和最快的混合。答案将提供适合近实时通信的出色音频。
更新 2
我正在寻找一些简短的代码示例,应该是音频大师的 ez 点