winmm.dll的文件信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winmm.dll的文件信息相关的知识,希望对你有一定的参考价值。
参考技术ADLL 文件: winmm 或者 winmm.dll
DLL 名称: Windows Multimedia API
描述:
winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游戏手柄。
函数汇总:
auxGetDevCaps 查询指定的辅助输出设备以确定其性能
auxGetNumDevs 检取系统中存在的辅助输出设备的数量
auxGetVolume 返回指定的辅助输出设备的当前卷设备
auxOutMessage 向指定的辅助输出设备发送一条消息
auxSetVolume 在指定的辅助输出设备中设置卷
CloseDirver 关闭指定的可安装驱动器
DefDriverProc 为任何不由可安装驱动器处理的消息提供的缺省处理
Drivercallback 调用一个回调函数,发送一条消息给窗口或将一个线程的阻塞解除
DrvGetModuleHandle 返回包含指定可安装驱动器模块的实例句柄
DrvsendMessage 把指定的消息发送给可安装驱动器
GetDriverModuleHandle 返回包含指定可安装驱动器模块的实例句柄
joyGetDevCaps 查询指定的游戏杆设备以确定其性能
joyGetNumDevs 返回系统支持的游戏杆设备的数量
joyGetPos 查询指定的游戏杆设备的位置和活动性
joyGetPosEx 查询一个游戏杆设备的位置和它的按扭状态
joyGetThreshold 查询指定的游戏杆设备的当前移动阈值
joyReleaseCapture 释放由JoySetCapture函数设置的在指定游戏杆设备上的捕获
joySetCapture 发送一个游戏杆消息到指定的窗口
joySetThreshold 设置指定的游戏杆设备的移动阈值
mciGetCreatorTask 为指定的MCI设备检取其创建的任务
mciGetDeviceID 返回和打开设备名相匹配的设备标识符
mciGetErrorString 检取描述指定媒介控制接口错误代码的字符串
mciGetYieldProc 返回和媒介控制接口的WAIT标志相关的回调函数的地址
mciSendCommand 向指定的媒介控制接口设备发送一条命令
mciSendString 向指定的媒介控制接口设备发送一个字符串
mciSetYieldProc 设置一个过程地址,在MCI设备因指定了WAIT标志而等待一个命令完成时,该过程被周期性调用
midiConnect 将指定的MIDI输入设备连接到输出设备
midiDisconnect 断开MIDI输入设备和输出设备的连接
midiInAddBuffer 向指定的音乐仪器数字接口的输入设备增加一个缓冲区
midiInClose 关闭指定的音乐仪器数字接口的输入设备
midiInGetDveCaps 查询指定的音乐仪器数字接口的输入设备,以确定其性能
midiInGetErrorText 检取有关音乐仪器数字接口的输入设备指定错误的文本说明
midiInGetID 获得一个音乐一起数字接口的输入设备的标识符
midiInGetNumDevs 检取系统中音乐仪器数字接口的输入设备的数量
midiInMessage 向指定的音乐仪器数字接口的输入设备驱动器发送一条消息
midiInOpen 打开指定的音乐仪器数字接口的输入设备
midiInPrepareHeader 为音乐仪器数字接口的输入设备准备一个缓冲区
midiInReset 在给定的MIDI输入设备上输入,并将所有挂起的输入缓冲区标记为已执行的
midiInStart 启动在指定的音乐仪器数字接口的输入设备上的输入
midiInStop 停止在给定的音乐仪器数字接口的输入设备上的输入
midiInUnprepareHeader 消除由midiInPrepareHeader函数完成的准备
midiOutCacheDrumPatches 请求内部的一个MIDI合成设备预装指定的基于键的击打音色集
midiOutCachePatches 请求内部的音乐仪器数字接口的合成设备预装指定的音色集
midiOutClose 关闭指定的音乐仪器数字接口的输出设备
midiOutGetDevCaps 查询指定的音乐仪器数字接口的输出设备,以确定其性能
midiOutGetErrorText 检取有关MIDI输出设备指定采取的文本说明
midiOutGetID 检取指定的MIDI输出设备的标识符
midiOutGetNumDevs 检取系统中存在的MIDI输出设备的数量
midiOutGetVolume 返回一个MIDI输出设备的当前卷设置
midiOutLongMsg 向指定的MIDI输出设备发送一条系统专用的MIDI消息
midiOutMessage 向一MIDI输出设备驱动器发送一条消息
midiOutOpen 打开指定的MIDI输出设备进行回放
midiOutPrepareHeader 为MIDI输出设备准备一个缓冲区
midiOutReset 为指定的MIDI输出设备关闭所有MIDI通道上的所有标志
midiOutSetVolume 设置一个MIDI输出设备的卷
midiOutShortMsg 向指定的MIDI输出设备发送一条短MIDI消息
midiOutUnprepareHeader 清除由midiOutPrepareHeader函数完成的准备
midiStreamClose 关闭一个打开的MIDI流
midiStreamOpen 为输出,打开一个MIDI流
midiStreamOut 在MIDI输出设备上播放或排队一个MIDI数据流
midiStreamPause 暂停一个MIDI流的播放
midiStreamPosition 在一个MIDI流中检取当前位置
midiStreamProperty 设置或检取与MIDI输出设备相关MIDI数据流的特性
midiStreamRestart 重新启动一个暂停的MIDI流
midiStreamStop 关掉指定MIDI输出设备的所有MIDI通道
mixerClose 关闭指定的混频器
mixerGetControlDetails 检取和一个声频指线路相关的单一控件的细节
mixerGetDevCaps 查询指定的混频器以确定其性能
mixerGetID 获取指定混频器的标识符
mixerGetLineContrils 检取和一个声频线路相关的一个或多个控件
mixerGetLineInfo 检取混频器有关特有线路的信息
mixerGetNumDevs 返回系统中存在的混频器的数量
mixerMessage 把一个定制混频器驱动器消息直接发送给混频器驱动器
mixerOpen 打开指定的混频器,在应用程序关闭该句柄前保证该设备不被移走
mixerSetControlDetails 设置和一个声频指线路相关的单一控件的细节
mmioAsvance 填充一个文件的IO缓冲区
mmioAscend 取出一个RIFF文件块
mmioClose 关闭有mmioOpen打开的文件
mmioCreateChunk 创建由mmioOpen函数打开的RIFF文件中的一个块
mmioDescend 进入由mmioOpen函数打开的RIFF文件的块中,并查找一个块
mmioFlush 把文件缓冲区的数据写入磁盘中
mmioGetInfo 检取有关由mmioOpen函数创建的RIFF文件的信息
mmioInstallIOProcA 装入或删除一个自定义的IO过程
mmioOpen 为输入输出打开一个文件
mmioRead 从由mmioOpen函数打开的文件中读取指定字节数的数据
mmioRename 重新命名指定的文件
mmioseek 改变由mmioOpen函数打开的文件中的当前指针位置
mmioSendMessage 向与指定文件相联系的IO过程发送一条消息
mmioSetBuffer 允许或禁止文件缓冲区的IO,或改变这个缓冲区,或改变这个缓冲区的大小
mmioSetInfo 更新从被打开文件中检取的信息
mmioStringToFOURCC 把一个以NULL结束的字符串转换成一个4字符代码
mmioWrite 向由mmioOpen函数打开的文件中写入指定字节数的数据
mmsystemGetVersion 返回多媒体扩展系统软件的当前版本号
OpenDriver 打开一个可安装驱动器实例,并用缺省设置或指定值初始化该实例
PlaySound 播放一个波形声音
SendDriveMessage 向指定的可安装驱动器发送一条消息
SndPlaySound 播放一个由文件名或由登记的[sound]段的入口指定的波形声音
timeBeginPeriod 设置应用程序或驱动程序使用的最小定时器分辨率
timeEndPeriod 清除应用程序或驱动程序使用的最小定时器分辨率
timeGetDevCaps 查询定时器设备以确定其性能
timeGetSystemTime 检取从WINDOWS开始已逝去的毫秒数
timeGetTime 检取从WINDOWS开始已逝去的毫秒数,此函数比上一条函数开销小
timeKillEvent 毁掉指定的定时器回调事件
timeSetEvent 设置一个定时器回调事件
waveInAddBuffer 向波形输入设备添加一个输入缓冲区
WaveInClose 关闭指定的波形输入设置
waveInGetDevCaps 查询指定的波形输入设备以确定其性能
waveInGetErrorText 检取由指定的错误代码标识的文本说明
waveInGetID 获取指定的波形输入设备的标识符
waveInGetNumDevs 返回系统中存在的波形输入设备的数量
waveInGetPosition 检取指定波形输入设备的当前位置
waveInMessage 发送一条消息给波形输入设备的驱动器
waveInOpen 为录音而打开一个波形输入设备
waveInPrepareHeader 为波形输入准备一个输入缓冲区
waveInReset 停止给定的波形输入设备的输入,且将当前位置清零
waveInStart 启动在指定的波形输入设备的输入
waveInStop 停止在指定的波形输入设备上的输入
waveInUnprepareHeader 清除由waveInPrepareHeader函数实现的准备
waveOutBreakLoop 中断给定的波形输出设备上一个循环,并允许播放驱动器列表中的下一个块
waveOutClose 关闭指定的波形输出设备
waveOutGetDevCaps 查询一个指定的波形输出设备以确定其性能
waveOutGetErrorText 检取由指定的错误代码标识的文本说明
waveOutGetID 检取指定的波形输出设备的标识符
waveOutGetNumDevs 检取系统中存在的波形输出设备的数量
waveOutGetPitch 查询一个波形输出设备的当前音调设置
waveOutGetPlaybackRate 查询一个波形输出设备当前播放的速度
waveOutGetPosition 检取指定波形输出设备的当前播放位置
waveOutGetVolume 查询指定波形输出设备的当前音量设置
waveOutMessage 发送一条消息给一个波形输出设备的驱动器
waveOutOpen 为播放打开一个波形输出设备
waveOutPause 暂停指定波形输出设备上的播放
waveOutPrepareHeader 为播放准备一个波形缓冲区
waveOutRestart 重新启动一个被暂停的波形输出设备
waveOutSetPitch 设置一个波形输出设备的音调
waveOutSetPlaybackRate 设置指定波形输出设备的速度
waveOutSetVolume 设置指定的波形输出设备的音量
waveOutUnprepareHeader 清除由waveOutPrepareHeader函数实现的准备
waveOutWrite 向指定的波形输出设备发送一个数据块
带有 winmm3.dll 的音频播放/倒带功能
【中文标题】带有 winmm3.dll 的音频播放/倒带功能【英文标题】:Audio playback/rewind function with winmm3.dll 【发布时间】:2014-03-15 17:38:23 【问题描述】:我正在使用 winmm.dll 使用 C# 开发 mp3 播放器
我的倒带功能现在有问题。
我在播放功能启动时启动一个计时器。
当我启动 FFW 函数时,我希望它距离 elapsedTime 的当前值 5000 毫秒。
例如,如果我开始播放歌曲并在歌曲中按 FFW 6 秒,则播放应在 6000ms + 5000ms(ffw5sec) 处继续。
但是什么都没有发生。这次我做错了什么?
namespace kTP
public class MusicPlayer
[DllImport("winmm.dll")]
private static extern long mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);
private bool isPlaying = false;
private int ffw5sec = 5000;
Timer elapsedTime = new Timer();
public void Open(string file)
string command = "open \"" + file + "\" type MPEGVideo alias MyMp3";
mciSendString(command, null, 0, 0);
public void Play()
isPlaying = true;
elapsedTime.Start();
elapsedTime.Interval = (1000);
string command = "play MyMp3";
mciSendString(command, null, 0, 0);
public void Pause()
isPlaying = false;
string command = "pause MyMp3";
mciSendString(command, null, 0, 0);
public void Stop()
isPlaying = false;
string command = "stop MyMp3";
mciSendString(command, null, 0, 0);
elapsedTime.Stop();
command = "close MyMp3";
mciSendString(command, null, 0, 0);
// return to start of song and resume playback
public void ReturnToStart()
isPlaying = true;
string command = "seek MyMp3 to start";
mciSendString(command, null, 0, 0);
command = "play MyMp3";
mciSendString(command, null, 0, 0);
// Fast Forward
// needs a better skip Implementation
public void FFW()
if (isPlaying == true)
string command = "set MyMp3 time format ms";
mciSendString(command, null, 0, 0);
command = "seek MyMp3 to " + (elapsedTime.ToString() + ffw5sec.ToString());
mciSendString(command, null, 0, 0);
command = "play MyMp3";
mciSendString(command, null, 0, 0);
//ffw5sec += 5000;
【问题讨论】:
【参考方案1】:在这行代码中:
command = "seek MyMp3 to " + (elapsedTime.ToString() + ffw5sec.ToString());
您将 elapsedTime 和 ffw5sec 的字符串形式连接起来,而 elapsedTime 的字符串形式不可解析,即您无法将其解析为整数。 同样在您的问题中,您没有告诉其他人您正在使用哪个计时器。 在 C# .NET 框架中,Timer 类共有三种。
有:
System.Timers.Timer,
System.Threading.Timer, and
System.Windows.Forms.Timer
但是这些计时器类的字符串形式都不是不可解析的。
System.Timers.Timer
的字符串形式为"System.Timers.Timer"
,System.Threading.Timer
的字符串形式为"System.Threading.Timer"
,System.Windows.Forms.Timer
的字符串形式为"System.Windows.Forms.Timer, Interval: 0"
,其中0
替换为System.Windows.Forms.Timer.Interval
属性。
无论如何我知道您不使用System.Threading.Timer
,因为在您发布的问题中的代码中,我看到您使用空构造函数来创建计时器Timer()
,而System.Threading.Timer
不包含构造函数这需要 0 个参数,但我仍然不知道它是 System.Timers.Timer
还是 System.Windows.Forms.Timer
。
seek命令的字符串格式语法为:
"seek 0 to 1"
其中0
被替换为要查找的音频文件的路径和名称或别名,在您的情况下,0 是MyMp3
。并且1
被替换为音频文件中的时间,只能是整数
表达式:(elapsedTime.ToString() + ffw5sec.ToString())
,根本不返回可以解析为整数的字符串。
驱动程序无法执行此命令。
还建议使用String.Format
方法为mciSendString
函数准备和制作你的mci字符串命令,而不是使用连接字符串的方法,因为String.Format方法比方法更容易使用和方便连接字符串。这样你就不会感到困惑和犯错。同样,通过 String.Format 格式化的 mci 字符串命令比串联的 mci 字符串命令更具可读性。
您犯的另一个错误是您首先将 elapsedTime 和 ffw5sec 转换为字符串,然后将它们连接在一起,然后将结果字符串连接到 mci string 命令.
这样做是错误的。您应该首先添加 elapsedTime 和ffw5sec 的整数 值,它们代表时间,然后将结果转换为字符串并连接到mci string 命令。
我想说的是,你不应该调用 ToString 两次,但你可以使用一次。
你制作mci字符串命令的错误方式是:
"seek MyMp3 to " + (elapsedTime.ToString() + ffw5sec.ToString())"
mci字符串命令的正确制作方法是:
"seek MyMp3 to " + (elapsedTime + ffw5sec).ToString()
这仅适用于 elapsedTime 为整数的情况,但如果不是,则应使用其将时间返回为整数的属性之一。
如果 elapsedTime 的字符串形式是可解析的,那么 mci 字符串命令是:"seek MyMp3 to 50006000"
,因为您将“5000”与“6000”连接起来,结果是“50006000”。
但是按照正确的方式,mci字符串命令应该是:"seek MyMp3 to 11000"
,因为你先把5000和6000相加,结果是11000作为整数。
您甚至根本不必使用ToString()
,因为您可以将字符串与整数连接,而不仅仅是字符串与字符串,无论如何都会产生字符串。例如这两种情况都有效:
"seek MyMp3 to " + **"** 11000 **"** = "seek MyMp3 to 11000",
和
"seek MyMp3 to " + 11000 = "seek MyMp3 to 11000"
所以还有更好的方法来制作 mci 字符串命令:
"seek MyMp3 to " + (elapsedTime + ffw5sec)
但是括号仍然很重要,因为没有,5000 与 mci 字符串命令连接,然后是 ffw5sec。结果又错了:
"seek MyMp3 to " + elapsedTime + ffw5sec = "seek MyMp3 to 50006000"
也不要使用 Timer 类,因为这个类是用来在每个间隔时间调用回调方法,而你在做定时器和回调方法之外的其他事情。
Timer 类不用于测量经过的时间。您应该改用 Stopwatch 类,它可以在 System.Diagnostics 命名空间中找到。系统引用已经添加到您的项目中,这一点非常重要,因此您可以在此命名空间中找到此类。
Stopwatch 类也有 Start 方法,和 Timer 类一样,但不同的是 Timer 类的 Start 方法开始执行 Elapsed 事件或 Tick 事件或构造函数中给出的回调函数,根据什么正如我之前提到的,你正在使用的计时器。
Stopwatch 类的实例与任何回调方法都没有联系。相反,它们具有私有时间数据字段,以及用于以某些形式返回该时间数据的公共属性。
ElapsedMilliseconds
属性返回秒表运行的所有时间(以毫秒为单位)所经过的时间(64 位整数)。
还有ElapsedTicks
属性,和ElapsedMilliseconds
一样,但是返回的时间是以tick为单位的。
一秒内超过 1000 个滴答声超过毫秒。
Elapsed 属性与 ElapsedMilliseconds 和 ElapsedTicks 相同,但时间完全不是作为长整数返回,而是作为 TimeSpan 结构,将秒表实例的私有时间数据也存储为私有,也可以返回为可以是 int(32 位整数)、long 或 double,取决于它的属性,如 Days、Hours、Milliseconds、Minutes、Seconds、Ticks 等。
无论如何,将 elapsedTime 的类型从 Timer
更改为 Stopwatch
,并且不要忘记首先使用 System.Diagnostics 命名空间才能使用此类。您还需要在项目中引用系统引用。
现在你终于可以修复你的命令了:
command = String.Format("seek MyMp3 to 0", elapsedTime.ElapsedMilliseconds + ffw5sec);
这应该很好用,但不要忘记有时使用 Reset 或 Restart 方法将经过的时间重置为零。如果您希望秒表在经过时间重置为零后处于运行状态,请使用重新启动方法。否则,只需使用 Reset 方法。
如果仍然有问题,那么你将不得不使用 DllImport 来外部 mciGetErrorString 函数,并在 mciSendString 不起作用时使用它来找出你的问题,因为你输入了错误的参数。
c#中mciGetErrorString的声明为:
[DllImport("winmm.dll")]
static extern Int32 mciGetErrorString(Int32 errorCode, StringBuilder errorText, Int32 errorTextSize);
建议将上面这段代码添加到你的C#程序中其他声明的方法之间,不管在哪里,但在声明入口点Main方法的Program类中。
当 mciSendString 无法执行您输入的命令时,它会以整数形式返回错误代码。
您应该将该错误代码输入到 mciGetErrorString 中。 mciGetErrorString 将修改 StringBuilder 实例并在其中写入错误字符串。
然后使用 Object.ToString() 或 Console.Write 或 Console.WriteLine 方法输出 StringBuilder 实例的字符串形式。
输出将描述错误,这就是 mciSendString 未能执行命令的原因。这将帮助您找出问题,并直接思考您的解决方案。
我希望这一切都会对你有所帮助。祝你好运!
【讨论】:
以上是关于winmm.dll的文件信息的主要内容,如果未能解决你的问题,请参考以下文章
是否在每个 Windows 安装中都可以找到声音库 WINMM.DLL?
使用 winmm.dll 时,啥决定了 windows 中声音设备的顺序?