我正在尝试在C#(VS2008)中创建一个winform应用程序,它可以加载一个mp3(其他格式会很好,但至少是mp3)并能够调整播放速度(速度)而不影响音高。我真的不需要任何其他音频效果。我尝试使用DirectShow,但似乎没有提供时间拉伸功能。我能够融入 irrklang 但这似乎没有时间伸展能力。所以现在我转向了 SoundTouch。这肯定有能力但我不清楚如何在C#中实现。
几天之后,我所做的就是在SoundTouch DLL上使用DLLImport,并且能够成功检索版本号。在这一点上,我甚至不确定我是否可以做我正在尝试使用SoundTouch做的事情。任何人都可以提供一些关于如何实现SoundTouch或具有我正在寻找的功能的不同库的指导?谢谢。
答案是SoundTouch可以做你想做的事。
看一下示例程序 SoundStretch。它给出了使用SoundTouch库来改变速度(不改变音高)以及改变音高(不改变速度)和播放速率(改变音高和速度)的例子。我会查看源代码并使用您需要的内容。
我看到的唯一问题是你使用的是mp3格式,而且它使用的是WAV格式,所以你需要先转换文件。我真的不认为你会找到一个程序直接在任何类型的压缩文件上执行你想要的程序,因为用于执行此类操作的方法的性质。它使用了 相位声码器 如果你想进一步研究整个过程。
答案是SoundTouch可以做你想做的事。
看一下示例程序 SoundStretch。它给出了使用SoundTouch库来改变速度(不改变音高)以及改变音高(不改变速度)和播放速率(改变音高和速度)的例子。我会查看源代码并使用您需要的内容。
我看到的唯一问题是你使用的是mp3格式,而且它使用的是WAV格式,所以你需要先转换文件。我真的不认为你会找到一个程序直接在任何类型的压缩文件上执行你想要的程序,因为用于执行此类操作的方法的性质。它使用了 相位声码器 如果你想进一步研究整个过程。
在C#中使用SoundTouch的另一种方法是使用BASS声音库(http://un4seen.com)使用BASS.NET包装器和BASS_FX插件。 BASS_FX使用SoundTouch进行TimeStretching。
这是从C#调用的一种可能方法。您需要在C ++中编写COM包装器以包装SoundTouch DLL。准备好COM包装器后,可以将其导入.NET(C#)项目,并通过COM Wrapper调用底层的SoundTouch DLL。希望这可以帮助。