Как вы можете исправить эту ошибку из mciSendString () и заставить ее воспроизводить звук? - PullRequest
0 голосов
/ 30 июня 2019

Я хочу использовать mciSendString для воспроизведения базового файла WAV, начиная с точки, скажем, 20 секунд с начала аудио. Я попытался использовать его, чтобы просто открыть и воспроизвести основной файл WAV в том же каталоге, что и программа, но безрезультатно. Это основной код, который у меня есть:

int main() {
    char lpszReturnString[16384];
    MCI_PLAY_PARMS song = { NULL, 0, 15 };
    MCIERROR open = mciSendString("open \"C:\\Users\\ethan\\source\\repos\\Project2\\Project2\\America.wav\" type waveaudio alias America", lpszReturnString, lstrlen(lpszReturnString), NULL);
    MCIERROR set = mciSendString("set America time format samples", lpszReturnString, lstrlen(lpszReturnString), NULL);
    MCIERROR play = mciSendString("play America from 1", lpszReturnString, lstrlen(lpszReturnString), NULL);
    cout << LOWORD(open) << endl;
    cout << HIWORD(open) << endl;
    cout << LOWORD(set) << endl;
    cout << HIWORD(set) << endl;
    cout << LOWORD(play) << endl;
    cout << HIWORD(play) << endl;
    system("pause");
}

Вывод на консоль:

0
0
0
0
320
0

Итак, я понимаю, что в игре mciSendString есть ошибка, которая переводится как «MCIERR_WAVE_OUTPUTSINUSE». Что это значит и как я могу это исправить?

1 Ответ

0 голосов
/ 01 июля 2019

Кроме того, поскольку вы хотите начать воспроизведение файлов WAV из определенного места, например, через 20 секунд, вам необходимо изменить его следующим образом.

#include <Windows.h>
#include <iostream>
#pragma comment (lib,"Winmm.lib")
using namespace std;

int main() {
        char lpszReturnString[16384];
        memset(lpszReturnString, 0, sizeof(lpszReturnString));
        MCI_PLAY_PARMS song = { NULL, 0, 15 };
        MCIERROR open = mciSendString("open \"C:\\Users\\ethan\\source\\repos\\Project2\\Project2\\America.wav\" type waveaudio alias America" , lpszReturnString, sizeof(lpszReturnString), NULL);
        MCIERROR set = mciSendString("set America time format ms ", lpszReturnString, sizeof(lpszReturnString), NULL);
        MCIERROR seek = mciSendString("seek America to 20000", NULL, 0, 0);
        MCIERROR play = mciSendString("play America", lpszReturnString, sizeof(lpszReturnString), NULL);
        cout << LOWORD(open) << endl;
        cout << HIWORD(open) << endl;
        cout << LOWORD(set) << endl;
        cout << HIWORD(set) << endl;
        cout << LOWORD(play) << endl;
        cout << HIWORD(play) << endl;;
        system("pause");
}
...