UWP: waveInOpen returns WAVERR_BADFORMAT



我正在尝试使用winmm.dll在UWP中录制音频。执行WaveInopen方法(https://msdn.microsoft.com/en-us/library/dd743847(v=vs.85).aspx(,我总是会得到Waverr_badformat,无论我使用的是很长时间(这也需要很长时间(基因5s(。我的代码如下:

recorder.cs:

Win32.WAVEFORMATEX waveFormatEx = new Win32.WAVEFORMATEX();
                waveFormatEx.wFormatTag = (ushort)Win32.WaveFormatFlags.WAVE_FORMAT_PCM;
                waveFormatEx.nChannels = 1;
                waveFormatEx.nSamplesPerSec = 8000;
                waveFormatEx.wBitsPerSample = 16;
                waveFormatEx.nBlockAlign = 2;
                waveFormatEx.nAvgBytesPerSec = 16000;
                Win32.MMRESULT hr = Win32.waveInOpen(ref hWaveIn, deviceId, ref waveFormatEx, delegateWaveInProc, 0, (int)Win32.WaveProcFlags.CALLBACK_FUNCTION);

win32.cs:

[StructLayout(LayoutKind.Sequential)]
    public struct WAVEFORMATEX
    {
        public ushort wFormatTag;
        public ushort nChannels;
        public uint nSamplesPerSec;
        public uint nAvgBytesPerSec;
        public ushort nBlockAlign;
        public ushort wBitsPerSample;
        public ushort cbSize;
    }
[DllImport("winmm.dll")]
        public static extern MMRESULT waveInOpen(ref IntPtr hWaveIn, int deviceId, ref WAVEFORMATEX wfx, DelegateWaveInProc dwCallBack, int dwInstance, int dwFlags);

具有相同参数的相同代码在Windows表单应用程序中工作正常(并在Split second中执行(,但是在UWP应用程序中,它没有,我不知道为什么。我可以在UWP中使用的正确格式?

在使用UWP项目时,您可以牢记:这是功能的有限子集(为了安全性和跨设备兼容性(。因此,UWP项目与Win32 API无关。即使您的代码在模拟器上编译/运行,也将:

  • 手臂设备上的故障(因为它们肯定没有Win32 DLL(
  • 失败的应用程序提交给Microsoft Store

所以,如果我们要谈论音频,则必须考虑Wasapi,因为它与UWP https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v===vs.85(.aspx

相关内容

  • 没有找到相关文章

最新更新