Я пытаюсь написать 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, но я уже проверял их, и в обоих случаях они были в порядке.
Я делаю что-то неправильно?
Если вы удалите свой wait
флаг, у вас не может быть следующей строки, закрывающей ваш файл ( close myFile
), так как вы не даете времени на игру.
Если этот флажок установлен, вы действительно сможете ждать завершения вызываемой функции. Причина, по которой вы можете воспроизвести ваш файл. В случае, если вы удалили его, он начнет игру и немедленно после закрытия.
Чтобы закрыть файл после использования, вам нужно как-то подождать или протестировать воспроизведение медиафайлов. Вы можете добиться этого, регулярно проверяя status
сделав следующее mciSendString("status myFile mode")
, Возможные значения: «не готов», «приостановлен», «воспроизводится» и «остановлен», как описано в статусная документация.
Я думаю, у вас достаточно информации оттуда, чтобы закончить;)
Удачного кодирования.
Других решений пока нет …