Forum: Multimedia
by Julian M.,
15. Jan 2016
So, OSI Layer 8 Problem scheinbar behoben. So wie es aussieht benötigt es zwei Streams weil man nicht einen Stream versetzt in sich selbst kopieren kann.
Da ich auf keinen Fall vergessen möchte, meine derzeitige (sicher nicht optimale, aber scheinbar funktionierende) Lösung zu veröffentlichen, hier der Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
nextbufferisb:=true;
end;
Forum: Multimedia
by Julian M.,
14. Jan 2016
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..
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (ms = nil)...
Forum: Multimedia
by Julian M.,
14. Jan 2016
Danke für deine Antwort, Erfahrungen nach interessiert es die meisten Player nicht, ob die MP3 ein wenig abgehackt ist.
Ich ging allerdings davon aus, dass der von Bass.dll gelieferte Buffer immer ein Frame inkl. Header ist.
Aber: mein Hauptproblem ist, dass ich mit Streams immer noch nicht klar komme.:!:
Also sagen wir Stream_A enthält:ABCDEFG
wie kopiere ich nun korrekt 'BCDEFG' in...
Forum: Multimedia
by Julian M.,
13. Jan 2016
Könnte es sein, dass ein Ringbuffer genau das ist, was ich suche ?
himitsu hat hier http://www.delphipraxis.net/861255-post7.html eine Tmemoryringbuffer geschrieben, mein code sähe dann so aus ? Beim Abspeichern passiert leider wieder nichts.
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (rb = nil) then rb:=TMemoryringbuffer.create(14745600); // create the...
Forum: Multimedia
by Julian M.,
13. Jan 2016
Kannst du mir nochmals helfen ? Ich wollte nun "einfach" die letzten 10 Minuten immer in einem MemoryStream festhalten und diesen bei Bedarf abspeichern. Leider ist die erstellte Datei 0 KB groß, d.h. er schreibt nichts in den Memorystream.
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (ms = nil) then ms:= TMemoryStream.Create; // create the stream
if...
Forum: Multimedia
by Julian M.,
13. Jan 2016
Vielen Dank,
hab jetzt schon mit "fmCreate or fmShareDenyWrite" die Möglichkeit, an die Datei ran zu kommen.
Aber du hast natürlich recht, sauberer wäre es direkt in der StatusProc zu lösen. Kannst du mit dort noch ein wenig auf die Sprünge helfen ? Wie wahrscheinlich zu erkennen ist, habe ich von FileStreams leider keine Ahnung :oops:
Mit FileStream.Write(buffer^, len); schreibt er...