2016-09-06 1 views
0

J'ai une application .NET Winforms où j'utilise NAudio pour la lecture et la fusion de fichiers audio.NAudio - Lecture audio fragmentée sur une connexion Terminal Server

Traditionnellement, cette application a été exécutée sur des PC et la lecture audio est correcte. Récemment, il y a eu des demandes pour pouvoir exécuter l'application à distance tout en étant connecté à un serveur Terminal Server. L'application fonctionne mais la lecture audio est saccadée et il arrive que l'audio s'arrête juste de jouer à mi-chemin dans le fichier. Si je joue le même fichier audio avec Windows Media Player, ce n'est pas saccadé.

J'ai créé une application de test simple (extrait de code ci-dessous) et je suis confronté au même problème de lecture audio avec la connexion Terminal Server.

Existe-t-il une manière différente de jouer l'audio lorsque je suis connecté à un serveur Terminal Server ou localement sur un PC? ou y a-t-il des paramètres qui doivent être modifiés?

WaveOutEvent wo = new WaveOutEvent(); 
var wavReader = new WaveFileReader(String.Format(@"{0}\{1}", AssemblyDirectory, "5_3712.wav")); 
wo.DeviceNumber = comboSelectDevice.SelectedIndex; 
wo.Init(wavReader); 
wo.Play(); 

Net Framework 3.5

Windows Server 2008 R2

Merci Vous

RÉSOLUTION

Basé sur la suggestion de Mark Heath ci-dessous, j'ai augmenté la durée de mémoire tampon par défaut de 300ms à 500ms et qui s'est débarrassé de la lecture saccadée lors de la lecture à partir d'un serv connexion

La propriété DesiredLatency sur WaveOutEvent est l'emplacement où la durée du tampon est modifiée.

De l'un des blog de Marc Messages: Link

« Vous pouvez également définir DesiredLatency, qui est mesuré en millisecondes Ce chiffre définit en fait la durée totale de tous les tampons Donc, en fait, vous.. Dans un futur NAudio, je pourrais réduire la confusion en remplaçant ceci par une propriété BufferDuration Par défaut, le DesiredLatency est 300ms, ce qui devrait assurer une expérience de lecture en douceur sur la plupart des ordinateurs également définir le NumberOfBuffers à certains autre chose que sa valeur par défaut de 2 bien que 3 soit la seule autre valeur qui vaille vraiment la peine d'être utilisée. "

code mis à jour Exemple:

WaveOutEvent wo = new WaveOutEvent(); 
var wavReader = new WaveFileReader(String.Format(@"{0}\{1}", AssemblyDirectory, "5_3712.wav")); 
wo.DeviceNumber = comboSelectDevice.SelectedIndex; 
wo.DesiredLatency = 500; 
wo.Init(wavReader); 
wo.Play(); 

Répondre

1

Vous pouvez essayer upping la taille de la mémoire tampon par défaut pour voir si cela aide. Ou vous pouvez essayer DirectSoundOut pour voir si cela fait une différence. Y a-t-il quelque chose qui se passe dans votre application et qui pourrait causer des collectes de place .NET?