Bruger SoundTouch C på Windows og C ++ på Linux?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at integrere SoundTouch (https://www.surina.net/soundtouch/) som et delt bibliotek i en Qt app på tværs af platforme. Versionen i Ubuntu repos synes at give et C ++-grænseflade som denne: [7]


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);


Men det ser ud til, at den normale måde at bruge den på Windows er gennem SoundTouchDLL C wrapper (som giver eksporten af ​​\_\_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);


Hvis jeg forstår korrekt, har Linux ikke brug for \_\_cdecl annotationerne, den C-baserede SoundTouchDLL-grænseflade er specifikt til Windows. SoundTouchDLL.h indeholder tydeligt Windows-specifik kode (f.eks. #include <windows.h>. C ++ SoundTouch-biblioteket indeholder ikke annoteringer til eksport af nogen symboler med \_\_cdecl, så det kan ikke bruges som et delt bibliotek (DLL) på Windows. C-grænsefladen er påkrævet.


Har jeg forstået det korrekt? Er det virkelig normalt at bruge C API til SoundTouch på Windows, men brug C ++ API på Linux? Er der nogen måde at bruge den samme API på begge platforme (helst uden at skulle ændre SoundTouch)?

Bedste reference