AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mehrere WAVE Dateien parallel aus einer .RES-Datei abspielen

Mehrere WAVE Dateien parallel aus einer .RES-Datei abspielen

Ein Thema von XoRiC · begonnen am 22. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Mehrere WAVE Dateien parallel aus einer .RES-Datei abspielen

  Alt 22. Apr 2009, 14:03
Hi,

tut mir Leid dass ich schon wieder einen Thread bezüglich WAVE Dateien starte, aber ich konnte nach knapp 30 minütigem Durchstöbern des Archivs kein entsprechendes Thema finden das mir weiterhilft.

Ich hatte anfangs für mein Projekt einige WAVE Dateien im Projekt Ordner rumliegen, widergegeben habe ich diese wie folgt:

Delphi-Quellcode:
mciSendString(PChar('open waveaudio shareable'), nil, 0, 0);
mciSendString(PChar('play "./Sound/' + FileName + '"'), nil, 0, 0);
mciSendString(PChar('close waveaudio'), nil, 0, 0);
Wichtig ist für mein Projekt, dass mehrere WAVE Dateien parallel abgespielt werden können, was hier der Fall war und wunderbar geklappt hat.
Nun habe ich mich dazu durchgerungen, die WAVE Dateien in ein(ig)e RES Datei(en) zu packen. Um sie abzuspielen verwende ich derzeit folgende Prozedur:

Delphi-Quellcode:
  var hFind, hRes: THandle;
      Song: PChar;
begin
  hFind := FindResource(HLib, PChar(SoundName), 'WAVE');
  if (hFind <> 0) then begin
    hRes := LoadResource(HLib, hFind);
    if (hRes <> 0) then begin
      Song := LockResource(hRes);
      if Assigned(Song) then SndPlaySound(Song, snd_ASync or snd_Memory);
      UnlockResource(hRes);
    end;
    FreeResource(hFind);
  end;
Das funktioniert soweit auch einwandfrei, jedoch lässt sich auf diese Weise nur immer jeweils ein Sound gleichzeitig abspielen. Soll eine neue WAVE aufgerufen werden, so muss die Wiedergabe der alten WAVE abgebrochen werden.

Ich habe einige Lösungsvorschläge gefunden. Unter anderem die Idee, die WAVE Dateien temporär wieder auf die Festplatte zu speichern. So könnte ich meinen alten Code wieder verwenden, aber besonders elegant finde ich die Lösung nicht.
In die Bass.dll müsste ich mich erst einarbeiten und meine ersten Versuche sind kläglich gescheitert.

Ich suche nun also nach einer möglichst simplen Möglichkeit, um mehrere WAVE Dateien aus einer RES Datei parallel wiedergeben zu können.

Vielen Dank für Tipps und Links,
Xoric
  Mit Zitat antworten Zitat
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#2

Re: Mehrere WAVE Dateien parallel aus einer .RES-Datei abspi

  Alt 23. Apr 2009, 18:33
Falls niemand eine Idee hat würde ich mich wohl auch damit zufriedengeben, die WAVE Dateien temporär aus der RES Datei zu laden und auf die Festplatte zu speichern. Sie sind nicht allzu groß und wenn sie dort eine Weile liegen bleiben bevor sie wieder gelöscht werden sollte es hoffentlich nicht zu langsam werden.

Mit Bitmaps bekomm ich das hin:
- Objekt vom Typ TBitmap erstellen (var B: TBitmap)
- Bitmap aus der RES Datei laden (B.LoadFromResourceName(...))
- Bitmap auf die Festplatte speichern (B.SaveToFile(...))
Für WAVE Dateien fehlt mir leider der Ansatz.

Alternative Frage also:
Wie kann ich eine WAVE Datei aus einer RES Datei auf die Festplatte speichern?

Ich bin für jeden Tipp dankbar!
Xoric
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#3

Re: Mehrere WAVE Dateien parallel aus einer .RES-Datei abspi

  Alt 23. Apr 2009, 19:43
Wenn die Waves nicht groß sind, könntest Du sie in den RAM laden und von dort aus abspielen, zB mit MSDN-Library durchsuchenWaveOutOpen oder MSDN-Library durchsuchenDirectSound.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#4

Re: Mehrere WAVE Dateien parallel aus einer .RES-Datei abspi

  Alt 23. Apr 2009, 21:15
Hi Sunlight,

ich hab deine beiden Vorschläge angeschaut, bin damit aber auf keinen grünen Zweig gekommen.
Wenn ich irgendwann mal wieder die Nerven hab um mich da noch weiter hineinzuarbeiten werd ich das sicher tun.
Für jetzt hab ich mich für eine andere Lösung entschieden.
Vielen lieben Dank aber für die Links

-----

Ich werde meinen Thread mal als "erledigt" flaggen und mich mit der oben genannten Notlösung zufrieden geben.
Falls das Thema noch andere interessiert - so kann man WAVE (bzw beliebige) Dateien aus der RES Datei extrahieren:

Delphi-Quellcode:
var
 rStream: TResourceStream;
 fStream: TFileStream;
 fname: string;
begin
 fname := ExtractFileDir(Paramstr(0))+'\Test.wav';
 rStream := TResourceStream.Create(hInstance, 'Test', PChar('WAVE')) ;
 try
  fStream := TFileStream.Create(fname, fmCreate) ;
  try
   fStream.CopyFrom(rStream, 0) ;
  finally
   fStream.Free;
  end;
 finally
  rStream.Free;
 end;
Hier wird zum Beispiel die WAVE Datei 'Test' als 'Test.wav' in den Projektordner extrahiert.
Nachzulesen gibt es das hier.

-----

Sollte doch noch irgendjemand über diesen Thread stolpern, der eine Möglichkeit kennt um die WAVE Dateien direkt aus der RES abzuspielen ohne dass die Wiedergabe der letzten WAVE abgebrochen wird, wenn eine neue abgespielt wird, so möge er bitte dennoch hier posten

Danke
Xoric
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf