我正在编写一些以不同速度播放WAV文件的代码,因此波浪要么慢,要么低音,要么更快,音高更高.我目前正在使用简单的线性插值,如下所示:
int newlength = (int)Math.Round(rawdata.Length * lengthMultiplier);
float[] output = new float[newlength];
for (int i = 0; i < newlength; i++)
{
float realPos = i / lengthMultiplier;
int iLow = (int)realPos;
int iHigh = iLow + 1;
float remainder = realPos - (float)iLow;
float lowval = 0;
float highval = 0;
if ((iLow >= 0) && (iLow < rawdata.Length))
{
lowval = rawdata[iLow];
}
if ((iHigh >= 0) && (iHigh < rawdata.Length))
{
highval = rawdata[iHigh];
}
output[i] = …Run Code Online (Sandbox Code Playgroud) 你好,音频计算世界的人,
我有一系列样本可以呈现录音.让我们说它在44100Hz时是5秒.如何以更高的音高播放这个?是否可以动态增加和减少音高?就像让音调慢慢增加到速度加倍然后再下降.
换句话说,我想录制并播放它,好像被dj"划伤"一样
伪代码总是受欢迎的.我将用C写这篇文章.
谢谢,
编辑1
请允许我澄清我的意图.我想将播放保持在44100Hz,因此我需要在播放前操作样本.这也是因为我想要将音调增加的音频与以正常速率运行的音频混合.
用另一种方式表达,也许我需要以某种方式在相同数量的样本上缩小音频?这样播放时听起来会更快吗?
编辑2
另外,我想自己这样做.请不要图书馆(除非你觉得我可以选择代码并找到有趣的东西).
编辑3
用C语言编写的一段代码示例,它带有2个参数(样本数组和音高因子),然后返回一个新音频数组就太棒了!
PS我开始对此表示赏心,不是因为我认为已经给出的答案无效.我只是觉得在这个问题上获得更多反馈会很好.
获得奖项
老实说,我希望我可以将赏金分配给几个不同的答案,因为我认为这些答案非常有用.特别感谢丹尼尔向我传递了一些代码,而AShelly和Hotpaw2则提供了如此详细的回复.
最终,虽然我使用了数据专家引用的另一个SO问题的答案,因此该奖项归他所有.
再次感谢大家!