Einzelnen Beitrag anzeigen

Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Audiostream vom Microphon

  Alt 16. Okt 2006, 19:41
Hmm, einfach ist das glaube ich nicht, du kannst aber wenn ich mich richtig erinnere den Soundeingang über die mmsystem funktionen:

waveInOpen();
waveInPrepareHeader();
waveInAddBuffer();
waveInStart();

ansprechen.

Zuerst musst du waveInOpen aufrufen, das öffnet sozusagen den device, und du kannst ne Callbackfunktion angeben, in der kannst du dann deine Daten behandeln, außerdem musst du der Funktion nen Pointer auf ne TWAVEFORMATEX strucktur übergeben, darin sind die Infos, wie z.B. Sampelrate oder Anzahl der Kanäle(mono, stereo).

Danach musst du deine Daten preparieren mit der waveInPrepareHeader.
Diese übergibst du das Handel des devices, das du von waveINOpen bekomsmten hast(1. Parameter).
Sowie eine Adresse auf eine TWaveHdr Strucktur. Diese muss du mit deinem Buffer, Buffergröße und dwflag auf 0 füllen.

Jetzt musst du deine Infos an das Soundevice schicken. mit der waveInAddBuffer.
Wenn der buffer voll ist, wird das WHDR_DONE bit in der dwFlag vom TWaveHdr gesetzt, so kannst du in der callback funktion überprüfen, ob der buffer voll ist.

Um dann nun das Aufnehmen in den Buffer zu starten wird die waveInStart() aufgerufen.

So, ich weiß nicht ob das alles exakt stimm, ich weiß das nur von den Midi funktionen. Jedoch sehen die sehr ähnlich aus, nur das man hier eben noch den Soundtyp (TWAVEFORMATEX) angeben muss, sonst ist alles gleich.

Such am besten bei google wie du das machen kannst, ich kann gerne mal meinen code Posten, wie ich SysEx Commands über den Midiinput aufnehme!

Außerdem musst du mal gucken, welche Messages an die Callbackfunktion geschickt werden um zu wissen, wann du was aus dem buffer in deinen Stream speichern kannst.


Wie du das ganze dann per indy verschickst, kann ich dir nicht sagen aber ich denke das ist nicht umbedinngt das schwerste. Nur das du zuviele Daten haben wirst, für ne gute übertragung, daher wirst du bestimmt komprimieren müssen, so wie es auch TeamSpeak(ist ein Delphi programm) tut. Ich glaube dort wird unteranderem Speex zum komprimieren genutzt.


Hoffe, dass dir das Hilft.

Eichhoernchen
Jan
  Mit Zitat antworten Zitat