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();