Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Audiostream "knackt" (https://www.delphipraxis.net/79283-audiostream-knackt.html)

Eichhoernchen 19. Okt 2006 16:17


Audiostream "knackt"
 
Hi,
ich hab hier schonmal den Source gepostet,
den ich nutze um vom Microphon einen Audiostream zu bekommen.
Diesen gebe ich auch direkt wieder aus (nur zum Testen), jedoch bekomme ich zwischen den einzelnen Puffern jedesmal ein knacken auf dem Audiokanal, woran liegt das?
Wenn ich den Puffer kleiner mache, wird auch die Knackfrequenz höher. Habe ich da vielleicht irgendwas falsch gemacht?

Ich hab davon noch nicht so die Ahnung von daher würd ich gern etwas Hilfestellung von euch haben


Danke!

TurboMartin 19. Okt 2006 16:54

Re: Audiostream "knackt"
 
Probier es mal mit wBitsPerSample auf 9 zu stellen und in der Zeile drunter 40100. :zwinker: Bei mir hat es dann aufgehört. Allerdings nach einer Weile auch dein Programm durch Windows und krieg deshalb nicht mehr den Taskmanager auf :gruebel: :mrgreen:

Sunlight7 19. Okt 2006 17:26

Re: Audiostream "knackt"
 
Wenn ich das richtig gesehen habe, verwendest Du nur einen Buffer?!

Versuchs mal mit mind. 2, ich habe bei meinem Programm 4 Buffer, damit klappt's Perfekt.

Eichhoernchen 19. Okt 2006 17:33

Re: Audiostream "knackt"
 
also mehr als einen Buffer?

Also immer einen auf reserve halten oder wie?

Ich versteh nicht so ganz, wie ich das machen soll... woher will ich wissen, wann der eine Buffer gespielt wurde?

Sunlight7 19. Okt 2006 17:40

Re: Audiostream "knackt"
 
2 auf Reserve :mrgreen:

Mit 1. aufnehmen, während der 1. gelesen wird, wird der 2. geschrieben...

Immer der Buffer, der bei DataInProc hereinkommt ist der aktuell beschriebene, den Verarbeiten (während desen wird ein anderer zum Aufnehmen verwendet) und zurück in die Liste stellen.

Eichhoernchen 19. Okt 2006 18:19

Re: Audiostream "knackt"
 
Also irgendwie will ich das nicht verstehen, wie ich das machen kann.

Ich hab mir jetzt gedacht, 4 Buffer... also nen array[1..4]
wenn nun daten kommen, werden diese in das array eingefügt, bis 3 array plätze voll sind.
Wenn nur noch 1ner leer ist, soll angefangen werden auszugeben.


Jedoch wird dann nur Müll ausgegeben... so stückchen.
Wie manage ich so ne Buffer schlange? Und wie weiß ich, wann ich anfangen kann den nächsten Buffer auszugeben?

Irgendwie voll kompliziert... oder ich bin einfach zu blöd....

Sunlight7 19. Okt 2006 18:30

Re: Audiostream "knackt"
 
Du mußt gleich alle Buffer beim Start in die Schlange stellen, der Treiber nimmt sich automatisch einen freien Buffer zum Aufnehmen und sendet diesen in die DataProc.
Aus dieser Procodure schickst Du den Buffer, nachdem Du in kopiert hast wieder in die Schlange zurück.

flossinger 21. Okt 2006 20:18

Re: Audiostream "knackt"
 
Also nach meiner Erfahrung reichen zwei Puffer aus. Da knackt nix. Das haben zumindest umfangreiche Tests ergeben.

Beim Input device gehe ich so vor:
Das Device bekommt beide Puffer übergeben.
Wenn ein Puffer voll gemeldet wird, wird sein Inhalt kopiert, bzw übers Netz verschickt. Diese Verarbeitung muss kürzer dauern als die enthaltene Spielzeit. Den verarbeiteten Puffer bekommt das Device sofort wieder zum Bespielen überreicht.

Beim Output device gehe ich anders vor:
Der erste eintreffende Puffer wird um seine halbe Spielzeit verzögert dem Device übergeben. Die folgenden Puffer werden aber immer sofort übergeben.

So haben beide Devices ausreichend Zeit, von einem Puffer zum Nächsten zu schalten. Während ein Puffer benützt wird, kann das Device rechtzeitig den nächsten vorbereiten und anreihen. Ohne Wartezeit und ohne Umschalten NACHDEM der Vorgänger zu Ende ist gibt es kein Umschaltgeräusch.

grüsse,
der flossinger

Sunlight7 21. Okt 2006 20:50

Re: Audiostream "knackt"
 
Zitat:

Zitat von flossinger
Also nach meiner Erfahrung reichen zwei Puffer aus. Da knackt nix.

Kommt auf die Buffergröße und was sonst gerade am PC läuft an :zwinker:

flossinger 22. Okt 2006 17:52

Re: Audiostream "knackt"
 
Da sagst du uns nicht viel neues.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz