问题标签 [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.
visual-studio - “即使我安装了 Windows SDK (SFML Visual Studio),也无法打开文件‘winmm.lib’
我正在尝试在 Visual Studio 上设置 SFML,但我遇到了这个错误,我搜索的所有地方都告诉我需要安装 Windows SFK,但我做了多次,甚至使用了 Visual Studio Installer 的东西,但它从来没有工作过。 .
如果有人知道如何解决这个问题,我会很高兴知道^-^
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 中使用的正确格式是什么?
qt - 当我的程序中的 winmm.dll 时,QMediaPlayer 没有声音
我用 QMediaPlayer 播放了一些声音,效果很好。然后我使用了第三个设备,它的 dll api 依赖于 windows winmm.dll,然后当我将 winmm.dll 加入我的程序时,我的 QMediaPlayer 没有播放声音。我不知道为什么。我认为 winmm.dll 影响了 QMediaPlayer。
c++ - 包括 winmm.lib 不起作用
我正在尝试用一个简单的猜数字游戏编写一个小程序。
我想使用一个简单的线程在它后面播放一个 mp3 文件。我已阅读如何在 c++ 程序中播放或打开 *.mp3 或 *.wav 声音文件?,但我无法让它工作。它总是吐出错误:
这是我的代码:
我尝试winmm.lib
从某个地方下载,因为它似乎没有找到库(只是猜测)。
我做错了什么,还是需要包含其他标题?
c# - Windows 10 在 C# 中获取系统音频静音状态
我尝试使用 winmm.dll 无济于事,我已经使用了我发现的其他几个项目,比如这个布局良好的教程,但是除了 getVolume 方法返回的 -1 和其他的无意义值之外,我什么也没得到方法。
有没有我可以用来做这个的图书馆?有没有更现代的例子(这是 2010 年之前的)?我研究了 IAudioEndpointVolume 接口,但它不能通过 .NET 获得,而且我不是 C++ 人。
非常感谢任何帮助。
c++ - 在 C++ 中使用 WASAPI 录制时如何访问音频波形缓冲区?
我之前使用 winmm 库使用类似这样的语法访问波形信息waveInAddBuffer(hwi, &wh[i], sizeof(WAVEHDR));
所以我必须传递指向要存储波形数据的内存块 (&wh[i]) 的指针,以便访问它我刚刚做了这个 wh[i].lpData
在 WASAPI 中是否有类似的功能?
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);
c# - 使用 P/Invoke 从 C# 调用 wimm 并且不确定函数签名
我正在尝试使用 P/Invoke 从 C# 调用 Windows 多媒体 API (winmm.dll)。
原因是我正在尝试移植一些非托管 C++ 代码,这些代码以不同的频率生成音调,并且对托管库没有运气,因此我试图直接重用已经运行良好的 C++ 代码。
我首先访问 pinvoke.net 并查找各种函数签名并从那里粘贴到提供的 DllImport 行中。
然而,让我感到困惑的是,事物的映射方式明显不一致。
例如,waveOutPrepareHeader 函数(MS Docs、pinvoke.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 层是否只是检测到这一点并在内部进行映射?
我想知道,因为在某些情况下,我在代码运行时遇到了访问冲突,所以我试图用细齿梳来完成函数调用,这对我来说没有意义。
winapi - 调用waveInOpen时stdio重定向“失败”,为什么?
这是我的基本程序,它应该很容易用 VisualStudio(甚至 express)编译。
如果您从不带参数的命令行调用它,一切都会打印出来(几个“Hello World!”)。如果你把它重定向到一个文件(myprog.exe > blah.txt)
,再一次,一切正常,几行“Hello World!” 按预期结束在文件中。
但是,如果您有一个参数(这样waveInOpen
被调用),它不会将任何内容重定向到该文件。该文件为空。如果您不重定向输出,它将很好地打印到命令提示符。
除非您取消注释 std::flush 行,否则该文件不为空并且一切正常。
导致这种情况的幕后到底发生了什么?无论如何,不应该在退出时刷新标准输出并通过管道传输到文件吗?waveInOpen()
像这样搞砸 stdio 缓冲的调用是什么?
FWIW,这是因为我们从 TCL 和 Python 调用这个程序来对附加产品进行音频质量测量,并且没有任何内容被读回,即使从命令行运行时它会打印出来(而不是重定向) )。
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?