Pourquoi ne l'ajout d'un générateur de mon filtre DirectShow graphique lisse sur l'entrée audio au graphique?

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

Question

J'ai un graphique de filtre DirectShow dans mon application Delphi 6 construite avec la bibliothèque de composants DSPACK. La structure du graphe est le suivant:

  • source de poussée personnalisée filtre audio
  • Grabber échantillon
  • T Filtre (mais seulement quand je tourne sur les deux Writer fichiers WAV et Renderer)
  • Renderer (de préférence périphérique de sortie PC)
  • Fichier WAV Writer

Le filtre T est ajouté au graphique que si je deux Renderer et les filtres Writer de fichiers WAV sous tension. Sinon, je me connecte uniquement le filtre que est activée directement au Grabber échantillon.

L'audio est livré sur une connexion Wi-Fi connecté au serveur audio RTSP qui est le streaming audio en temps réel. Si je ne pas Activer le fichier Wav Writer, le son sortant de mon casque a le pompage typique et des sons de cliquetis occasionnels associés à un flux audio unbuffered. Curieusement, dès que je tourne sur le filtre Writer fichier WAV audio devient lisse comme du verre.

J'ai le code source pour l'auteur du fichier WAV et il gère essentiellement les tâches de sortie l'en-tête de fichier WAV approprié en cas de besoin et l'écriture des mémoires tampon audio nécessaire, pas beaucoup plus que cela. Je trouve étrange que tourner sur lissages du flux audio, d'autant qu'il ne soit pas en amont du moteur de rendu (filtre), mais est plutôt une tenture filtre pairs l'extrémité de la pièce en t Filtre à côté du moteur de rendu.

Quelqu'un peut-il me dire ce qui pourrait se produire pour faire sortir en douceur la transmission audio quand quand je tourne sur le filtre Writer fichier? Est-ce que le filtre T fait aucune mise en mémoire tampon inhérente? Je veux reproduire le même mécanisme pour que je puisse avoir audio lisse lorsque l'auteur du fichier n'est pas activée. J'essaie d'éviter d'ajouter mon propre tampon parce que je ne veux pas ajouter plus de retard dans le flux audio en temps réel que ce que je dois.

Était-ce utile?

La solution

Si vous avez une source en direct et vous pouvez l'écouter et l'audio livré en même temps, vous pourriez être en mesure de dire si l'ajout de Writer fichier introduit un délai, qui peut être responsable de la différence. Ou il peut y avoir un changement de taille ou le nombre de tampons négociés dans DecideBufferSize.

Je suggère l'introduction en mémoire tampon explicite dans votre filtre de poussée, comme l'ajout d'un horodatage-décalage d'échantillon aux médias. mise en mémoire tampon dans le filtre T Inhérente peut être pas fiable. Les variations dans les délais de livraison sont inévitables.

Une approche plus sophistiquée, si vous avez besoin d'exécuter avec mise en mémoire tampon minimale ou non, pourrait être à l'extension / compression audio tout en préservant le terrain.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top