Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Aufnahmen mit Puffer: Pufferstream mit bass.dll (https://www.delphipraxis.net/65547-aufnahmen-mit-puffer-pufferstream-mit-bass-dll.html)

tobif 17. Mär 2006 18:28


Aufnahmen mit Puffer: Pufferstream mit bass.dll
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich nehme etwas auf und zwar mit dem beispiel der bass.dll record Test. Dabei will ich immer die letzten z.b. 7 Sekunden Puffern und sobald ich eine Taste drücke ab dort aufnehmen und später speichern. Das klappt auch schon etwas. Leider ist mir keine andere Methode eingefalln als immer in einem Pufferstream(puffer) im Kreislauf alles zu speichern und dann später an den Anfanng des richtigen Streams hängen. Wie geht das besser? Ich habe immer ruckler.

Angehängt ist der veränderte Quelltext(etwas sehr unorndentlich);

Hier die callback(ist lauf true soll richtig aufgezeichnet(Wavestream) werden, es wird immmer in den Pufferstream(puffer) im Kreislauf geschrieben.)
Delphi-Quellcode:
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
begin
    // Copy new buffer contents to the memory buffer

  if form1.puffer.Position>1000000 then
  begin
  form1.puffer.Position:=0;
  end;
  Form1.puffer.Write(buffer^, length);
  form1.label2.Caption:=inttostr(Form1.puffer.Position);
    // Allow recording to continue
  if form1.lauf then
  Form1.wavestream.Write(buffer^, length);
   Result := True;
end;
So wirds dann vorne drangehängt:
Delphi-Quellcode:
procedure TForm1.anh;
var
  i: Integer;
  spos: Int64;
  t: Extended ;
begin
  spos := puffer.Position;
  for i := 1 to ((puffer.Size - spos) div 10) do
  begin
    puffer.Read(t, 10);
    wavestream.Write(t, 10);
  end;
  puffer.Position := 0;
  caption := inttostr(puffer.Position);
  for i := 1 to ((spos) div 10) do
  begin
    puffer.Read(t, 10);
    wavestream.Write(t, 10);
  end;
  puffer.Position:=spos;
end;
Wie kann ich alles in eine Stream machen und rucekfrei machen. Also wie kann ich in einen Stream Daten schreiben und die alten immer wieder löschen, sodass der Stream immer die gleiche Größe behält.

cu
tf


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.

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