Programación de Sonido con DirectX

Documentos relacionados
Tutorial de c++ grafico por BlackShadow7777

Configurar dispositivos audio Selección driver (controlador)

IES Abyla. Departamento de Informática. Sonido digital

Windows API. 17 de Agosto de UCSC, Concepción, Chile. Windows API. Ronald Valenzuela Fica. Windows API. Ejemplos. Hello World Unicode

Introducción. Requisitos del sistema. Instalación del software

Simulador de conducción de una fumigadora con banderillero satelital.

Contenido 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS PROCESOS Prólogo...

Midi y Audio Digital. Qué es el MIDI?

Qué es un portátil Media Center?

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Parte I:Teoría. Tema 3:Introducción a los Sistemas operativos. Instalación

Capítulo 1: Introducción

Fundamentos de Programación. Sabino Miranda-Jiménez

INSTRUMENTACIÓN VIRTUAL APLICADA AL ESTUDIO DE SISTEMAS COMPLEJOS

HARDWARE: DISPOSITIVOS DE ENTRADA, PROCESAMIENTO Y SALIDA/ SOFTWARE: SOFTWARE DE SISTEMAS DE APLICACIONES. Ralph Stair y George Reynolds

PROGRAMACIÓN MULTIMEDIA PROGRAMACIÓN EN WINDOWS

UNIVERSIDAD DEL ISTMO Ingeniería en computación Estructura de datos

Objetos de aprendizaje: Computadora

CONFIGURACIÓN DE VIDEO, SONIDO Y AUDIO DE WINDOWS XP Y SKYPE

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Introducción a los Sistemas Operativos

ARDRUMONE. Trabajo Final. Batería Electrónica. Participación y Gestión en Proyectos de Software Libre. Di Biasse, José Luis

MOMENTO I. BLOQUE 1. Opera las funciones básicas del sistema operativo y garantiza la seguridad de la información

1. Escribir un dato digital del WinCC al Arduino

Vamos a definir un ordenador, lo que hay en la diapositiva son ordenadores, algunos más especializados que otros, pero todos son ordenadores.

P R O G R A M A D E R O B Ó T I C A E N LA UOM

Computación Conociendo la herramienta de cálculo. La Computadora

Cómo funcionan los libros Aprender...

Introducción Informática Gráfica

Si usa altavoces 5.1: - Intercambia subwoofer y altavoz central. Si usa 2 o 4 altavoces: - Intercambia los canales izquierdo y derecho en la línea.

Programación Estructurada

1.1.-TARJETA DAQ NI PCI-6024E y BNC2120. Figura 1: TARJETA BNC2120 NATIONAL INSTRUMENTS

4.1 Conceptos Básicos de Matlab. Matlab es creado por The MathWorks, el cual es un idioma de alto rendimiento

Introducción a la Programación Orientada a Objetos con C++

Diferencias entre objetos vinculados y objetos incrustados

Guía de Network Connection

Marcos Gálvez Flores

CURSO TEMA 1: HARDWARE Y SOFTWARE

Manual de Usuario RoboticSAD. Universidad Pedagógica Nacional Licenciatura en Electrónica. Elaborado por: Yuli Marcela Marín Peña

Hacia la racionalización del Software

VOCABULARIO DEL HARDWARE. Docente Yeni Ávila

INTRODUCCIÓN AL LENGUAJE C++ HISTORIA

Manual de Funcionamiento Sonido, Video e Imágenes

Periféricos Interfaces y Buses

Manual de Instalación Contenido

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Ing. Rojas Córsico, Ivana

Transmisión de Webcam utilizando servidor EITV playout de televisión digital

Motor de Videojuegos.

DS093 v4.0. Si el software de audio está instalado correctamente, tareas. Haga clic en el icono para mostrar la barra de ajuste rápido de volumen.

Encender una bombilla

3.6. INSERTAR Y DAR FORMATO A ARCHIVOS MULTIMEDIA.

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA CIVIL DEPARTAMENTO DE INGENIERÍA ESTRUCTURAL

Desarrollo de Aplicaciones Multimedia

PREPARATORIA OFICIAL NO. 82 JOSÉ REVUELTAS. INFORMÁTICA & COMPUTACIÓN I Parte II UNIDAD III SISTEMA OPERATIVO GRAFICOS

Ejemplos: Para el saludo en horas de oficina (opción 5):

Programación de videojuegos para consolas portátiles

Tema: Manejo del Puerto Serie con LabView

Grabadora de sonidos

Fundamentos de los Sistemas Operativos. Tema 1. Conceptos generales Estructura del sistema operativo ULPGC - José Miguel Santos Espino

Introducción a los fundamentos tecnológicos de la producción digital II

!! Identificar las señales que llegan a la consola.

Muestreo y Reconstrucción

Manual del usuario de SnapMusic

SONIDO - ANEXOS ANEXO 1:

ANTECENDENTES DE LA COMPUTADORA

Graficación por Computadora

1. Componentes de la firma digital

Manual del Usuario MANUAL DEL USUARIO 1 ÍNDICE 1

FUNDAMENTOS DEL MOTOR DE JUEGO DE BLENDER 2.49b

1. Instalación de ADOBE Flash CS5

Programa Formativo. Objetivos. Código: Curso: Iniciacion a Windows 7. Duración: 80h.

HARDWARE EXTERNA. Dispositivos de Entrada

TÉCNICO SUPERIOR UNIVERSITARIO EN MECATRÓNICA ÁREA AUTOMATIZACIÓN

Instalación del software del controlador Controlador de audio USB Manual de instalación (Windows)

CONFIGURACIÓN DE VIDEO, SONIDO Y AUDIO DE WINDOWS VISTA Y SKYPE

DRIVERS O CONTROLADORES. Estudiante: Juan Diego Ávila Gutiérrez

20483 Programación en C#

Transcripción:

Programación de Sonido con DirectX Dr. Maximino Peña Guerrero Escuela Superior de Ingeniería Mecánica y Eléctrica del Instituto Politécnico Nacional, Academia de Acústica, Unidad Profesional Adolfo López Matéos, Zacatenco D.F.

OBJETIVO Presentar las características de DirectX que nos permiten capturar y generar sonidos con una computadora digital. Describir las ventajas y desventajas de DirectX. Describir cómo se utiliza con los compiladores Visual Studio.NET C#, C++, entre otros. Mencionar por qué no se utiliza DirectX con UNIX (Linux) Mostrar un programa sencillo de ejemplo

Problemática La simulación de eventos del mundo real requiere de mucho procesamiento en paralelo. Simular una orquesta sinfónica requiere de por lo menos unos 20 procesos que generen sonido de manera simultánea. La Realidad Virtual requiere procesar una gran cantidad de datos, video tridimencional en tiempo real, sonido tridimencional en tiempo real, entre muchas otras variables. MS-Windows no permite el acceso directo al hardware de audio o video, u otros dispositivos de entrada o salida.

Problemática (continuacion) Programar muchos eventos paralelos utilizando API Win32 es complejo y tardado. Es posible programar Threads (hilos), pero ellos deben convivir en sincronía, lo cual hace la programación más compleja. Además, los paradigmas (modelos) de programación en MS Windows cambian rápidamente. Es necesario una biblioteca estable para la simulación gráfica en tres dimensiones con sonido y otros efectos especiales.

Qué es DirectX? DirectX: Es una biblioteca de componentes de software que facilitan la programación gráfica de audio y video en tiempo real. Componente: Es un objeto software diseñado para dar un servicio específico; está construido con clases, métodos y datos. DirectX ha sido diseñado por el equipo de Microsoft dirigidos al principio por Bradley Bargen (1996) y actualmente por Tom Miller. Managed DirectX 9 es la versión de código administrado para la familia.net, dicponible con Visual Studio.NET Express (C#, C++, Basic, Java, etc.)

Cuáles son los componentes DirectX? DirectDraw: Proporciona animación suave usando intercambio de páginas de video, acceso a coprocesadores gráficos especializados y administración de la memoria de video. Sirve de base a los componentes DirectShow y Direct3D. Direct3D: Proporciona interfases de alto y bajo nivel para motores render de 3D por software y por hardware. DirectSound: Proporciona sonido estéreo y 3D con mezcla de sonido por hardware así como administración de la memoria de la tarjeta de sonido.

Cuáles son los comp... DirectX? (cont.) DirectPlay: Incluye servicios de mensajería independientes del medio para crear juegos con varios jugadores, así como las funciones necesarias para organizar y ejecutar un juego multijugador. DirectInput: Proporciona entrada de baja latencia desde una amplia variedad de dispositivos de entrada y permite el funcionamiento de dispositivos de salida, incluyendo peroféricos activos de juego (como el joystick Sidewinder Force Feedback de Microsoft). DirectSetup: Proporciona la instalación automática de los controladores de DirectX.

SISTEMA DE AUDIO DirectSound Aplicación Win32 HAL: Hardware Abstraction Layer DirectSound HAL MIDI, etc. WAVE Windows audio DDI DirectSound HAL Hardware de Sonido Fuente: Sánchez99 p. 34

Cómo funciona DirectSound Mezclador por Software Altavoces Buffers por Software (secundarios) Buffers por Hardware Buffer Primario Tarjeta de Sonido Mezclador por Hardware Fuente: bargen98 p. 192

Cómo programar DirectSound? 1. Iniciar una estructura del tipo WAVEFORMATEX que describa el formato del sonido. 2. Iniciar una estructura del tipo DSBUFFERDESC con los parámetros del buffer, incluyendo un apuntador a su estructura WAVEFORMATEX. 3. Llamar al método CreateSoundBuffer() para crear el buffer. 4. Bloquear todo el buffer o solamente una parte. 5. Copiar datos (normalmente desde un archivo o desde un recurso) a la parte bloqueada del buffer. 6. Desbloquear el buffer. 7. Fijar, si es necesario, la posición de reproducción. 8. Reproducir el buffer. 9. Si se trata de un buffer canalizado, repetir los pasos 4, 5 y 6. Fuente: Bargen98, p. 215

Programando DirectSound #include <windows.h> #include <dsound.h> #include <math.h> #include "Resource.h" #define BPS 8 // Bits por muestra. #define SPS 22050 // Muestras por segundo. #define NCH 1 // Numero de canales. #define PI 3.1416 // Ya la sabemos #define FC1 1000 // Frecuencia 1 #define TAM1 64000 // Tamaño del buffer 1

Programando DirectSound // Variables HWND hdlg; HRESULT bien; LPDIRECTSOUND dsnd; LPDIRECTSOUNDBUFFER buffer; WAVEFORMATEX wfmt; DSBUFFERDESC bdes; LPVOID buflck = NULL; DWORD nbytes = TAM1; // Prototipos de métodos. int Error(LPCSTR); VOID FillBuffer(PBYTE,int,int); // Prototipo de diálogo en Windows. BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);

Programando DirectSound (cont..) // Punto de entrada a la aplicación int WINAPI WinMain ( HINSTANCE hinstance, HINSTANCE hprevisntance, LPSTR lpcmdline, int nshowcmd ) { DialogBox ( NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DialogProc ); return(1); }

Programando DirectSound (cont..) BOOL CALLBACK DialogProc (HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_INITDIALOG: hdlg = hdlg; // Reservar memoria con ceros. memset(&wfmt,0,sizeof(waveformatex)); // Iniciar driver de sonido. wfmt.wformattag = WAVE_FORMAT_PCM; wfmt.nchannels = NCH; wfmt.nsamplespersec = SPS; wfmt.nblockalign= NCH * (BPS/8); wfmt.navgbytespersec= wfmt.nsamplespersec * wfmt.nblockalign; wfmt.wbitspersample = BPS; // Reservar memoria para el descriptor del buffer. memset(&bdes, 0, sizeof(dsbufferdesc)); // Inicializar el descriptor del buffer. bdes.dwsize = sizeof(dsbufferdesc); bdes.dwflags = DSBCAPS_GLOBALFOCUS; bdes.dwbufferbytes = TAM1; bdes.lpwfxformat = &wfmt;

Programando DirectSound (cont..) // Crear objeto directdound. bien=directsoundcreate(0, &dsnd, NULL); if (bien!=ds_ok) { Error("Error DirectSoundCreate"); } // Poner nivel cooperativo. bien = dsnd->setcooperativelevel(hdlg, DSSCL_NORMAL); if (bien!=ds_ok) { Error("Error SetCooperativeLevel"); }

Programando DirectSound (cont..) // Crear el buffer de sonido. bien = dsnd->createsoundbuffer(&bdes, &buffer, NULL); if (bien!=ds_ok) { Error("Error CreateSoundBuffer"); } // Asegurar segmento de memoria para que no lo toque el swapping buffer->lock(0,0,&buflck,&nbytes,0,0,dsblock_entirebuffer); // Llenar buffer con datos if (buflck) FillBuffer((PBYTE)buflck,FC1,TAM1); // Desasegurar el segmento de memoria buffer->unlock(buflck,nbytes,null,0); // Tocar el sonido. buffer->setcurrentposition(0); buffer->play(0,0,0); break;

Programando DirectSound (cont..) // SALIDA DE WinMain() case WM_SYSCOMMAND: // Detener sonido y salir. buffer->stop(); buffer->release(); dsnd->release(); EndDialog(hdlg, 0); break; } return(false); }

Programando DirectSound (cont..) // Procesamiento de Errores int Error(LPCSTR Msg) { MessageBox ( hdlg, Msg, "Mensaje de error", MB_OK ); EndDialog(hdlg, 0); return(0); }

Programando DirectSound (cont..) // Generadora de un sonido puro (función seno) VOID FillBuffer(PBYTE pbuffer,int ifreq,int cuantos) { static double fangle ; int i; } for (i=0;i<cuantos;i++) { pbuffer[i]=(byte) (127+127*sin(fAngle)); fangle += 2 * PI* ifreq / SPS; if (fangle > 2*PI) fangle -= 2 * PI; }

DIRECTSOUND: directsound reproducir un buffer estático Dr. Maximino Peña Guerrero, file: PlayStatic, Diciembre 19, 2005

Ejemplo DirectX (Ceballos)

Ejemplo DirectX (Microsoft)

Ejemplo DirectX (Microsoft)

Ejemplo Drivers (Juan Símuta Peña)

Procesamiento de Partituras

Mezcladora ALSA

CONCLUSIONES DirectX proporciona acceso de bajo nivel al hardware multimedia independiente del dispositivo. Al usar una capa de abstracción de software y una capa de emulación de hardware, DirectX ofrece una serie de consistentes prestaciones sobre una amplia variedad de configuraciones de hardware aumentando al mismo tiempo la posibilidad de funcionamiento por hardware. Simulando con DirectX se pueden aprovechar los avances del hardware a medida que se vayan originando, incluso después de que un juego comience a venderse.

REFERENCIAS Dr. Maximino Peña Guerrero, file: PlayStatic, Diciembre 19, 2005