0

私のコード

    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 を返し、2 番目の mciSendString は 275 を返します。

また、GetLastError はエラーがないと言っています...

4

1 に答える 1

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);
于 2012-10-02T16:07:50.090 に答える