2012-10-02 178 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);