Also ich weiß nicht, ob der Ringbuffer das richtige ist. Konnte jetzt mit diesem Code testweise 1 Minute in einen 'normalen' memorystream ms aufnehmen, dann 20 sec mp3 ab der Mitte von ms in einen zweiten Memorystream ms2 kopieren und diesen auf die Platte schreiben. Ich werde weiter rumprobieren..
Delphi-Quellcode:
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (ms = nil) then ms:= TMemoryStream.Create; // create the stream
if (buffer = nil) then ms.Free // finished downloading
else
begin // Ab hier geänderter Code
if ms.Size<=1474560 then //angabe in byte, entsprechend 1 Minuten bei 192kbit/s Stream
ms.Write(buffer^, len) //schreibe memorystream voll
else // wenn memorystream 1min beinhaltet, dann kopiere einen teil davon in ms2
begin
ms.Position:=round(ms.Size/2);//ab der hälfte von ms kopieren
ms2:= TMemoryStream.Create;
ms2.CopyFrom(ms,500000); //500000 Byte=20 sec
ms2.Position:=0;
ms2.savetofile('memorystream.mp3');
application.terminate; //nur damit es erst mal keine Fehlermeldungen gibt, wenn das Programm weiter läuft
end;
end;
end;
Gruß Julian