Conclusiones Todas las pruebas han sido realizadas bajo la siguiente configuración: Hardware: Procesador: AMD XP1500+ Placa base: Legend QDI KuDoz 7 Memoria RAM: 256Mb (DDR) Tarjeta de sonido: Integrada en la placa, VIA ac'97 Software: Sistema operativo: Windows 98 Configuración de las propiedades multimedia de Windows: Reproducción: Aceleración de hardware: Calidad de conversión de la velocidad de muestreo: Grabación: Aceleración de hardware(no soportado por la tarjeta): Calidad de conversión de la velocidad de muestreo: completa óptima completa óptima Acerca de las pruebas A la hora de realizar las pruebas se han probado todas las combinaciones posibles de las siguientes características: Modelos de concurrencia para el hilo(véase la estructura COINIT en el MSDN para más información): COINIT_MULTITHREADED COINIT_APARTMENTTHREADED COINIT_DISABLE_OLE1DDE COINIT_SPEED_OVER_MEMORY Formato del sonido capturado y reproducido(idéntico en ambos casos): Frecuencia de muestreo: 8000 Hz 11025 Hz 22050 Hz 44100 Hz Nº de bits por muestra: 8 16 Nº de canales: Mono Estéreo Tamaño del buffer de grabación y del de reproducción Grabación 1500ms, reproducción 2000ms Grabación 2000ms, reproducción 2000ms Grabación 2000ms, reproducción 1500ms Tamaño del colchón 35ms, y bajando en 5ms si se escucha bien Información adicional acerca de las pruebas Cada prueba durará tres veces más tiempo que la duración del buffer más grande, esto es así porque durante la implementación se observó que la aplicación a veces “cascaba” cuando se terminaba el buffer y volvía al principio(recordar que son buffers circulares), por razones debidas al tamaño de la información que se pretendía leer. En estas pruebas se informa si el sonido se escuchó bien o mal, o si se produjeron ecos. Pues bien, estos “errores” parece que no tienen nada que ver con el módulo de captura, ya que en pruebas realizadas anteriormente a estas se volcaba la salida tanto a un fichero WAV como al módulo de salida y aunque en la reproducción simultánea a la captura se escuchasen cortes o ecos, en el fichero WAV no se apreciaban dichos errores, o sea, que grabar parece que graba bien(que es lo que nos interesa). La latencia es medida como el tiempo que transcurre entre dos recogidas consecutivas de datos desde el modulo de captura. Hay que tener en cuenta que la mayoría de las veces cuando le pidamos datos al modulo de captura este devolverá cero bytes, sólo se mide cuando nos devuelve datos. Conclusiones 1. 2. 3. 4. 5. Cuando las pruebas se realizaron a una frecuencia de muestreo se 11025 Hz(y sólo a esta frecuencia) las DirectSound “cascaban”, y a veces aunque no cascaban en la reproducción solo se oía ruido estático(como en una televisión cuando no está sintonizada en ningún canal). Estos fallos no tienen nada que ver(eso creo) con mi aplicación, parecen un problema de las DirectSound En las pruebas que se realizaron en estéreo y con 16 bits por muestra se observó una latencia notablemente más baja que con las demás combinaciones(dentro de una misma frecuencia de muestreo) Cuanto más alta es la frecuencia de muestreo más baja es la latencia Los dos puntos anteriores son debidos a que cuanto más altos sean los valores de frecuencia de muestreo, bits por muestra y número de canales, cada milisegundo, por ejemplo, de sonido ocupa más bytes, y por lo visto las DirectSound, posiblemente, no nos devuelven datos cuando estos no llegan a tener un tamaño determinado. El establecimiento de un modelo de concurrencia u otro no parece tener consecuencias en la latencia, pero sí en la calidad del sonido reproducido. Parece que COINIT_SPEED_OVER_MEMORY es la que mejores resultados da.