c# 使用waveOutOpen和waveOutwrite

l2539641 2008-09-01 09:56:01
MMRESULT waveInOpen(
LPHWAVEIN phwi, //输入设备句柄
UINT uDeviceID, //输入设备ID
LPWAVEFORMATEX pwfx, //录音格式指针
DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程ID
DWORD dwCallbackInstance,
DWORD fdwOpen //处理消息方式的符号位
);

MMRESULT waveOutWrite(
HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh
);

用c#应该怎么写呢,在网上都没找到用c#相关的例子,可否指点一下参数在C#里的具体写法,谢谢
...全文
760 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglovec 2008-12-09
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/audio-video/cswavrec.aspx
》》这个东东有问题吧。 播放音频的时候 他把正在播放的数据 输出出来了 而不是 留一个接口 供外界调用输入播放的数据
baihe_591 2008-09-01
  • 打赏
  • 举报
回复
wave API函数的引用很复杂,我把它封装成一个类,如果你需要的话,可以跟我联系.
baihe_591 2008-09-01
  • 打赏
  • 举报
回复

// WaveOut calls
[DllImport(mmdll)]
public static extern int waveOutGetNumDevs();
[DllImport(mmdll)]
public static extern int waveOutGetDevCaps(int hwo, ref WAVEOUTCAPS lpCaps, int uSize);
[DllImport(mmdll)]
public static extern int waveOutPrepareHeader(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
[DllImport(mmdll)]
public static extern int waveOutUnprepareHeader(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
[DllImport(mmdll)]
public static extern int waveOutWrite(IntPtr hWaveOut, ref WaveHdr lpWaveOutHdr, int uSize);
[DllImport(mmdll)]
public static extern int waveOutOpen(out IntPtr hWaveOut, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
[DllImport(mmdll)]
public static extern int waveOutReset(IntPtr hWaveOut);
[DllImport(mmdll)]
public static extern int waveOutClose(IntPtr hWaveOut);
[DllImport(mmdll)]
public static extern int waveOutPause(IntPtr hWaveOut);
[DllImport(mmdll)]
public static extern int waveOutRestart(IntPtr hWaveOut);
[DllImport(mmdll)]
//public static extern int waveOutGetPosition(IntPtr hWaveOut, out int lpInfo, int uSize);
public static extern int waveOutGetPosition(IntPtr hWaveOut, out int time, int uSize);
[DllImport(mmdll)]
public static extern int waveOutSetVolume(IntPtr hWaveOut, System .UInt32 dwVolume);
[DllImport(mmdll)]
public static extern int waveOutGetVolume(IntPtr hWaveOut, out System .UInt32 dwVolume);

// WaveIn calls
[DllImport(mmdll)]
public static extern int waveInGetNumDevs();
[DllImport(mmdll)]
public static extern int waveInAddBuffer(IntPtr hwi, ref WaveHdr pwh, int cbwh);
[DllImport(mmdll)]
public static extern int waveInClose(IntPtr hwi);
[DllImport(mmdll)]
public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
[DllImport(mmdll)]
public static extern int waveInPrepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, int uSize);
[DllImport(mmdll)]
public static extern int waveInUnprepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, int uSize);
[DllImport(mmdll)]
public static extern int waveInReset(IntPtr hwi);
[DllImport(mmdll)]
public static extern int waveInStart(IntPtr hwi);
[DllImport(mmdll)]
public static extern int waveInStop(IntPtr hwi);
[DllImport(mmdll)]
public static extern int waveInGetDevCaps(int hwo,ref WAVEINCAPS lpCaps, int uSize);


网上就有现成的例子
zlkingdom 2008-09-01
  • 打赏
  • 举报
回复
在用DllImport声明的时候记得要把函数的参数类型转换成C#中的类型就可以了
wanghui0380 2008-09-01
  • 打赏
  • 举报
回复
http://www.codeproject.com/cs/media/cswavrec.asp?df=100&forumid=16677&exp=0&select=1107344

实际上,我个人建议你给你的vs装一个Pinvoke.net插件,通过这个插件,常用的C#下使用的api申明都可以直接找到
zjhphc 2008-09-01
  • 打赏
  • 举报
回复
private const string mmdll = "winmm.dll";
zjhphc 2008-09-01
  • 打赏
  • 举报
回复
[DllImport(mmdll)]
public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WaveFormat lpFormat, WaveDelegate dwCallback, int dwInstance, int dwFlags);
ojekleen 2008-09-01
  • 打赏
  • 举报
回复
[DllImport("winmm.dll")]
MMRESULT waveInOpen(
LPHWAVEIN phwi, //输入设备句柄
UINT uDeviceID, //输入设备ID
LPWAVEFORMATEX pwfx, //录音格式指针
DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程ID
DWORD dwCallbackInstance,
DWORD fdwOpen //处理消息方式的符号位
);

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧