Hallo,
in einem Programm muss ich mich mit einem Server verbinden. Neben einigen anderen Dingen kann ich darüber Audiodaten von verschiedenen Geräten empfangen aber auch an andere Stationen versenden.
Das Empfangen funktioniert mittlerweile ziemlich gut. Auch das Senden funktioniert eigentlich, aber leider nur schlecht. Zum aufnehmen und abspielen der Audiodaten benutze ich die bass.dll. Für die haben wir eine Lizenz. Wenn aber jemand eine bessere Idee hat, sie ist keine Pflicht. Ich gehe also so vor wie in dem Beispiel"RecordTest" nur das ich mit 8khz Mono aufnehme.
So sieht die Callback Funktion im Beispiel aus:
Delphi-Quellcode:
function RecordingCallback(
Handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): boolean;
stdcall;
begin
RecordingStream.
Write(buffer^, length);
Result := True;
end;
Nun zu meinem Problem:
Es ist vorgegeben, dass solange ein Relais angezogen ist, immer Audio-Pakete mit 3200 Bytes mit ein paar anderen Daten zu einem Paket gepackt werden und über
TCP an den Server geschickt werden. Diese Paketlänge ist Fix. Wie kann ich es jetzt erreichen, dass die Callbackfunktion immer bei erreichen von 3200 Bytes eine andere Funktion aufruft, die dann das verschicken übernimmt.
Ich habe sie so umgeschrieben, aber leider stockt das, leiert oder gibt eine Art Echos von sich.
Delphi-Quellcode:
begin
if length >= 3200 then
begin
RecordingStream.Write(buffer^, 3200);
CreateData;
Result := True;
end;
end;
In CreateData wird das
TCP gepackt und verschickt.
Oder packe ich das vielleicht falsch an?
VG Frank