MfPackのバグ

Delphi,FMX,MfPack,OS,Programing,VCL,WASAPI,Windows

DelphiでWASAPIを扱うためのライブラリとしてMfPackが公開されてますが、
これにバグがあるようで、全く動かない。

WinApi.CoreAudioApi.AudioClient.pas

  
  

IAudioClient.IsFormatSupported

ダウンロード時の宣言はこうなってます。

function IsFormatSupported(ShareMode: AUDCLNT_SHAREMODE;
pFormat: WaveFormatEx;
out ppClosestMatch: PWaveFormatEx): HResult; stdcall;

MSDを確認すると、第2引数のpFormatは「p」とついているだけあって、ここで渡すWAVEFORMATEXはポインタ型でないとダメなんですね。
IAudioClient::IsFormatSupported (audioclient.h) – Win32 apps | Microsoft Docs

つまり、ここの正しい宣言としてはこう。

function IsFormatSupported(ShareMode: AUDCLNT_SHAREMODE;
pFormat: PWaveFormatEx;
out ppClosestMatch: PWaveFormatEx): HResult; stdcall;

  
  
  
  

IAudioClient.GetDevicePeriod

ダウンロード時の宣言はこうなってます。

function GetDevicePeriod(out phnsDefaultDevicePeriod: REFERENCE_TIME;
phnsMinimumDevicePeriod: REFERENCE_TIME): HResult; stdcall;

MSDにはこう書いてあります。
IAudioClient::GetDevicePeriod (audioclient.h) – Win32 apps | Microsoft Docs

つまり、ここの正しい宣言としてはこう。

function GetDevicePeriod(out phnsDefaultDevicePeriod: PREFERENCE_TIME;
phnsMinimumDevicePeriod: PREFERENCE_TIME): HResult; stdcall;

これで問題なく動作しました。

どうも調べると他にもバグがあるらしい。
WASAPI AudioClient.GetMixFormat() returns AUDCLNT_E_NOT_INITIALIZED – Stack Overflow

必要に迫られたら修正していく方向で(

修正入れたら追記していこうと思ってます。