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

1 PROGRAMACIÓN MULTIMEDIA INTRODUCCIÓN A LA API MULTIMEDI...
Author: Lourdes Gil Rey
0 downloads 2 Views

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

2 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 2 zVídeoVídeo zSonido MIDISonido MIDI zIntroducciónIntroducción zControl del TiempoControl del Tiempo

3 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 3 Cabeceras WINDOWS.H DIGITALV.H MCIAVI.H MMSYSTEM.H MSACM.H, VCR.H VFW.H Introducción Librerías MSACM32.LIB WINMM.LIB VFW32.LIB

4 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 4 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)

5 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 5 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)

6 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 6 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)

7 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 7 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)

8 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 8 Funciones de consulta: MMRESULT midiInGetDevCaps( UINT uDeviceID, LPMIDIINCAPS lpMidiInCaps, UINT cbMidiInCaps ); MMRESULT midiOutGetDevCaps( UINT uDeviceID, LPMIDIOUTCAPS lpMidiOutCaps, UINT cbMidiOutCaps ); Introducción (6)

9 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 9 Funciones de consulta: MMRESULT waveInGetDevCaps( UINT uDeviceID, LPWAVEINCAPS pwic, UINT cbwic ); MMRESULT waveOutGetDevCaps( UINT uDeviceID, LPWAVEOUTCAPS pwoc, UINT cbwoc ); Introducción (7)

10 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 10 Funciones de consulta: typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; } AUXCAPS; Introducción (8)

11 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 11 Funciones de consulta: typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwSupport; } MIDIINCAPS; Introducción (9)

12 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 12 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)

13 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 13 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)

14 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 14 Funciones de consulta: typedef struct { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; } WAVEINCAPS; Introducción (12)

15 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 15 Funciones de apertura y cierre: midiInOpen() midiInClose() midiOutOpen() midiOutClose() waveInOpen() waveInClose() waveOutOpen() waveOutClose() Introducción (13)

16 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 16 Funciones de manejo de errores: midiInGetErrorText() midiOutGetErrorText() waveInGetErrorText() waveOutGetErrorText() Introducción (14)

17 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 17 Funciones de manejo de errores: MMRESULT midiInGetErrorText( MMRESULT wError, LPSTR lpText, UINT cchText ); Introducción ( y 15)

18 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 18 -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

19 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 19 Canales y mapeador MIDI Sonido MIDI Dispositivo MIDI 1 Dispositivo MIDI 2 INOUT IN

20 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 20 Canales y mapeador MIDI Sonido MIDI Dispositivo MIDI 1 Dispositivo MIDI 2 INOUT IN Dispositivo MIDI 3 Dispositivo MIDI 4 THRU IN THRU

21 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 21 #include int PASCAL WinMain (HINSTANCE, HINSTANCE, LPSTR,int) { UINT Entrada = midiInGetNumDevs(); UINT Salida = midiOutGetNumDevs(); char Buffer[128]; Sonido MIDI

22 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 22 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

23 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 23 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

24 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 24 Byte de estado: 1xxxcccc comando canal de destino Sonido MIDI

25 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 25 Comandos: 0: Desactivación de nota 1: Activación de nota 2: Postpulsación polifónica 3: Modificación de control 4: Selección de programa 5: Postpulsación única 6: Alteración de tono 7: Mensaje de sistema Sonido MIDI

26 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 26 Funciones para mandar mensajes: Simples: midiOutShortMessage() Múltiples: MIDIHDR midiOutPrepareHeader() midiOutLongMsg() midiOutUnprepareHeader() midiOutReset(), midiOutGetVolume(), midiOutSetVolume() Sonido MIDI

27 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 27 Lectura de mensajes. Funciones: Simples: midiInStart() Múltiples: MIDIHDR midiInPrepareHeader() midiInAddBuffer() midiInUnprepareHeader() midiInStop() midiInReset() Sonido MIDI

28 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 28 - Tarjeta de sonido: sintetizador - Puede recibir y mandar mensajes (API) - Puede reproducir ficheros MIDI (conjunto de comandos) - Puede resolver conflictos (Mapeador) Sonido MIDI

29 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 29 Vídeo - Funciones AVIFile: API de alto nivel. - Permiten manejar archivos RIFF sin necesidad de manipular su estructura interna. - Archivos RIFF: WAV y AVI

30 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 30 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())

31 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 31 Apertura y Cierre de Ficheros: AVIFileOpen() AVIFileAddRef() (Apertura múltiple) AVIFileRelease() Vídeo (3)

32 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 32 Vídeo (4) Lectura de Ficheros: AVIFileInfo() AVIFileReadData() Escritura de Ficheros: AVIFileWriteData()

33 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 33 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)

34 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 34 Uso del “ClipBoard” AVIPutFileOnClipboard() AVIGetFromClipboard() AVIClearClipboard() Vídeo (6)

35 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 35 “Streams”. Apertura y Cierre: - AVIFileGetStream() (combinada con AVIFileOpen()) - AVIStreamOpenFromFile() - AVIStreamAddRef() - AVIStreamRelease() Vídeo (7)

36 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 36 “Streams”. Lectura: - AVIStreamInfo() - AVIStreamReadFormat() - AVIStreamRead() Vídeo (8)

37 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 37 “Streams”. Creación de un fichero: Nuevo: AVISave() GetSaveFileNamePreview() Existente: AVIFileCreateStream() Vídeo (9)

38 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 38 “Streams”. Configuración: AVIStreamSetFormat() AVIStreamWrite() AVIStreamWriteData() Vídeo (10)

39 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 39 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)

40 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 40 // Aquí irían funciones que trabajan con el archivo abierto AVIFileRelease(pfile); AVIFileExit(); } Vídeo (12)

41 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 41 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)

42 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 42 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)

43 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 43 -Crítico en ciertas aplicaciones -Cuando no es crítico, se puede usar SetTimer() Control del tiempo

44 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 44 UINT SetTimer( HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ); Control del tiempo (2)

45 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 45 timeGetTime, timeGetSystemTime (mmedia.hlp) Control del tiempo (3)

46 Programación MultimediaIntroducción a la API Multimedia de Windows © Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N. 46 timeGetDevCaps() timeBeginPeriod() timeEndPeriod() timeSetEvent() timeKillEvent() Control del tiempo (y 4)

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