问题标签 [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.
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 对行为没有影响。
任何帮助将非常感激。
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。
c# - midioutshortmsg 没有声音
所以我正在尝试使用 midiOutShortMsg() 在 C# 中播放单个音符。问题是没有声音播放。我想出的播放音符的一种方法是将 midiOutShortMsg() 放入从 i=0 到 10000 的 for 循环中。但我不相信 API 应该是这样工作的。
在项目的后期,我想将 MIDI 实现到 Kinect 项目中,并且让 for 循环延迟 Kinect 的实时反馈。所以for循环方法是不行的。
下面是我用来播放音符的代码,如果您注释掉 for 循环,则不会播放任何声音。任何帮助,将不胜感激。
c# - 如何使用 winmm.dll 将 wav 文件作为 Stream 播放
通常,我可以通过将文件名作为mciSendString方法的参数传递来使用 winmm.dll 播放 wav 文件。但是现在,我需要解密一个 wav 文件。返回对象是一个流,所以我不能传递文件名。
有什么方法可以通过 Stream 让 winmm.dll 播放声音?
winapi - 从立体声输入录制单声道
我有一个带有两个输入的音频接口:麦克风和乐器。在 Windows 中,它由单个立体声音频输入表示,左声道获取麦克风输入,右声道获取乐器输入。
我像这样打开录制会话:
waveIn
然后在函数中处理样本。它工作正常,但我只需要使用乐器(右声道)数据而不对麦克风感兴趣。我尝试nchannels=1
在上面的代码中进行设置,希望它能混合两个通道,但我只从麦克风(左)通道获取数据。有没有办法从立体声输入设置录制以仅获得正确的(或两者混合)音频通道数据(作为单声道录制)?
kinect - Kinect V2 中的静音检测
我正在使用 winmm.dll 使用以下方法从 kinect 录制音频:
目前,我正在使用停止按钮单击停止录制,但我想在检测静音时停止录制。因为我想删除“停止录制”按钮并在用户 10 秒内不说话时停止录制。
rust - 为什么要删除 println! 导致通过 FFI 调用的 Windows API 函数失败?
如果我println!
从以下代码中删除 ,则waveOutPrepareHeader
返回 code MMSYSERR_INVALPARAM
。
即使添加另一个println!
或删除thread::sleep
afterwaveOutWrite
也会导致waveOutPrepareHeader
return MMSYSERR_INVALPARAM
。
否则它工作正常。
c# - 将特定的音量和音高设置为 .wav 文件
在我的应用程序中,我需要录制一些 wav 文件并将它们设置为特定的音量和音高。现在我可以使用winmm.dll录制和播放 .wav 文件,但我不知道如何修改它们。
通过搜索互联网,我看到使用 NAudio.dll 可以修改 .wav 文件,但我并不完全理解它是如何工作的。
windows - 同时从多个应用程序打开单个 MIDI 输入流
我们正在添加对在我们的应用程序中访问各种 MIDI 控制器设备的支持。从我们自己的使用试验来看midiInOpen
,似乎只有一个应用程序可以使用midiInOpen
. 尝试打开 MIDI 设备的第二个应用程序失败并出现错误MMSYSERR_NOMEM
。
但是,我有一个商业应用程序(第 3 方)的示例,它设法与我们的应用程序(使用midiInOpen
)同时访问 MIDI 输入流。这表明还有另一种访问 MIDI 流的方法。
我使用 API 嗅探器查看 API 调用,而此应用程序不使用midiInOpen
. 它使用midiInMessage
and midiOutMessage
,并且从 API 文档中,这些似乎直接与驱动程序通信。
我从文档中看到,Windows 10 提供了对 MIDI 的新支持;我还没有尝试过它如何与使用midiInOpen
.
我已经联系了第三方应用程序开发人员,看看他们是否可以提供帮助。目前。我们的应用程序与他们的应用程序一起工作,但还有其他应用程序用于midiInOpen
访问 MIDI 数据,我们的应用程序不能与他们的应用程序共存。第一个调用midiInOpen
的应用程序获取 MIDI 流;第二次调用失败。
所有这些测试都是在 Windows 7 上完成的。我们需要支持 7 及更高版本。
我们的应用程序的 mac 版本在这方面运行良好。
python - 在 python 中使用 winmm.dll 获取输入设备
我想在我的窗口上列出我的输入设备(如麦克风等)。
代码在这里:
输出是段错误,当我删除byref
它时,它给了我None
作为输出。
请帮帮我,非常感谢:)