问题标签 [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 投票
1 回答
11604 浏览

windbg - 如何找到“访问冲突”的来源

简而言之,我有一个 C# 应用程序执行大量 mciSendString 调用(通过 dllimport)来控制 wav 文件播放(本质上是打开、播放、暂停、停止、状态、关闭)。运行一段时间后,应用程序在没有通知的情况下因“访问冲突”而崩溃。

即使我从我的 vs2012 运行应用程序,Visual Studio 也没有捕获到异常。即使使用“强制中断异常”选项,我在从 vs2012 调试它时也没有运气。因此,我设置了 WER 来生成故障转储,并且我正在使用带有 psscor2.dll 插件的 windbg 来调试它。

然后按顺序,使用以下命令,这就是我得到的(缩短为可读性必不可少的):

$>.ecxr

$>~*kb

$>!分析-v

异常似乎发生在 Unloaded_mciwave.dll 的线程 #30 中,但我不知道如何进一步推动调试。我怎样才能更好地了解发生了什么?

我怎样才能知道这两行之间发生了什么?

提前谢谢你的帮助。

0 投票
1 回答
338 浏览

c# - Windows Phone 开发:使用 winmm.dll 播放内部 mp3 文件

我需要有关执行 mp3 播放器文件的帮助。我在互联网上搜索,发现只有在需要从外部目录获取 mp3 文件时如何使用 winmm.dll 库。我需要为我的应用程序的内部目录修改它。

让我们展示一下代码:

我像这样创建 Mp3Player 类:

并要求在此处打开内部文件:

这在打开文件时给我一个错误,所以我确定问题出在我发送给班级的目录路径中。我尝试了一些版本,但没有人工作,在互联网上找不到任何帮助我的东西。你们中的一些人可以告诉我使工作发挥作用的正确途径吗?

非常感谢大家。

对不起,我的英语真的很糟糕。

0 投票
0 回答
588 浏览

c# - TIME_KILL_SYNCHRONOUS 是什么意思?

我为多媒体计时器编写了一个 C# 包装器:该Start方法timeSetEvent使用用户指定的回调调用,该Stop方法只需调用timeKillEvent.

我有一个单元测试应该检查它是否Stop有效:

我的问题是,有时此测试会失败,因为该事件在我调用后又发生了一次Stop。我尝试TIME_KILL_SYNCHRONOUS在创建时添加标志,但它似乎不起作用。我无法从文档中理解它到底应该做什么。根据 MSDN:

使用 TIME_KILL_SYNCHRONOUS 和 TIME_CALLBACK_FUNCTION 标志创建事件可防止在调用 timeKillEvent 函数后发生事件。

这是否意味着任何未决事件都不会被执行?或者更确切地说,timeKillEvent在所有未决事件执行后,该方法可能不会返回?

我在网上搜索但找不到答案。

无论如何,这对我的测试没有帮助。我可以让我的测试始终通过的唯一方法是Sleep在我调用Stop.

0 投票
2 回答
848 浏览

c# - 简单的 MP3 播放器,通知不工作

C#初学者在这里。我想让播放器在歌曲结束后立即停止,所以我尝试了此处所述的解决方案。问题是歌曲播放完后播放器没有停止,我需要手动点击停止按钮才能选择另一首歌曲。我在某个地方做错了吗?

非常感谢!

0 投票
0 回答
125 浏览

winapi - 两个不同游戏控制器(joyGetPosEx)中相同按钮的不同位?

我有两个不同的游戏控制器,我一直在使用 joyGetPosEx (Windows API) 从它们那里获取信息。它们每个都有具有相同物理标签的按钮,但其中一些按钮具有不同的位值(按下按钮时由 joyGetPosEx 返回)。这让我感到惊讶,因为它们都声称与 PS3 兼容。

例如,它们都有“形状”按钮——三角形、圆形、X 和正方形。但是在一个控制器(由“Snakebyte”制造)上,这些按钮根据joyGetPosEx具有以下位值:

另一方面(由“Rock Candy”制造),他们有:

另一个区别是 4096 是 Snakebyte 上的 DPad Up 和 Rock Candy 上的 Home,而 8192、16384 和 32768 是 Snakebyte 上的其他 DPad 方向,而 Rock Candy 上什么都没有。Rock Candy 的 DPad 按钮没有位值(尽管它们确实设置了与 Snakebyte 相同的 POV),并且 Snakebyte 的 Home 按钮没有位值。

从 16 到 2048 的所有其他位在两个控制器之间匹配。

那么,我应该如何知道哪个位对应于任意控制器上的哪个按钮?或者至少是一个任意的“PS3 兼容”控制器。我天真地想象,由于它们被认为是“PS3 兼容的”,它们会遵循一些位和按钮的标准映射。

0 投票
1 回答
1334 浏览

winapi - 为什么 windows Vista/更新版本的 waveOutOpen() 说默认输出设备不能播放 44100hz 单声道 8 位 PCM,而 waveOutGetDevCaps() 说可以?

我正在尝试使用 winmm ( waveOutXxxx()) 打开一个 44100hz 8 位单声道 PCM 流,而无需软件自动转换(我希望完全控制输出波,而无需进行此类转换可能导致的过滤)。

这在 Windows XP 和 wine 中运行良好。但是在 Windows Vista 和更新版本(尝试过 Vista、7 和 8.1)上,我得到了

所以让我们这样做:

现在输出是

...但是等等,WAVE_FORMAT_4M08被列为支持!

是什么赋予了?谢谢。

0 投票
3 回答
26276 浏览

c++ - 在哪里可以找到“winmm.lib”(我使用的是 Visual Studio 2012)

我的操作系统是 64 位 Windows 7。
我想在 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D10\Tutorials\Tutorial02 中构建 DirectX 示例。但是当我构建错误时发生致命错误

LNK1104:“winmm.lib”无法打开文件。

我重新安装了 Direct SDK,但没有任何变化。我还将路径(包括,lib)添加到设置中。

如果我从项目设置中删除“winmm.lib”,则无法打开“comctl32.lib”。两个库都已经存在于属性>链接器>输入中。

我怎么解决这个问题?

0 投票
3 回答
1528 浏览

c# - C#4.0 使用 winmm.dll 播放超过 192kbps 的 .mp3 文件时出现问题

MCIERR_INTERNALI 正在尝试在应用程序中制作一个简单的媒体播放器,但我注意到我的代码不会播放音乐,除非文件是 192kbps 或更低的低比特率。问题是我的大部分音乐都在 260-320kbps 左右。

这是我的代码,如果我可以做些什么来提高“可用”比特率选项,请告诉我,否则我需要一个新的 DLL 建议!

**编辑:-Winform 应用程序

- 使用 Windows 7 sp1

- 使用 Visual Studio 2013 社区版

-从错误捕获我现在看到错误号是 289,-256 = 22: MCIERR_INTERNAL,不知道这是怎么回事

0 投票
1 回答
902 浏览

c++ - MMSYSERR_NOMEM 仅在其他 midi 应用程序打开时调用 midiInOpen()

我正在尝试使用 midiInOpen 在 Windows 上打开一个 midi 端口。该调用通常效果很好(我正在使用 RtMidi 包装器,并且代码非常干净),但如果 Ableton Live 已打开,它会返回 MMSYSERR_NOMEM。该机器剩余大量内存(4GB),关闭其他应用程序似乎没有任何效果。

我是否在 winmm 中遇到某种内部资源限制?

我在新的英特尔 NUC 机器上运行 Windows 7,调用来自 RtMidi.cpp,我将它们包装在 CPython 模块中,但没有做任何其他花哨的事情。我是一位经验丰富的 C++ 开发人员,如果有人能指出方向,我可以参与其中。

谢谢!

0 投票
1 回答
247 浏览

audio - 快速连续播放剪辑时的点击声音

我有一个非常简单的程序,可以播放 4 种不同的音调,具体取决于按下的按钮。我发现如果我快速连续演奏多个音调或相同的音调,会产生令人不快的咔嗒声。我已确保我的音频样本中不存在这些点击;这肯定是由于一个接一个地快速播放剪辑造成的。

在谷歌搜索之后,我相当确定点击是由于剪辑之间音高的快速变化。查看来自违规音频的播放波形,看起来一个剪辑在开始下一个剪辑之前首先被取消了几分之一秒。我已经强调了这似乎特别明显的部分。

显示音调之间咔嗒声的剪辑波形

展示这些音频点击的剪辑也可以在这里下载。

我的代码非常简单。我正在使用 XInput 从连接的控制器读取输入,这决定了要播放的音调,我正在使用 WinMM 从 wav 文件中输出声音。它是用 D 编程语言编写的,但我已经对其进行了修改,使其不使用特定于 D 的功能,以使其尽可能类似于 C 并避免混淆。

假设我对咔哒声的来源是正确的,我认为解决方案是让每个样本淡入下一个样本。但是,我不确定如何执行此操作,因为WinMM 文档似乎相对稀疏,而且我对它缺乏经验。

播放音频样本以使每个样本淡入下一个样本时,是否可以解决我的点击问题?如果是这样,我如何使用 WinMM 完成此操作?如果没有,我可以尝试另一种解决方案吗?