mciSendString 随机停止工作
Posted
技术标签:
【中文标题】mciSendString 随机停止工作【英文标题】:mciSendString randomly stops working 【发布时间】:2012-10-02 12:23:17 【问题描述】:我的代码
char MusicLoc [50][200];
char Music [50][50];
int MusicBox(int IndexMusic)
std::string rawloc = ((std::string)"open \""+MusicLoc[IndexMusic]+Music[IndexMusic]+"\"type mpegvideo alias "+Music[IndexMusic]);`
mciSendString(rawloc.c_str(), NULL, 0, 0);
mciSendString(((std::string)"play "+Music[IndexMusic]).c_str(), NULL, 0, 0);
return 0;
MusicLoc 包含路径,Music 包含文件名,因此 MusicLoc[1]+Music[1] 将是 C:\etc\etc\etc\audio.mp3 ,它起初工作正常,但后来随机停止工作,我已经尝试了所有方法,但它不起作用,所以我猜不推荐使用 mciSendString,所以有人知道一个好的轻量级音频库吗?
编辑: 第一个 mciSendString 返回 266,第二个返回 275,如果它有任何用处,但我真的没有找到关于它们的好的文档。
GetLastError 也表示没有错误...
【问题讨论】:
你检查过你生成的字符串没问题吗? 嗯,OpenAL 是一个很好的轻量级库。 字符串没问题,它们都显示了我在调试模式下的意图 【参考方案1】:如果没有错误,mciSendString 的返回值应该为零。您的问题表明您遇到了错误!
要很好地解码错误,请使用 mciGetErrorString
类似这样的东西(从我的代码中提取,所以你必须调整变量名等)
wchar_t cmd[250];
swprintf(cmd,249,L"open %s alias an1",fname1.c_str());
err = mciSendString(cmd, 0, 0, 0 );
if( err ) throw err;
...
catch ( unsigned int& err )
wprintf(L"Playing %s %s %s\n",fname1.c_str(),fname2.c_str(),fname3.c_str());
wchar_t msg[128];
mciGetErrorString( err, msg,128 );
wprintf(L"%s\n",msg);
【讨论】:
以上是关于mciSendString 随机停止工作的主要内容,如果未能解决你的问题,请参考以下文章