Post on 02-Feb-2016
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
© 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
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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())
© 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)
© 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()
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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)
© 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
© 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)
© 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)
© 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)
PROGRAMACIÓN MULTIMEDIA
INTRODUCCIÓN A LA API MULTIMEDIA DE WINDOWS