Hallo mal wieder,
ich bräuchte mal wieder einen kleinen Denkanstoß. Momentan programmiere ich ein kleines Diktiergerät und benutze dazu die bass.dll.
Wenn jetzt der Nutzer etwas aufgenommen hat und merkt, dass er etwas ändern will, dann möchte ich, dass er an einer beliebigen Stelle die Aufnahme fortsetzen kann und der Rest der schon vorhandenen Aufnahme dann gelöscht/überschrieben wird.
Bis jetzt habe ich die Aufnahmemodi "Ans Ende anhängen" und "Aufnahme überschreiben". Aber in die Aufnahme noch etwas einfügen, bzw. das was ich oben erläutert habe ist mir bisher noch nicht gelungen. Zwar kann ich einfach einen Teil des Streams überschreiben, aber wenn zum Beispiel die neue Aufnahme kürzer ist als die zuvor aufgenommene, dann hört man ja am Ende noch was von der alten Aufnahme. Um das Problem nicht zu haben müsste also erstmal der Teil des Streams, ab dem ich neu aufnehmen möchte, gelöscht werden. (1.Problem)
Und um später noch Passagen einfügen zu können würde ich gerne den Teil des Streams ab dem die Passage eingeführt wird bis zum Ende des Streams in einen 2. Stream speichern, dann aus dem alten Stream löschen, die Passage aufnehmen und den kopierten Teil aus dem zweiten Stream danach wieder ans Ende ranhängen. (2.Problem)
Bis jetzt klappt das aber noch gar nicht. Hier mal der Code, den ich bisher habe:
(Der CopyFrom-Befehl erzeugt allerdings eine
AV)
Delphi-Quellcode:
// Aufnahme je nach Aufnahmemodus
if OverwriteRadioButton.Checked = True
then begin
if WaveStream.Size > 0
then begin
// alte Aufnahme löschen
BASS_StreamFree(chan);
WaveStream.Clear;
end; // if
end
else if InsertRadioButton.Checked = True
then begin
if WaveStream.Size = 0
then begin
end
else
begin
WaveStream.Position := ProgressBar.Position;
WaveStream.CopyFrom(BufStream, WaveStream.Position);
end;
end
else if EndRadioButton.Checked = True
then begin
WaveStream.Position := WaveStream.Size;
ProgressBar.Position := ProgressBar.Max;
end; // if