2017-06-12 3 views
1

Ich erstelle einen Audio-Player mit WPF und NAudio in C#. Immer wenn die Leistung meines Computers niedrig ist, beginnt der Ton extrem nachzuschwingen, was verheerend klingt. Mir ist aufgefallen, dass dies bei ähnlichen Anwendungen wie Spotify oder Windows Media Player nicht der Fall zu sein scheint.Verhindern Audio Verzögerungen auf hoher CPU laden

Wie kann ich die Leistung des Audio-Threads erhöhen? Gibt es eine Möglichkeit, anderen Threads Priorität einzuräumen?

bearbeiten: Code

WavePlayer = new WaveOut(); 
source = new AudioFileReader(Filepath) 
WavePlayer.Init(source); 
WavePlayer.Play(); 
+0

Können Sie den Quellcode bereitstellen? – mjwills

+0

Ich habe den relevanten Code zu meiner Frage hinzugefügt, aber es gibt nicht wirklich viel zu zeigen, obwohl ... –

+1

Was genau meinen Sie mit "die Leistung meines Computers ist niedrig"? Ist dein ganzer PC für die CPU ziemlich ausgereizt? Oder läuft nur Ihre Anwendung bei etwa 100% CPU-Auslastung? Auch läuft dein WavePlayer in einem separaten Thread, oder läuft er im Hauptthread? – bassfader

Antwort

2

standardmäßig in einer WinForms/WPF-Anwendung, wird WaveOut den UI-Thread verwenden, um den Audio-Puffer zu füllen. Wenn Sie stattdessen WaveOutEvent verwenden, erhalten Sie einen Hintergrund-Thread, der das für Sie erledigt. WasapiOut und DirectSoundOut funktionieren auch auf diese Weise.

Denken Sie daran, dass wenn Sie Puffer nicht rechtzeitig füllen können, Sie Stottern/Aussetzer in Audio bekommen. Wenn das Umschalten des Treibermodells für Sie nicht funktioniert, müssen Sie möglicherweise Ihren Audiocode optimieren oder die Pufferdauer erhöhen.

Verwandte Themen