【问题标题】:UWP: waveInOpen returns WAVERR_BADFORMATUWP:waveInOpen 返回 WAVERR_BADFORMAT
【发布时间】:2018-07-22 10:33:51
【问题描述】:

我正在尝试使用 Winmm.dll 在 UWP 中录制音频。在我执行 waveInOpen 方法 (https://msdn.microsoft.com/en-us/library/dd743847(v=vs.85).aspx) 后,无论我使用什么数据,我总是得到 WAVERR_BADFORMAT(它也需要很长时间,大约 5 秒)。我的代码如下所示:

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 窗体应用程序中运行良好(并在瞬间执行),但在 UWP 应用程序中却没有,我不知道为什么。我可以在 UWP 中使用的正确格式是什么?

【问题讨论】:

  • 你明白 WinForms 和 UWP 是完全不同的,对吧?一个简单的谷歌搜索带我到这个code.msdn.microsoft.com/windowsapps/…看看
  • @Alex 是的,我知道它们是不同的。我以前看过那个链接。我只是想知道如何/如果我可以使用这个 dll 来做到这一点(它适用于音频播放)。

标签: c# uwp winmm


【解决方案1】:

在使用 UWP 项目时,请记住:它是功能的有限子集(出于安全性和跨设备兼容性的考虑)。因此,UWP 项目与 Win32 API 无关。即使您的代码正在模拟器上编译/运行,它也会:

  • 在 ARM 设备上失败(因为它们肯定没有 Win32 DLL)
  • 应用提交到 Microsoft Store 失败

所以,如果我们谈论的是音频,你必须考虑 WASAPI,因为它与 UWP https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85).aspx 100% 兼容

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2018-09-15
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多