Folgende Situation: Ich lasse Sound über DXAudioIn aufnehmen, das ganze läuft über nen FastGainIndicator, dann über nen GainProcessor und landet schließlich in einem WaveOut. So weit funktioniert alles, ich kann aufnehmen und das Aufgenommene als Wave speichern.
Jetzt will ich aber meine erste Aufnahme beenden und sofort mit der zweiten fortfahren, das dient dazu verschiedene Tracks zu haben. D.h. mein Programm muss die erste Aufnahme anhalten und dann noch während diese gespeichert wird mit der nächsten anfangen. Jedoch wird dies alles von einer einzigen Komponente (WaveOut) geleistet und diese kann erst mit der Aufnahme anfangen wenn davor alles gespeichert wurde. Wie kann ich das lösen? Am besten mehrere Komponenten erstellen und dann von der ersten bis zur letzten durchwechseln, sodass eine Komponente nie gleichzeitig speichern und aufnehmen muss? Soll ich das mit einem Array lösen oder reichen da drei dieser WaveOut-Komponenten?
Meine Quellcode sieht (gekürzt) so aus:
Delphi-Quellcode:
type
TForm1 = class(TForm)
DXAudioIn1: TDXAudioIn;
WaveOut1: TWaveOut;
GainProcessor1: TGainProcessor;
FastGainIndicator1: TFastGainIndicator;
private
{ Private-Deklarationen }
Output: TAuFileOut;
public
{ Public-Deklarationen }
end;
procedure TForm1.StarteAufnahme(Sender: TObject);
begin
Output := WaveOut1;
Output.FileName := //Speicherpfad
Output.Run;
end;
procedure TForm1.ErzeugeNeuenTrack(Sender: TObject);
begin
Output.Stop; //hier wird die Aufnahme sowohl angehalten als auch gespeichert
Output.FileName := //neuer Speicherpfad;
Output.Run;
end;
Nach Output.Stop kommt eine (Fehler-)Meldung, dass die Komponente beschäftigt sei. Output.Run kann dann wahrscheinlich nicht ausgeführt werden.
Am liebsten würde ich das Aufgenommene irgendwo zwischenspeichern, sobald ich jedoch Output.Stop ausführe wird das ganze sofort auf der Festplatte gespeichert und das kann eben seine Zeit dauern.