Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Mehrere Wav-Dateien in einen Memory Stream laden (https://www.delphipraxis.net/162198-mehrere-wav-dateien-einen-memory-stream-laden.html)

niao 11. Aug 2011 18:59

Mehrere Wav-Dateien in einen Memory Stream laden
 
Hallo,

wer kann mir dringend helfen?

Ich möchte mehrere WAV-Dateien in einen Memorystream einlesen.
Die Ausgabe mache ich dann, in dem ich den gesamten Stream abspiele.

Beispielcode, welche so nicht funktioniert (es wird blos die letzte gefunde Datei abgespielt):

...
for i := 0 to Pred(FAudiolist.count) do
begin
...
SoundFile := FAudioList[s-1];
if FileExists(Soundfile) then
begin
ms.LoadFromFile(SoundFile);
AudioSource.CopyFrom(ms,0);
AudioSource.Position := ms.Size;
end
...

divBy0 11. Aug 2011 19:07

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Warum setzt du denn AudioSource.Position := ms.Size?

niao 11. Aug 2011 19:13

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Hallo,

danke für die Antwort. Wie hänge ich aber an den Stream an?

himitsu 11. Aug 2011 19:18

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Und man kann auch nicht einfach so Audiodateien aneinanderhängen.

Es funktioniert ja auch nicht, wenn du mehrere PAS-Dateien aneinanderhängst.

Da muß man schon den "funktionalen" Inhalt richtig verknüpfen, damit sowas ginge.

divBy0 11. Aug 2011 19:19

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
So wie es da steht müsste es eigentlich mit dem Anhängen funktionieren, hab mich vorhin verguckt.

Was passiert denn noch so in der for-Schleife?

divBy0 11. Aug 2011 19:20

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Man kann die schon aneinanderhängen, es kommt ja drauf an wie man die abspielt. Wenn man die Startposition und Größe hat geht das schon.

himitsu 11. Aug 2011 19:23

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Zitat:

Zitat von divBy0 (Beitrag 1116330)
Wenn man die Startposition und Größe hat geht das schon.

Dann spielst du aber auch wieder nur jedes Lied einzeln ab und nicht alle "zusammen". :angle:

divBy0 11. Aug 2011 19:28

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Wenn du doch für jedes Lied im Stream den Start und die Größe hast, dann kannst du doch einfach nach dem ersten Lied auf die Startposition des zweiten springen und spielst da weiter ohne erst die Datei von der Platte laden zu müssen.

Oder wenn die Abtastraten usw. bei allen Waves gleich ist, könnte man auch bei der ersten den Header anpassen und die Header bei den folgenden weglassen. :-D

niao 11. Aug 2011 19:30

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
In der Vorschleife sollen nur die Wav-Dateien zu einem Stream addiert werden.
Diesen Stream möchte ich dann mit einem Player laden und abspielen.
Kann mir jemand einen kurzen Beispielcode zum addieren der Wav-Dateien zu einem Stream geben?

Namenloser 11. Aug 2011 19:34

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Zitat:

Zitat von himitsu (Beitrag 1116328)
Und man kann auch nicht einfach so Audiodateien aneinanderhängen.

Bei manchen Formaten geht das tatsächlich. Ebenso bei manchen Videoformaten.

divBy0 11. Aug 2011 19:35

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Lass doch einfach

Delphi-Quellcode:
AudioSource.Position := ms.Size;
weg und dann hast du alle WAVs hintereinander im Stream.

himitsu 11. Aug 2011 19:38

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Zitat:

Zitat von NamenLozer (Beitrag 1116334)
Bei manchen Formaten geht das tatsächlich. Ebenso bei manchen Videoformaten.

Ja klar, vorallem wenn es sich um Rohdaten des selben Formates handelt, geht es oftmals.
Aber bei WAVE gwht es im Allgemeinen nicht. :stupid:

divBy0 11. Aug 2011 19:41

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Es wäre interessant zu wissen wie die Dateien abgespielt werden sollen bzw. was eigentlich erreicht werden soll.

niao 11. Aug 2011 19:46

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Erreicht soll werden:
1. Ich möchte mehrere Wave-Dateien hintereinander abspielen, ohne meine Anwendung zu blockieren.
So habe ich mir gedacht diese in einen Stream zu laden und abzuspielen.
Hat jemand eine Idee?

divBy0 11. Aug 2011 19:54

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Und wie spielst du die WAVE ab? Zeig doch mal den Codeteil, wie die Wave aus dem Stream wiedergegeben wird.

niao 11. Aug 2011 20:00

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Hier der Abspielcode:
PlaySound(ms, 0, SND_ASYNC or SND_MEMORY); //MMSystem

divBy0 11. Aug 2011 20:05

AW: Mehrere Wav-Dateien in einen Memory Stream laden
 
Du kopierst alle Dateien in AudioSource und spielst dann ms ab, deshalb wird ja nur die letzte abgespielt. Du kannst aber nicht einfach den kompletten Stream übergeben und alle Dateien hintereinander abspielen. Du musst dir die Lieder z.B. aus AudioSource wieder in einen eigenen Stream holen und diesen Stream dann mit PlaySound abspielen. Dazu musst du dir aber auch noch die Startposition für jedes Lied in AudioSource merken, die Größe kannst du dann anhand der Startpositionen berechnen oder du merkst dir die auch gleich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 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