Java中最快、最有效的音频上采样例程

Java中最快、最有效的音频上采样例程,java,audio,resampling,sample-rate,near-real-time,Java,Audio,Resampling,Sample Rate,Near Real Time,我需要将音频样本从11025和22050转换为44100;我正在寻找最快和最好的转换程序。我要求用纯Java给出答案,而不需要外部例程或库。源是一个短值数组,表示左通道和右通道,像这样交错 我听说高斯变换是最好的,但它是cpu杀手。 更新 为了增加更多的细节,我想最好和最快的混合。答案将提供适合于近实时通信的声音良好的音频。 更新2 我正在为这一个寻找一些简短的代码示例,应该是ez points for you audio guru的嗯,很难足够慢地重新采样,因此它不是实时的:-)

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

更新
为了增加更多的细节,我想最好和最快的混合。答案将提供适合于近实时通信的声音良好的音频。
更新2

我正在为这一个寻找一些简短的代码示例,应该是ez points for you audio guru的

嗯,很难足够慢地重新采样,因此它不是实时的:-) 最好的、仍然快速的解决方案之一是进行正向FFT,然后使用所需的任何采样率进行反向FFT

您可以自己实现,也可以复制并粘贴任何FFT实现


这可能是100倍实时或更快,但不确定您是否需要1000倍的速度(在这种情况下,您可以使用线性或双三次插值):-)

您可以(最终)在每隔一个采样填充0后使用fir-您的上采样为2或4。这将是足够快的实时。大多数应用程序的音频质量都很好。

我想我需要的公式在本页上,但我不是一个数学爱好者。有没有数学怪才想发表评论?你必须在最快还是最好之间做出选择。最快的解决方案可能是复制样本,而最好的情况是,你可以想象任何数量的计算,甚至可能是一个理解所听到的内容并知道其声音的AI:)你不可能同时要求两者。一个合理的约束(比如适合实时)可能会得到更多的答案。如果你设定了一个特定的algorytm,请改变你的问题标题以反映这一点。我不确定,但用零填充其他样本可能听起来很奇怪。。。它可能会复制这些值。即使对嵌入的零应用FIR()滤波器,这听起来不是很奇怪吗?@Frank和Roland Illing您可能没有意识到复制样本(假设信号由一个已填充零的整数上采样)可以用一个非常简单的FIR完美实现:所有值=1,长度=上采样量(本例中为2或4)。实际上,最好使用较长的窗口函数(例如sinc或Hamming)。过滤器将填充间隙,并用作插值器。哪种功能“最佳”取决于信号以及您想要(或不想要)的特性。