47
PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

Embed Size (px)

Citation preview

Page 1: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

PROGRAMACIÓN MULTIMEDIA

INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

Page 2: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

2

Programación Multimedia Introducción a la API Multimedia de Windows

Vídeo

Sonido MIDI

Introducción

Control del Tiempo

Page 3: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

3

Programación Multimedia Introducción a la API Multimedia de Windows

Cabeceras

WINDOWS.H

DIGITALV.H MCIAVI.H MMSYSTEM.HMSACM.H,VCR.H VFW.H

Introducción

Librerías

MSACM32.LIBWINMM.LIB VFW32.LIB

Page 4: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

4

Programación Multimedia Introducción a la API Multimedia de Windows

Versión del sistema multimedia:

BOOL GetVersionEx( LPOSVERSIONINFO lpVersionInformation );

typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[ 128 ]; } OSVERSIONINFO;

Introducción (2)

Page 5: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

5

Programación Multimedia Introducción a la API Multimedia de Windows

Tipos de datos multimedia:

-Archivos MIDI. Series de comandos que un sintetizador (incluido en las tarjetas de sonido) interpreta

-Archivos WAV. Grabaciones digitales de sonido

-Vídeos. Archivos multi-pista, con imágenes (.AVI) y sonido (WAV)

Introducción (3)

Page 6: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

6

Programación Multimedia Introducción a la API Multimedia de Windows

Ventanas Multimedia:

Ventanas especiales que incorporan un botón play, un botón stop, un trackbar, un menú emergente y, en su caso, una zona de visualización

MCIWndCreate(hwndParent, g_hinst, WS_VISIBLE | WS_CHILD | MCIWNDF_SHOWALL, "sample.avi");

Introducción (4)

Page 7: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

7

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

UINT auxGetNumDevs(void);UINT midiInGetNumDevs(void);UINT midiOutGetNumDevs(void);UINT waveInGetNumDevs(void);UINT waveOutGetNumDevs(void);

MMRESULT auxGetDevCaps( UINT uDeviceID, LPAUXCAPS lpCaps, UINT cbCaps );

Introducción (5)

Page 8: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

8

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

MMRESULT midiInGetDevCaps( UINT uDeviceID, LPMIDIINCAPS lpMidiInCaps, UINT cbMidiInCaps ); MMRESULT midiOutGetDevCaps( UINT uDeviceID, LPMIDIOUTCAPS lpMidiOutCaps, UINT cbMidiOutCaps );

Introducción (6)

Page 9: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

9

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

MMRESULT waveInGetDevCaps( UINT uDeviceID, LPWAVEINCAPS pwic, UINT cbwic );

MMRESULT waveOutGetDevCaps( UINT uDeviceID, LPWAVEOUTCAPS pwoc, UINT cbwoc );

Introducción (7)

Page 10: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

10

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; } AUXCAPS;

Introducción (8)

Page 11: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

11

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwSupport; } MIDIINCAPS;

Introducción (9)

Page 12: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

12

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wVoices; WORD wNotes; WORD wChannelMask; DWORD dwSupport; } MIDIOUTCAPS;

Introducción (10)

Page 13: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

13

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; DWORD dwSupport; } WAVEOUTCAPS;

Introducción (11)

Page 14: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

14

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de consulta:

typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; } WAVEINCAPS;

Introducción (12)

Page 15: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

15

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de apertura y cierre:

midiInOpen()midiInClose()midiOutOpen ()midiOutClose()waveInOpen()waveInClose()waveOutOpen()waveOutClose()

Introducción (13)

Page 16: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

16

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de manejo de errores:

midiInGetErrorText()

midiOutGetErrorText()

waveInGetErrorText()

waveOutGetErrorText()

Introducción (14)

Page 17: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

17

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones de manejo de errores:

MMRESULT midiInGetErrorText(

MMRESULT wError, LPSTR lpText, UINT cchText );

Introducción ( y 15)

Page 18: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

18

Programación Multimedia Introducción a la API Multimedia de Windows

-MIDI: Musical Instrument Digital Interface (Interfaz digital para instrumentos musicales)

-Estándar creado a principios de los 80 para la interconexión de instrumentos musicales.

Sonido MIDI

Page 19: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

19

Programación Multimedia Introducción a la API Multimedia de Windows

Canales y mapeador MIDI

Sonido MIDI

Dispositivo MIDI 1

Dispositivo MIDI 2

IN OUT OUTIN

Page 20: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

20

Programación Multimedia Introducción a la API Multimedia de Windows

Canales y mapeador MIDI

Sonido MIDI

Dispositivo MIDI 1

Dispositivo MIDI 2

IN OUT OUTIN

Dispositivo MIDI 3

Dispositivo MIDI 4

THRU

IN INTHRU

Page 21: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

21

Programación Multimedia Introducción a la API Multimedia de Windows

#include <Windows.h>

#include <MMSystem.h>

#include <StdIo.h>

int PASCAL WinMain (HINSTANCE, HINSTANCE, LPSTR,int)

{

UINT Entrada = midiInGetNumDevs();

UINT Salida = midiOutGetNumDevs();

char Buffer[128];

Sonido MIDI

Page 22: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

22

Programación Multimedia Introducción a la API Multimedia de Windows

sprintf (Buffer, “Hay %d dispositivo (s) de entrada \n y %d dispositivo (s) de salida, Entrada,Salida);

MessageBox (NULL, Buffer, “NumeroDispositivosMidi”, MB_ICONINFORMATION);

return 0;

}

Sonido MIDI

Page 23: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

23

Programación Multimedia Introducción a la API Multimedia de Windows

Mensajes MIDI:

- Tipos de mensajes: canal (reproducir el sonido de una nota, cambiar de instrumento, etc) y sistema (selección de un ritmo, afinación).

- Un mensaje consta de un byte de estado y uno o varios de datos.

Sonido MIDI

Page 24: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

24

Programación Multimedia Introducción a la API Multimedia de Windows

Byte de estado:

1 x x x c c c c

comando canal de destino

Sonido MIDI

Page 25: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

25

Programación Multimedia Introducción a la API Multimedia de Windows

Comandos:

0: Desactivación de nota1: Activación de nota2: Postpulsación polifónica3: Modificación de control4: Selección de programa5: Postpulsación única6: Alteración de tono7: Mensaje de sistema

Sonido MIDI

Page 26: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

26

Programación Multimedia Introducción a la API Multimedia de Windows

Funciones para mandar mensajes:

Simples: midiOutShortMessage()

Múltiples: MIDIHDRmidiOutPrepareHeader()midiOutLongMsg()midiOutUnprepareHeader()

midiOutReset(), midiOutGetVolume(),midiOutSetVolume()

Sonido MIDI

Page 27: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

27

Programación Multimedia Introducción a la API Multimedia de Windows

Lectura de mensajes. Funciones:

Simples: midiInStart()

Múltiples: MIDIHDR

midiInPrepareHeader()midiInAddBuffer()midiInUnprepareHeader()

midiInStop()midiInReset()

Sonido MIDI

Page 28: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

28

Programación Multimedia Introducción a la API Multimedia de Windows

- Tarjeta de sonido: sintetizador

- Puede recibir y mandar mensajes (API)

- Puede reproducir ficheros MIDI (conjunto de comandos)

- Puede resolver conflictos (Mapeador)

Sonido MIDI

Page 29: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

29

Programación Multimedia Introducción a la API Multimedia de Windows

Vídeo

- Funciones AVIFile: API de alto nivel.

- Permiten manejar archivos RIFF sin necesidad de manipular su estructura interna.

- Archivos RIFF: WAV y AVI

Page 30: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

30

Programación Multimedia Introducción a la API Multimedia de Windows

Vídeo (2)

- AVIs: Soportan varios canales.

- Canales: Bajo nivel, “chunks”; Alto nivel, “streams”

-Funciones contenidas en una DLL

- Para utilizarlas, uso de AVIFileInit(); (AVIFileExit())

Page 31: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

31

Programación Multimedia Introducción a la API Multimedia de Windows

Apertura y Cierre de Ficheros:

AVIFileOpen()

AVIFileAddRef()(Apertura múltiple)

AVIFileRelease()

Vídeo (3)

Page 32: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

32

Programación Multimedia Introducción a la API Multimedia de Windows

Vídeo (4)

Lectura de Ficheros:

AVIFileInfo()AVIFileReadData()

Escritura de Ficheros:

AVIFileWriteData()

Page 33: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

33

Programación Multimedia Introducción a la API Multimedia de Windows

typedef struct { DWORD dwMaxBytesPerSec; DWORD dwFlags; DWORD dwCaps; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwScale; DWORD dwRate; DWORD dwLength; DWORD dwEditCount; char szFileType[64]; } AVIFILEINFO;

Vídeo (5)

Page 34: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

34

Programación Multimedia Introducción a la API Multimedia de Windows

Uso del “ClipBoard”

AVIPutFileOnClipboard()AVIGetFromClipboard()AVIClearClipboard()

Vídeo (6)

Page 35: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

35

Programación Multimedia Introducción a la API Multimedia de Windows

“Streams”. Apertura y Cierre:

- AVIFileGetStream() (combinada con AVIFileOpen())

- AVIStreamOpenFromFile()

- AVIStreamAddRef()

- AVIStreamRelease()

Vídeo (7)

Page 36: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

36

Programación Multimedia Introducción a la API Multimedia de Windows

“Streams”. Lectura:

- AVIStreamInfo()

- AVIStreamReadFormat()

- AVIStreamRead()

Vídeo (8)

Page 37: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

37

Programación Multimedia Introducción a la API Multimedia de Windows

“Streams”. Creación de un fichero:

Nuevo:AVISave()GetSaveFileNamePreview()

Existente:AVIFileCreateStream()

Vídeo (9)

Page 38: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

38

Programación Multimedia Introducción a la API Multimedia de Windows

“Streams”. Configuración:

AVIStreamSetFormat()

AVIStreamWrite()

AVIStreamWriteData()

Vídeo (10)

Page 39: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

39

Programación Multimedia Introducción a la API Multimedia de Windows

Ejemplos. Apertura de un AVI:

VOID LoadAVIFile(LPCSTR szFile, HWND hwnd)

{

LONG hr;

PAVIFILE pfile;

AVIFileInit();

hr = AVIFileOpen(&pfile, szFile,OF_SHARE_DENY_WRITE, 0L);

if (hr != 0){

ErrMsg("Unable to open %s", szFile);

return;

}

Vídeo (11)

Page 40: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

40

Programación Multimedia Introducción a la API Multimedia de Windows

// Aquí irían funciones que trabajan con el archivo abierto

AVIFileRelease(pfile);

AVIFileExit();

}

Vídeo (12)

Page 41: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

41

Programación Multimedia Introducción a la API Multimedia de Windows

Ejemplos. Trabajando con Streams:

void InsertAVIFile(PAVIFILE pfile, HWND hwnd, LPSTR lpszFile) { int i; gcpavi = 0; for (i = gcpavi; i < MAXNUMSTREAMS; i++) { gapavi[i] = NULL; if (AVIFileGetStream(pfile, &gapavi[i], 0L, i - gcpavi) != AVIERR_OK) break; if (gapavi[i] == NULL) break; }

Vídeo (13)

Page 42: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

42

Programación Multimedia Introducción a la API Multimedia de Windows

if (gcpavi == i) { ErrMsg("Unable to open %s", lpszFile); if (pfile) AVIFileRelease(pfile); return; } else { gcpavi = i - 1; } // Funciones para procesar datos}

Vídeo (y 14)

Page 43: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

43

Programación Multimedia Introducción a la API Multimedia de Windows

-Crítico en ciertas aplicaciones

-Cuando no es crítico, se puede usar SetTimer()

Control del tiempo

Page 44: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

44

Programación Multimedia Introducción a la API Multimedia de Windows

UINT SetTimer(

HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc );

Control del tiempo (2)

Page 45: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

45

Programación Multimedia Introducción a la API Multimedia de Windows

timeGetTime, timeGetSystemTime

(mmedia.hlp)

Control del tiempo (3)

Page 46: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.

46

Programación Multimedia Introducción a la API Multimedia de Windows

timeGetDevCaps()

timeBeginPeriod()

timeEndPeriod()

timeSetEvent()

timeKillEvent()

Control del tiempo (y 4)

Page 47: PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS

PROGRAMACIÓN MULTIMEDIA

INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS