Welkom piraten liefhebber, maak een account of login voor meer info!!

directsound broadcast synctest

Reactie plaatsen | vorige bericht | volgend bericht | terug naar overzicht | Laatste gelezen reactie |
 1425 x bekeken Door siekmanski 15 Sep 17:00 Bekijk foto
Hallo geïnteresseerden,

Net als Echoflex ben ik bezig met het programmeren van een Broadcast Processor.

Omdat ik naast ASIO ook DirectSound wil gebruiken voor de mensen die geen ASIO geluidskaart hebben, ben ik bezig om dit zo goed mogelijk voor elkaar te krijgen.
Om de vertraging zo laag mogelijk en de synchronisatie tussen 2 verschillende geluidskaarten optimaal te krijgen zonder clicks en vervorming van het geluid,
heb ik een test programmaatje geschreven.

Dus aan jullie de vraag of je dit programmaatje wilt testen en proberen hoe laag je de Latency ( vertraging ) kan krijgen door de bufferlengte zo laag mogelijk te zetten en het liefst bij een samplerate van 192000 Hz.
Tevens wil ik graag weten of de kwaliteit van de muziek O.K. is en wat het CPU gebruik is van het programmaatje.

De synchronisatie werkt nu en de latency is zo laag mogelijk.
Heb alleen aandacht besteed aan de synchronisatie en de kwaliteit van de muziek en niet aan de layout van de bediening of het checken van hick-ups door windows of het resamplen tussen verschillende samplerates.

Hoe werkt het;

Via een interrupt timer "poll" ik eerst de opname en afspeel geluidskaart en lees de samples die klaar staan in.
De tijd die daar voor nodig is neem ik op en stop deze in een FIFO buffer met 64 waarden ( en reken zo het voortschrijdend gemiddelde uit )
Dit moet wel omdat DirectSound niet echt zuiver is met de posities van de Capturepos en Writepos en deze om de 10 ms ververst worden.
Ook verschilt dit weer enorm tussen allerlei geluidskaarten die ik heb getest.

Hetzelfde doe ik met de afspeelbuffer, het verschil in samples tussen opnemen en afspelen wordt dan mijn synchronisatie fractie.
Een probleem is dat je door de slechte timing van DirectSound soms geen samples krijgt aangeboden en soms het dubbele van de bufferlengte.
Hier moet je dus rekening mee houden.

Dus ik laat de opname 2 bufferlengtes vooruit lopen ( + 32 samples voor de synchronisatie ) op het afspelen.
Zo voorkom ik "staart happen" in de ringbuffer wat vreselijke clicks veroorzaken omdat je oude samples inleest.

Elke 3 seconden test ik het verloop tussen de samplerates van beide geluidskaarten inclusief de tijd verschillen veroorzaakt door DirectSound en corrigeer ik het verschil vloeiend.
Dit is de "Synchronisatie Sample Pointer" in het programmaatje.
Verder heb ik er een safety check in gebracht als de afwijking meer dan +/- 32 samples is deze met 1 sample per Bufferswap wordt gecorrigeerd.

Mijn laagst behaalde latency tussen verschillende geluidskaarten is 10 milliseconden bufferswap.

Voor tips houd ik mij aanbevolen......


http://members.home.nl/siekmanski/DSound_SyncTimer.zip


Deel via: Twitter | Facebook | LinkedIn | Volgen | Tip | Print |

Je hebt geen rechten om dit forum (verder) te lezen of bent niet ingelogd !!