¿Por qué agregar un renderizador a mi gráfico de filtro directo de DirectShow suave la entrada de audio al gráfico?

StackOverflow https://stackoverflow.com/questions/8844063

Pregunta

Tengo un gráfico de filtro directo en mi aplicación Delphi 6 construida con la biblioteca de componentes dspack. La estructura del gráfico es la siguiente:

  • Filtro de audio de origen de empuje personalizado
  • Grabador de muestra
  • Filtro de Tee (pero solo cuando enciendo el escritor de archivos WAV y el renderizador)
  • Renderizador (dispositivo de salida de PC preferido)
  • Escritor de archivos wav

El filtro de tee se agrega al gráfico solo si tengo ambas cosas El renderizador y los filtros de escritor de archivos WAV se activaron. De lo contrario, conecto solo el filtro que es encendido directamente al agarre de la muestra.

El audio se está entregando a través de un servidor de audio RTSP conectado WiFi que está transmitiendo audio en tiempo real. Si yo no Encienda el escritor de archivos WAV, el audio que sale de mis auriculares tiene los sonidos típicos de bombeo y clic ocasionales asociados con una transmisión de audio sin topar. Extrañamente, tan pronto como enciendo el escritor de archivos WAV Filtro, el audio se vuelve suave como el vidrio.

Tengo el código fuente para el escritor de archivos WAV y básicamente maneja las tareas de generar el encabezado de archivo WAV adecuado cuando sea necesario y escribir los búferes de audio según sea necesario, no mucho más que eso. Por lo tanto, me parece extraño que encenderlo suave la transmisión de audio entrante, especialmente porque no está aguas arriba del renderizador (filtro), sino que es un filtro de par colgando del extremo del filtro de tee junto con el renderizador.

¿Alguien puede decirme qué podría estar sucediendo para que la entrega de audio se acerque cuando encienda el filtro de escritor de archivos? ¿El filtro de tee hace algún amortiguador inherente? Quiero duplicar el mismo mecanismo para que pueda tener audio suave cuando el escritor de archivos no esté activado. Estoy tratando de evitar agregar mi propio búfer porque no quiero agregar más retraso a la transmisión de audio en tiempo real de lo que tengo que hacerlo.

¿Fue útil?

Solución

Si tiene una fuente en vivo y puede escucharla y el audio entregado al mismo tiempo, es posible que pueda saber si Agregar escritor de archivos presenta un retraso, que puede ser responsable de la diferencia. O puede haber un cambio en el tamaño o el número de buffers negociados en DecideBufferSize.

Sugeriría introducir un almacenamiento en búfer explícito en su filtro de empuje, como agregar un desplazamiento a los sellos de tiempo de muestra de medios. El almacenamiento inherente en el filtro de tee puede no ser confiable. Las variaciones en el tiempo de entrega son inevitables.

Un enfoque más sofisticado, si necesita correr con mínimo o sin amortiguación, podría ser estirar/comprimir el audio mientras preserva el tono.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top