vcMFC 下怎样实现directsound 播放midi音乐文件, 同时播放两个midi文件呢??谢谢

vcMFC 下怎样实现directsound 播放midi音乐文件, 同时播放两个midi文件呢??谢谢,第1张

dsound只能播放wav文件吧。可以用WINDOS自带的录音软件来录音出来的就是wav,所以你只要把麦关了然后开录音把MIDI放一遍就录下来了,不过有1分钟的限制。
播放midi你得用directmusic,你肯定看错了。另外,播放两个声音你只需要创建两个buffer然后分别play()就可以了。
好吧。据说DX当时的文档里有用directsound来播放midi的案例。但是我没找到所以我不知道应该怎么做,大多数资料都说dsound播放wav,dmusic播放midi

需求比较模糊。
播放声音,可以用PlaySound进行简单实现,或者用MCI接口编程实现复杂效果。
至于定时,如果不复杂和严格,可以用定时器实现,也可以用线程时间片模式做精准实现。
感觉你这个不复杂,PlaySound+定时器应该就可以,至于界面,如有没有特殊要求,MFC对话框模式最简单了。

用waveInAddBuffer函数可获得声卡数据地址,取里面的数据就可以了。以下地址有完整的实例工程(显示声卡波形)
>你的问题可以这样的解决:下面的程序编译并且通过!
首先你要在工程中加入多媒体组件。选择 Project|Add to
Project|Compents and Controls 菜单项,在d出的 Compents and
Control Gallery 对话框中选择 Visual C++Compents 文件夹,然后选择
Windows Multimedia library 选项,将其插入工程中。
然后就有:
void CSndplaysoundDlg::OnButton1()
{
sndPlaySound("c:\\1wav",SND_ASYNC);
}
这样就可以解决你的问题,如果你还是只是听到咚咚的声音,那么你就可以
检查你的声音文件是不是损坏了。

一.在程序中直接播放声音文件
在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的W文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusicwav可以用sndPlaySound ("c:\sound\musicwav",SND_ASYNC);或PlaySound("c:\sound\musicwav",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到musicwav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无W文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle();
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WE1),_T("WE"));
3 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem);


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12616298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存