0

我正在尝试将 SoundTouch ( https://www.surina.net/soundtouch/ ) 作为共享库集成到跨平台的 Qt 应用程序中。Ubuntu repos 中的版本似乎提供了这样的 C++ 接口:

this->soundTouchHandle = new SoundTouch();
this->soundTouchHandle->setSampleRate(44100);
this->soundTouchHandle->setChannels(2);

this->soundTouchHandle->setSetting(SETTING_USE_AA_FILTER, 1);
this->soundTouchHandle->setPitch(this->pitchScalingFactor);

但似乎在 Windows 上使用它的正常方法是通过 SoundTouchDLL C 包装器(它提供__cdecl导出):

this->soundTouchHandle = soundtouch_createInstance();
soundtouch_setSampleRate(this->soundTouchHandle, 44100);
soundtouch_setChannels(this->soundTouchHandle, 2);

soundtouch_setSetting(this->soundTouchHandle, SETTING_USE_AA_FILTER, 1);
soundtouch_setPitch(this->soundTouchHandle, this->pitchScalingFactor);

如果我理解正确的话,Linux 不需要__cdecl注释,基于 C 的 SoundTouchDLL 接口是专门为 windows 设计的。SoundTouchDLL.h 清楚地包含特定于 Windows 的代码(例如#include <windows.h>)。另一方面,核心 C++ SoundTouch 库不包含用于导出任何符号的注释__cdecl,因此它不能用作 Windows 上的共享库 (DLL),需要 C 接口。

我是否正确理解了这一点?在 Windows 上使用 SoundTouch 的 C API,而在 Linux 上使用 C++ API 真的很正常吗?有什么方法可以在两个平台上使用相同的 API(最好无需修改 SoundTouch)?

4

0 回答 0