13

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

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

4

4 回答 4

9

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

于 2010-11-16T23:34:36.430 回答
6

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

看一下示例程序SoundStretch。它提供了使用 SoundTouch 库更改速度(不改变音高)以及改变音高(不改变速度)和播放速率(同时改变音高和速度)的示例。我会查看源代码并使用你需要的东西。

我看到的唯一问题是您使用的是 mp3 格式,而这使用的是 WAV 格式,因此您需要先转换文件。我真的不认为你会发现一个程序可以直接在任何类型的压缩文件上执行你想要的操作,因为用于执行此类操作的方法的性质。如果您想进一步了解整个过程,它会使用相位声码器。

于 2010-02-23T19:35:34.290 回答
4

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

于 2011-02-20T21:26:49.120 回答
-1

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

于 2010-03-08T08:12:52.760 回答