Einzelnen Beitrag anzeigen

riko.delphipraxis

Registriert seit: 13. Aug 2008
12 Beiträge
 
#14

Re: "bass.dll" Aufnahme an beliebiger Stelle im St

  Alt 10. Sep 2008, 22:46
Wenn du was in deinen Wave-Stream einfügen willst nimmst du für diesen Modus am einfachsten einen neuen Stream in der Callback-Funktion.

Etwa so, ohne Funktionsgarantie...
Einfügeposition merken
InsertStream anlegen und in Callback verwenden
nach Aufnahmeende Zwischenspeicher anlegen
WaveStream bis zur Einfügeposition in Zwischenspeicher schreiben
InsertStream in Zwischenspeicher anhängen
Rest des Wavestreams in Zwischenspeicher anhängen
WaveStream Größe neu setzen
Zwischenspeicher in Wavestream rückkopieren
Länge im Wavehader anpassen

function RecordingCallback....

if Rec_Passage.Checked then
Formular.InsertStream.Write(buffer^, length)
else Formular.WaveStream.Write(buffer^, length);
...


procedure TFormular.StartRecording;
...
if Rec_Passage.Checked then
InsertPos := GetPos;
InsertStream := TMemoryStream.Create;
end if;
...


procedure TFormular.StopRecording;
...
if Rec_Passage.Checked then
begin
BufStream := TMemoryStream.Create;
BufStream.Write(WaveStream.Memory^,InsertPos);
BufStream.Write(InsertStream.Memory^,InsertStream. Size);
BufStream.Write(PByteArray(WaveStream.Memory)^[InsertPos],WaveStream.Size-InsertPos);
WaveStream.SetSize(BufStream.Size);
Move(BufStream.Memory^,WaveStream.Memory^,BufStrea m.Size);
BufStream.Free;
InsertStream.Free;
end;

// WAV-Header komplettieren
WaveStream.Position := 4;
i := WaveStream.Size - 8;
....


So ähnlich muss das klappen ohne das was rauscht...

Und ich geh jetzt auf den Federnball...
  Mit Zitat antworten Zitat