问题标签 [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 回答
337 浏览

c# - midiInGetNumDevs & midiOutGetNumDevs 没有正确更新

我正在编写一个 C# 应用程序,它支持 Novation Launchpad 的热插拔,它是 MIDI 设备。我正在使用该midi-dot-net库,它使用 Win32API 和winmm.dll's 函数,midiInGetNumDevs& midiOutGetNumDevs。虽然为了测试我没有使用midi-dot-net图书馆。

这是我的测试代码:

结果如下(我有 2 个 Launchpad 可供测试):

如果我插入设备,无论如何,显示的数字根本不会改变,并且程序似乎没有注册设备已插入。

如果我拔下其中一个启动板,它会减少插入的数量,但只有一次。如果我然后拔下第二个启动板,则数字永远不会改变。

这种行为听起来像这里描述的那样可疑,但这是 Windows 8 的更新。虽然我使用的是使用 Windows 8 的 Windows 10 内置升级升级的系统,但 KB 提供了更新winmm.dll的版本6.2.9200.16645,但在我的系统上是 version 10.0.10586.0。我曾尝试从第 3 方站点下载建议的 DLL 版本,但使用该 DLL 对行为没有影响。

任何帮助将非常感激。

0 投票
0 回答
311 浏览

multithreading - waveOutOpen(), waveOutWrite() 给我的线程未记录的消息 1024

声音输出功能给了我意想不到的信息。这是我做错了什么的迹象吗?如果是这样呢?否则是否有一个很好的来源可以解释这些消息可能是什么?

根据 https://wiki.winehq.org/List_Of_Windows_Messages,waveOutOpen() 给了我消息 955 MM_WOM_OPEN 作为记录,然后是未记录的 1024(可能是 DDM_SETFMT、DM_GETDEFID、NIN_SELECT、TBM_GETPOS、WM_PSD_PAGESETUPDLG、WM_USER

在主线程中:

在生成的音频线程中:

waveOutWrite() 没有记录以提供任何消息,但也给了我消息 1024。

0 投票
1 回答
781 浏览

c# - midioutshortmsg 没有声音

所以我正在尝试使用 midiOutShortMsg() 在 C# 中播放单个音符。问题是没有声音播放。我想出的播放音符的一种方法是将 midiOutShortMsg() 放入从 i=0 到 10000 的 for 循环中。但我不相信 API 应该是这样工作的。

在项目的后期,我想将 MIDI 实现到 Kinect 项目中,并且让 for 循环延迟 Kinect 的实时反馈。所以for循环方法是不行的。

下面是我用来播放音符的代码,如果您注释掉 for 循环,则不会播放任何声音。任何帮助,将不胜感激。

0 投票
0 回答
503 浏览

c# - 如何使用 winmm.dll 将 wav 文件作为 Stream 播放

通常,我可以通过将文件名作为mciSendString方法的参数传递来使用 winmm.dll 播放 wav 文件。但是现在,我需要解密一个 wav 文件。返回对象是一个流,所以我不能传递文件名。

有什么方法可以通过 Stream 让 winmm.dll 播放声音?

0 投票
0 回答
122 浏览

winapi - 从立体声输入录制单声道

我有一个带有两个输入的音频接口:麦克风和乐器。在 Windows 中,它由单个立体声音频输入表示,左声道获取麦克风输入,右声道获取乐器输入。

我像这样打开录制会话:

waveIn然后在函数中处理样本。它工作正常,但我只需要使用乐器(右声道)数据而不对麦克风感兴趣。我尝试nchannels=1在上面的代码中进行设置,希望它能混合两个通道,但我只从麦克风(左)通道获取数据。有没有办法从立体声输入设置录制以仅获得正确的(或两者混合)音频通道数据(作为单声道录制)?

0 投票
0 回答
26 浏览

kinect - Kinect V2 中的静音检测

我正在使用 winmm.dll 使用以下方法从 kinect 录制音频:

目前,我正在使用停止按钮单击停止录制,但我想在检测静音时停止录制。因为我想删除“停止录制”按钮并在用户 10 秒内不说话时停止录制。

0 投票
0 回答
96 浏览

rust - 为什么要删除 println! 导致通过 FFI 调用的 Windows API 函数失败?

如果我println!从以下代码中删除 ,则waveOutPrepareHeader返回 code MMSYSERR_INVALPARAM

即使添加另一个println!或删除thread::sleepafterwaveOutWrite也会导致waveOutPrepareHeaderreturn MMSYSERR_INVALPARAM

否则它工作正常。

0 投票
1 回答
572 浏览

c# - 将特定的音量和音高设置为 .wav 文件

在我的应用程序中,我需要录制一些 wav 文件并将它们设置为特定的音量和音高。现在我可以使用winmm.dll录制和播放 .wav 文件,但我不知道如何修改它们。

通过搜索互联网,我看到使用 NAudio.dll 可以修改 .wav 文件,但我并不完全理解它是如何工作的。

0 投票
1 回答
426 浏览

windows - 同时从多个应用程序打开单个 MIDI 输入流

我们正在添加对在我们的应用程序中访问各种 MIDI 控制器设备的支持。从我们自己的使用试验来看midiInOpen,似乎只有一个应用程序可以使用midiInOpen. 尝试打开 MIDI 设备的第二个应用程序失败并出现错误MMSYSERR_NOMEM

但是,我有一个商业应用程序(第 3 方)的示例,它设法与我们的应用程序(使用midiInOpen)同时访问 MIDI 输入流。这表明还有另一种访问 MIDI 流的方法。

我使用 API 嗅探器查看 API 调用,而此应用程序不使用midiInOpen. 它使用midiInMessageand midiOutMessage,并且从 API 文档中,这些似乎直接与驱动程序通信。

我从文档中看到,Windows 10 提供了对 MIDI 的新支持;我还没有尝试过它如何与使用midiInOpen.

我已经联系了第三方应用程序开发人员,看看他们是否可以提供帮助。目前。我们的应用程序与他们的应用程序一起工作,但还有其他应用程序用于midiInOpen访问 MIDI 数据,我们的应用程序不能与他们的应用程序共存。第一个调用midiInOpen的应用程序获取 MIDI 流;第二次调用失败。

所有这些测试都是在 Windows 7 上完成的。我们需要支持 7 及更高版本。

我们的应用程序的 mac 版本在这方面运行良好。

0 投票
1 回答
910 浏览

python - 在 python 中使用 winmm.dll 获取输入设备

我想在我的窗口上列出我的输入设备(如麦克风等)。

代码在这里:

输出是段错误,当我删除byref它时,它给了我None作为输出。

请帮帮我,非常感谢:)