鳥の巣箱

ネトゲしたり、機械いじったり、ソフト書いたり、山篭ったり、ギャンブルしたりする人

MfPackのバグ

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


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

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