问题标签 [winmm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
280 浏览

visual-studio - “即使我安装了 Windows SDK (SFML Visual Studio),也无法打开文件‘winmm.lib’

我正在尝试在 Visual Studio 上设置 SFML,但我遇到了这个错误,我搜索的所有地方都告诉我需要安装 Windows SFK,但我做了多次,甚至使用了 Visual Studio Installer 的东西,但它从来没有工作过。 .

如果有人知道如何解决这个问题,我会很高兴知道^-^

0 投票
1 回答
349 浏览

c# - UWP:waveInOpen 返回 WAVERR_BADFORMAT

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

记录器.cs:

Win32.cs:

具有相同参数的相同代码在 Windows 窗体应用程序中工作得很好(并在瞬间执行),但在 UWP 应用程序中却没有,我不知道为什么。我可以在 UWP 中使用的正确格式是什么?

0 投票
0 回答
86 浏览

qt - 当我的程序中的 winmm.dll 时,QMediaPlayer 没有声音

我用 QMediaPlayer 播放了一些声音,效果很好。然后我使用了第三个设备,它的 dll api 依赖于 windows winmm.dll,然后当我将 winmm.dll 加入我的程序时,我的 QMediaPlayer 没有播放声音。我不知道为什么。我认为 winmm.dll 影响了 QMediaPlayer。

0 投票
3 回答
4445 浏览

c++ - 包括 winmm.lib 不起作用

我正在尝试用一个简单的猜数字游戏编写一个小程序。

我想使用一个简单的线程在它后面播放一个 mp3 文件。我已阅读如何在 c++ 程序中播放或打开 *.mp3 或 *.wav 声音文件?,但我无法让它工作。它总是吐出错误:

这是我的代码:

我尝试winmm.lib从某个地方下载,因为它似乎没有找到库(只是猜测)。

我做错了什么,还是需要包含其他标题?

0 投票
2 回答
1887 浏览

c# - Windows 10 在 C# 中获取系统音频静音状态

我尝试使用 winmm.dll 无济于事,我已经使用了我发现的其他几个项目,比如这个布局良好的教程,但是除了 getVolume 方法返回的 -1 和其他的无意义值之外,我什么也没得到方法。

有没有我可以用来做这个的图书馆?有没有更现代的例子(这是 2010 年之前的)?我研究了 IAudioEndpointVolume 接口,但它不能通过 .NET 获得,而且我不是 C++ 人。

非常感谢任何帮助。

0 投票
1 回答
174 浏览

c++ - 在 C++ 中使用 WASAPI 录制时如何访问音频波形缓冲区?

我之前使用 winmm 库使用类似这样的语法访问波形信息waveInAddBuffer(hwi, &wh[i], sizeof(WAVEHDR));所以我必须传递指向要存储波形数据的内存块 (&wh[i]) 的指针,以便访问它我刚刚做了这个 wh[i].lpData
在 WASAPI 中是否有类似的功能?

0 投票
0 回答
185 浏览

c++ - 在 C++ 中使用 PlaySound() 更改 BGM

因为是第一次使用这个功能(我是一个非常早的初学者,三个月前开始用c++编写代码),所以我想尝试一下,并取得了不同程度的成功:基本上,我的问题是通过在我的程序中,我首先使用 PlaySound() 函数,如下所示: PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC);

如您所见,该文件是我使用 VS2017 直接包含在我的项目中的资源。但问题不存在,因为声音本身可以正常播放。
当我尝试停止此声音并播放另一首歌曲(也在我的项目资源中)时,问题就出现了。我是这样做的:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC); Sleep(2000); PlaySound(MAKEINTRESOURCE(IDR_WAVE2), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC);
这是我测试 PlaySound 的工作原理的方式,但从根本上说,它是在我的程序中多次调用 playsound 函数的方式。问题是,当我运行它时,它会编译,但会给出一个内存访问冲突错误(法语,抱歉)。
所以我试着先停止播放第一个声音,然后播放第二个,像这样:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC); Sleep(2000); PlaySound(NULL, NULL, SND_ASYNC); PlaySound(MAKEINTRESOURCE(IDR_WAVE2), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC);
但我仍然遇到同样的错误。最后我搞砸了,发现像这样添加 SND_NOSTOP 标志:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC); Sleep(2000); PlaySound(NULL, NULL, SND_ASYNC); PlaySound(MAKEINTRESOURCE(IDR_WAVE2), NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC | SND_NOSTOP); 没有导致错误运行正常,但是第二首歌曲从不播放,只是没有声音。

最后一点,我想补充一点,我尝试交换 IDR_WAVE1 和 IDR_WAVE2 并且它与互换的歌曲效果恰到好处,所以它(可能?)不是这里的原因。
感谢您的阅读!



感谢@TedLyngmo,我阅读了手册并将提供的示例用于工作代码:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), GetModuleHandle(NULL), SND_RESOURCE | SND_LOOP | SND_ASYNC); PlaySound(NULL, 0, 0); PlaySound(MAKEINTRESOURCE(IDR_WAVE2), GetModuleHandle(NULL), SND_RESOURCE | SND_LOOP | SND_ASYNC | SND_NOSTOP);

0 投票
0 回答
52 浏览

c# - 使用 P/Invoke 从 C# 调用 wimm 并且不确定函数签名

我正在尝试使用 P/Invoke 从 C# 调用 Windows 多媒体 API (winmm.dll)。

原因是我正在尝试移植一些非托管 C++ 代码,这些代码以不同的频率生成音调,并且对托管库没有运气,因此我试图直接重用已经运行良好的 C++ 代码。

我首先访问 pinvoke.net 并查找各种函数签名并从那里粘贴到提供的 DllImport 行中。

然而,让我感到困惑的是,事物的映射方式明显不一致。

例如,waveOutPrepareHeader 函数(MS Docspinvoke.net)。第二个参数是指向 WAVEHDR 结构的指针。pinvoke.net 页面对我来说很有意义,因为它应该是一个 IntPtr,它指向包含该结构的内存块。我使用 GlobalAlloc 和 GMEM_FIXED 准备了这个,然后 Marshal.StructureToPtr 来填充数据。然后,我将从 GlobalAlloc 返回的指针作为 IntPtr 传递给函数。

但是,对于 waveOutOpen ( MS Docs , pinvoke.net ) 和 waveOutWrite ( MS Docs , pinvoke.net ) 等其他函数,指向结构的指针作为 ref 传递给与非托管结构匹配的托管结构。

为什么有区别?将 ref 传递给托管结构时它是如何工作的?P/Invoke 层是否只是检测到这一点并在内部进行映射?

我想知道,因为在某些情况下,我在代码运行时遇到了访问冲突,所以我试图用细齿梳来完成函数调用,这对我来说没有意义。

0 投票
0 回答
56 浏览

winapi - 调用waveInOpen时stdio重定向“失败”,为什么?

这是我的基本程序,它应该很容易用 VisualStudio(甚至 express)编译。

如果您从不带参数的命令行调用它,一切都会打印出来(几个“Hello World!”)。如果你把它重定向到一个文件(myprog.exe > blah.txt),再一次,一切正常,几行“Hello World!” 按预期结束在文件中。

但是,如果您有一个参数(这样waveInOpen被调用),它不会将任何内容重定向到该文件。该文件为空。如果您不重定向输出,它将很好地打印到命令提示符。

除非您取消注释 std::flush 行,否则该文件不为空并且一切正常。

导致这种情况的幕后到底发生了什么?无论如何,不​​应该在退出时刷新标准输出并通过管道传输到文件吗?waveInOpen()像这样搞砸 stdio 缓冲的调用是什么?

FWIW,这是因为我们从 TCL 和 Python 调用这个程序来对附加产品进行音频质量测量,并且没有任何内容被读回,即使从命令行运行时它会打印出来(而不是重定向) )。

0 投票
1 回答
73 浏览

c - Query state of all Midi knobs on midiInOpen

I have a MIDI controller with several knobs. Is it possible to query state of all values, which these knobs have, when I connect to the device using midiInOpen function without physically moving each of them?