![]() |
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:
Nach Output.Stop kommt eine (Fehler-)Meldung, dass die Komponente beschäftigt sei. Output.Run kann dann wahrscheinlich nicht ausgeführt werden.
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; 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. |
AW: NewAC: Nahtlos nacheinander aufnehmen
Zitat:
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 21:03 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