Hello, Guest the thread was called33k times and contains 326 replays

last post from angryking at the

VICE Soundprobleme

  • Okay, ich habe das Problem weiter eingegrenzt. Es hängt mit der VSYNC Konfiguration zusammen. Dabei scheint es auch einen Unterschied zu machen, ob man im Fenstermodus oder im Vollbild ist.
    Alle Tests waren jetzt mit 60Hz / und Vice auf C64C NTSC (60FPS)
    VSYNC generell AUS + Fenstermodus -> keine FPS Probleme, Soundsync einwandfrei, manchmal leichtes Ruckeln
    VSYNC generell AUS + Vollbildmodus -> keine FPS Probleme, Soundsync einwandfrei, starkes Ruckeln einzelner Zeilen
    VSYNC generell EIN + Fenstermodus -> starke FPS Probleme, Soundsync geht verloren + leichtes bis starkes Ruckeln
    VSYNC generell EIN + Vollbildmodus -> keine FPS Probleme, Soundsync einwandfrei, manchmal leichtes Ruckeln


    Ebenfalls interessant: wenn ich den Tripple-Buffer der Grafikkarte aktiviere geht der Soundsync bei eingeschaltetem VSYNC auch im Fenstermodus nicht mehr verloren. Die FPS Schwankungen und das Ruckeln bleiben jedoch.


    Zeraphine: wenn Du an Deinem PC sozusagen nativ 50Hz hast, kannst Du das mal austesten, ob das bei Vice auf C64C PAL und im 50Hz Betrieb das gleiche Ergebnis liefert?
    Ich kann gucken, ob ich dann mal einen verünftigen Bugreport abgebe. Wobei ich mir nicht sicher bin, ob das hier wirklich ein Emu-Bug ist oder nicht ein Prinzipbedingtes Problem.

  • Schön, das ihr das 50Hz Problem nachvollziehen könnt. Nur verstehe ich nicht, warum FastSID das bei euch nicht behebt. Kann ich jederzeit nachstellen. FastSID+50Hz = immer konstante 50 FPS in der Ausgabe. Habt ihr unter Settings -> Refresh Rate auch 1/1 eingestellt? Auf "Auto" gibt es einen Auto Frameskip, der nicht immer sinnvoll ist.



    Quote

    Ich hatte in der Windows Systemsteuerung unter Auflösung die HZ Zahl auf 50 HZ runtergedreht, ursprünglich stand sie auf 60 HZ. Habe nun die 60 HZ wiederhergestellt und oh wunder, alle Emulatoren laufen so gut wie ohne Störungen.


    Diese Aussage stört mich allerdings. Das darf so nicht passieren. Wenn dein Monitor wirklich echte 50Hz ausgeben kann, und nicht intern auf 56-60Hz umrechnet, müssen die PAL Emulatoren auch fehlerfrei laufen. WinVice ist bei mir z.B. die einzige Ausnahme, eben in der Kombination ReSID+50Hz. Micro64, WinUAE, Konsolen PAL etc. läuft alles einwandfrei in 50Hz.

  • Schön, das ihr das 50Hz Problem nachvollziehen könnt. Nur verstehe ich nicht, warum FastSID das bei euch nicht behebt. Kann ich jederzeit nachstellen. FastSID+50Hz = immer konstante 50 FPS in der Ausgabe. Habt ihr unter Settings -> Refresh Rate auch 1/1 eingestellt? Auf "Auto" gibt es einen Auto Frameskip, der nicht immer sinnvoll ist.


    Es gibt keinen "Auto Frameskip". Wenn man die Refresh Rate auf Auto stellt, ist sie abhängig von der Maximum Speed. Und wenn alles läuft, wie es soll (wie hier unter Linux der Fall) wird auch kein Frame geskipped. Mit dieser Refresh Rate gekoppelt ist soweit ich die Vice Docs richtig gelesen habe der emulierte VSYNC vom C64 (!!!) , nicht der VSYNC von der Grafikkarte. ( the value ranges from "1/1" (update 1/1 of the frames of the real machine, that is 50 frames per second) )
    Der Perfomance Einbruch bei aktiviertem VSYNC unter Windows (hab nochmal nachgesehen - unter Linux habe ich VSYNC auch aktiviert im GraKa Treiber) ist ja etwas anderes.

  • Bei mir gibt es halt keinen Performance Einbruch mit aktiviertem Vsync in der vice.ini. Hast du mal on the fly von FastSiD auf ReSID umgeschaltet? Das bricht hier sofort ein, ohne das ich am Vsync rumstelle (vice.ini oder direkt im Treiber von Windows).


    Die "Auto" Einstellung ist für zu schwache PCs gedacht (Auto Frame Skip wenn die Emulation unter 100% = Standard Maxium Speed fällt). Diese Option ist total veraltet, da heutige PCs eh schnell genug sind. Heißt aber nicht, das ein schneller PC mit aktivierter "Auto" Einstellung auch immer perfekt flüssig läuft. Der ein oder andere Grafiktreiber beißt sich an solchen Einstellungen. Windows war in der Hinsicht schon immer zickig.

  • Bei mir gibt es halt keinen Performance Einbruch mit aktiviertem Vsync in der vice.ini. Hast du mal on the fly von FastSiD auf ReSID umgeschaltet? Das bricht hier sofort ein, ohne das ich am Vsync rumstelle (vice.ini oder direkt im Treiber von Windows).

    FastSID liefert das gleiche Ergebnis. Ich spreche hier übrigens *immer* vom VSYNC im GraKa Treiber. Seitdem Windows selbst quasi ein "3D-Spiel" geworden ist, ist das ja die relevante Option.

    Quote

    Heißt aber nicht, das ein schneller PC mit aktivierter "Auto" Einstellung auch immer perfekt flüssig läuft.

    Hätte es zwar nicht gedacht, aber mit 1/1 taucht zumindest das Soundsync/Perfomance Problem hier nicht mehr auf. Die Videoausgabe ruckelt allerdings trotzdem wie Sau.


    Irgendwie alles sehr verwirrend unter Windows. Was jetzt nun der genaue Fehler ist, warum das so beschissen läuft, lässt sich schwer herausfinden. Vermutlich hängt das auch noch mit der verwendeten GraKa / Treibern zusammen, ob es da Probleme gibt oder nicht. Ist auf jeden Fall komisch, dass das nur so ultraselten auffällt, wenn es wirklich ein grundsätzlicher Bug wäre. Da es unter Linux auch alles einwandfrei läuft, bleibt nur die Vermutung es müsste irgendwie mit DirectX zusammenhängen. Aber wie, was, wo, warum? *keine Ahnung* ...
    Wüsste jetzt auch nicht, wie man das sinnvoll testen und reporten kann. Außer: anderen Emu nehmen oder Linux nutzen fällt mir dazu auch grad nix mehr ein.

  • Quote

    FastSID liefert das gleiche Ergebnis. Ich spreche hier übrigens *immer* vom VSYNC im GraKa Treiber.Seitdem Windows selbst quasi ein "3D-Spiel" geworden ist, ist das ja die relevante Option.


    Da würde ich wiedersprechen. Die Emulatorprogrammierer haben mitunter ihre eigenen Vsync Timings und ignorieren die Grafiktreiber Vorgaben, deshalb sind in den Emulatoren auch eigene Vsync Options. Wie das hier in WinVice ist weiß ich nicht, WinUAE nutzt jedenfalls seine eigenen Settings, unabhängig vom Treiber. Lasse deshalb im ATI Treiber immer die Funktion "Aus, falls nicht von Anwendung festgelegt" bzw. in einigen Fällen auch "immer aus" aktiviert. So gibt es in sämtlichen Emulatoren keinerlei Probleme.


    Quote

    Die Videoausgabe ruckelt allerdings trotzdem wie Sau.


    Dann aber wohl in 60Hz? Obwohl ein NTSC C64 natürlich nicht ruckeln dürfte. Genau wie ein PAL C64 in 50Hz.

  • Da würde ich wiedersprechen. Die Emulatorprogrammierer haben mitunter ihre eigenen Vsync Timings und ignorieren die Grafiktreiber Vorgaben


    Das ist im Fenstermodus überhaupt gar nicht möglich - da hat immer der Desktop, bzw. die GraKa "das Sagen". Auch im Fullscreen kommt es darauf an, "wohin" gerendered wird. Die VSYNC Einstellungen eines Emus oder Spiels gelten soweit ich weiß für "native Videomodi", nicht für API Surfaces (was heutzutage standard ist); bzw. es ist so, dass ich als Programmierer VSYNC nur "einschalten" kann, in dem Sinne, dass ich meine Ausgabe damit synchronisiere - nicht aber "ausschalten" kann. D.h. die Videoausgabe geschieht trotzdem per VSYNC, ich synchronisere meine Ausgabe allerdings nicht dazu. So funktioniert es jedenfalls mit SDL.


    Deine Unterscheidung in Emulatorprogrammierer und Nicht-Emulatorprogrammierer verstehe ich nicht. Die kochen auch nur mit Wasser und alle verbreiteten Emulatoren, die mir spontan einfallen nutzen DirectX, SDL OpenGL usw... und mit an Sicherheit grenzender Wahrscheinlichkeit auch den VSYNC der API.

  • Gibt halt verschiedene Möglichkeiten einen Vsync zu erhalten. Bei WinUAE und auch Mame z.B. (kann man dort wählen) ist es ein Sync zur Monitor Wiederholrate. Der Emulator samt Geschwindigkeit passt sich exakt der Wiederholrate an. Bei WinVICE ist es genau umgekehrt, bzw. arbeitet so wie der Vsync im Grafik Treiber (Wait for Vertical Sync).


    Davon ab gibt es noch den einen oder anderen Emulator, der bis heute nicht Direct3D nutzt sondern für Vollbild ausschließlich DirectDraw. Oder bietet neben Direct3D das DirectDraw immer noch an. Da nutzt das aktivieren des Vsync im Treiber überhaupt nichts.

  • Gibt halt verschiedene Möglichkeiten einen Vsync zu erhalten. Bei WinUAE und auch Mame z.B. (kann man dort wählen) ist es ein Sync zur Monitor Wiederholrate. Der Emulator samt Geschwindigkeit passt sich exakt der Wiederholrate an, bei WinVICE ist es genau umgekehrt, bzw. arbeitet so wie der Vsync im Grafik Treiber (Wait for Vertical Sync).


    Dir ist schon klar, dass Du hier zweimal das gleiche - nur unterschiedlich formuliert - gesagt hast?

  • Das mit den Vsync Methoden ist hier aber Offtopic und wird das Sound-/Ruckelproblem nicht lösen. Finde auf die schnelle nur die funktionale Erklärung, die ich dir auch schon gegeben habe.


    http://mamefaq.lexigame.de/mame32-optionen.htm


    Quote

    Sync To Monitor Refresh = Sagt Mame, dass er die Bildwiederholungsrate des Spiels ignorieren soll und die des Monitors verwenden soll
    Wait For Vertical Sync = Ermöglich Mame zum Warten mit dem Aufbau eines neue Screens bis der letzte fertiggestellt wurde

  • *hust*
    Wenn die Bildfrequenz der realen Hardware kein ganzzahliges Vielfaches der der emulierten Hardware ist, ist das Wort "Sync" aber fehl am Platz. Das kann man nennen wie man will (und die verschiedenen Möglichkeiten haben durchaus ihre programmiertechnischen Vor- und Nachteile), aber "synchron" ist da dann eben genau gar nichts.

  • Das mit den Vsync Methoden ist hier aber Offtopic und wird das Sound-/Ruckelproblem nicht lösen. Finde auf die schnelle nur die funktionale Erklärung, die ich dir auch schon gegeben habe.


    http://mamefaq.lexigame.de/mame32-optionen.htm


    Äh, Sync to Monitor Refresh ist aber was völlig anderes.
    Mit meinen Ausführungen oben meinte ich "Sync to VBLANK". Und es ging mir nie darum irgendein Ruckelproblem zu lösen, sondern herauszufinden, warum die Perfomance einbricht. Das sind zwei verschiedene Probleme. Das Ruckelproblem lässt sich, wie MacBacon richtig gesagt hat, überhaupt gar nicht lösen.

  • Jetzt reden wir aneinader vorbei, nicht das erste mal. Ich wollte dir nahelegen, das es mehr als nur eine Möglichkeit des Vsync gibt. Sync to monitor refresh ist die Erhöhung oder Absenkung des Emulatorgeschwindigkeit exakt zur Wiederholrate des Monitors PLUS dem Vsync.


    Das Ruckelproblem, welches du da im Test hattest, geht natürlich nicht zu lösen. PAL = 50 bzw. 100Hz ist ja logisch. Jeder andere Wiederholrate muß mit aktivierten Vsync auch ruckeln. Dachte, das hätten wir längst hinter uns gelassen. Vsync im Fenstermodus ist in Windows ganz nebenbei extrem unzuverlässig. Sowas sollte man eh nur im Vollbild testen.


    Edit: Sehe gerade, du hast nur NTSC und 60Hz getestet. Nein, das kann ich hier auch nicht bestätigen. Egal ob PAL oder NTSC C64, der Vsync macht hier kein Ärger mit Performance Einbrüchen in der Emulation.

  • Lasse deshalb im ATI Treiber immer die Funktion "Aus, falls nicht von Anwendung festgelegt" bzw. in einigen Fällen auch "immer aus" aktiviert.


    Quote

    Egal ob PAL oder NTSC C64, der Vsync macht hier kein Ärger mit Performance Einbrüchen in der Emulation.


    Ich denke, Du hast den immer aus?!? Wie Du meiner Tabelle entnehmen kannst, hatte ich mit der Einstellung ja auch keinen Perfomance Einbruch.

  • In den Treiber Einstellungen. In Vice kannst du den in der Vice.ini einstellen. Nehme aber an, daß es in diesem Fall exakt das gleiche ist wie der Treiber Vsync.


    Quote

    Wie Du meiner Tabelle entnehmen kannst, hatte ich mit der Einstellung ja auch keinen Perfomance Einbruch.


    Quote

    VSYNC generell EIN + Fenstermodus -> starke FPS Probleme, Soundsync geht verloren + leichtes bis starkes Ruckeln



    Vsync und Fenstermodus ist auch ungünstig. Hatte ich weiter oben schon geschrieben. Würde immer nur im Vollbild testen.

  • In den Treiber Einstellungen. In Vice kannst du den in der Vice.ini einstellen. Nehme aber an, daß es in diesem Fall exakt das gleiche ist wie der Treiber Vsync.


    *lol* wir drehen uns im Kreis ;-) Also vielleicht gab es da kürzlich ein Änderung im VICE, aber mit dem aktuellen Vice Build von Pokefinder passiert gar nichts, wenn ich in der Vice.ini da 'ne 1 reinschreibe (Option grau im Vice Menü), es sei denn, ich deaktiviere auch Dx9. Dann allerdings ist hier auch kein Fullscreen mehr möglich. Ich kann also faktisch VSYNC nur im GraKa Treiber ein und ausschalten.