2012-10-02 114 views
0

我的代码mciSendString随机停止工作

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包含路径和音乐包含文件名,所以MusicLoc [1] +音乐[1]是C:\等\等\等\ audio.mp3 ,它起初工作正常,但随后它随机停止工作,我已经尝试了一切,它不起作用,所以我会猜测使用mciSendString不推荐,所以有人知道一个好的和轻量级的音频库?

编辑: 第一个mciSendString返回266,第二个返回275,如果它的任何用途,但我真的没有找到关于它们的好文档。

而且GetLastError函数说没有任何错误...

+0

你检查您生成的字符串好吗? –

+0

那么,OpenAL是一个不错的轻量级库。 –

+0

字符串没问题,它们都显示了我在调试模式下的意图 – Bob

回答

0

如果没有错误,从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);