2013-06-06 2 views
2

Я пытаюсь написать mp3 плеер с помощью функции MCI. (Win 7 64bit, VS2010, C++)Должно ли mciSendString «ждать», чтобы слышать звук?

, когда я пытаюсь играть 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 воздает, но я уже cheacked их, и они были хорошо в обоих случаях.

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

ответ

3

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

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

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

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

День кодирование.

Смежные вопросы