C#音频 - 如何伸展时间(不同速度,相同音高)

时间:2010-02-23 18:49:45

标签: c# audio pitch tempo

我正在尝试在C#(VS2008)中创建一个可以加载mp3的winform应用程序(其他格式很好,但至少可以使用mp3),并且能够在不影响音高的情况下调整播放速度(速度)。我真的不需要任何其他音频效果。我尝试使用DirectShow,但似乎没有提供时间拉伸功能。我能够合并irrklang,但似乎没有时间伸展能力。所以现在我转到了SoundTouch。这肯定有能力,但我不清楚如何在C#中实现。

几天之后,我所做的就是在SoundTouch DLL上使用DLLImport,并且能够成功检索版本号。在这一点上,我甚至不确定我是否可以做我正在尝试使用SoundTouch做的事情。任何人都可以提供有关如何实现SoundTouch或具有我正在寻找的功能的不同库的一些指导?谢谢。

4 个答案:

答案 0 :(得分:8)

如果有人仍然感兴趣,我已经为SoundTouch库编写了.Net包装类。 http://code.google.com/p/soundtouchnet/

答案 1 :(得分:6)

答案是SoundTouch可以做你想做的事。

查看示例程序SoundStretch。它给出了使用SoundTouch库来改变速度(不改变音高)以及改变音高(不改变速度)和回放速率(改变音高和速度)的例子。我会查看源代码并使用您需要的内容。

我看到的唯一问题是你使用的是mp3格式,而且它使用的是WAV格式,所以你需要先转换文件。我真的不认为你会发现一个程序可以直接在任何类型的压缩文件上执行你想要的程序,因为用于执行此类操作的方法的性质。如果你想更多地研究整个过程,它会使用phase vocoder

答案 2 :(得分:3)

在C#中使用SoundTouch的另一种方法是使用BASS声音库(http://un4seen.com)和BASS.NET包装器以及BASS_FX插件。 BASS_FX使用SoundTouch进行TimeStretching。

答案 3 :(得分:-1)

这是从C#调用的一种可能方法。您需要在C ++中编写COM包装器以包装SoundTouch DLL。准备好COM包装器后,可以将其导入.NET(C#)项目,并通过COM Wrapper调用底层的SoundTouch DLL。希望这会有所帮助。