Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   NewAC: Nahtlos nacheinander aufnehmen (https://www.delphipraxis.net/160700-newac-nahtlos-nacheinander-aufnehmen.html)

hadschi92 26. Mai 2011 20:14

NewAC: Nahtlos nacheinander aufnehmen
 
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.

rollstuhlfahrer 26. Mai 2011 20:31

AW: NewAC: Nahtlos nacheinander aufnehmen
 
Zitat:

Zitat von hadschi92 (Beitrag 1103159)
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    WaveOut1: TWaveOut; // 1
  private
    Output: TAuFileOut; // 2
  end;

procedure TForm1.StarteAufnahme(Sender: TObject);
begin
  Output := WaveOut1; // 3
end;

Ich hab mal den Code etwas gekürzt. Irgendwas kann da nicht stimmen oder man braucht einfach "Output" gar nicht (siehe 1, 2, 3).
Ansonsten hast du dir die Antwort ja schon selbst gegeben: Einfach eine weitere Instanz deiner Klasse nehmen und die Aufnahme starten. Nachdem die erste fertig ist mit dem Speichern, diese aus dem Speicher nehmen (.Free).

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.

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