Должен ли mciSendString иметь «wait»? чтобы услышать звук?

Я пытаюсь написать mp3-плеер, используя функции mci. (Win 7 64bit, vs2010, c ++)

Когда я пытаюсь воспроизвести mp3-файл с флагом «ждать», я могу услышать файл, но все остальное застряло, пока файл не закончится, если я уберу флаг «ждать», я смогу продолжать работать, но ничего не слышу.

Вот пример кода:

unsigned long __stdcall PlayThread(void *myParam)
{

char* nameOfMp3 = (char*)myParam;
char* cmd = new char[MAX_PATH];
sprintf(cmd,"open \"%s\" type MPEGvideo alias myFile",nameOfMp3);

mciSendString(cmd,NULL,0,0);
mciSendString("play myFile wait",NULL,0,0);//here is the "wait" flag
mciSendString("close myFile",NULL,0,0);

return 0;
}

я удалил проверку возвращаемого значения mci, но я уже проверял их, и в обоих случаях они были в порядке.

Я делаю что-то неправильно?

2

Решение

Если вы удалите свой wait флаг, у вас не может быть следующей строки, закрывающей ваш файл ( close myFile ), так как вы не даете времени на игру.

Если этот флажок установлен, вы действительно сможете ждать завершения вызываемой функции. Причина, по которой вы можете воспроизвести ваш файл. В случае, если вы удалили его, он начнет игру и немедленно после закрытия.

Чтобы закрыть файл после использования, вам нужно как-то подождать или протестировать воспроизведение медиафайлов. Вы можете добиться этого, регулярно проверяя status сделав следующее mciSendString("status myFile mode"), Возможные значения: «не готов», «приостановлен», «воспроизводится» и «остановлен», как описано в статусная документация.

Я думаю, у вас достаточно информации оттуда, чтобы закончить;)

Удачного кодирования.

3

Другие решения

Других решений пока нет …