AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Wav-Dateien aus Dll laden - Kein Sound
Thema durchsuchen
Ansicht
Themen-Optionen

Wav-Dateien aus Dll laden - Kein Sound

Ein Thema von Yheeky · begonnen am 22. Jun 2002 · letzter Beitrag vom 27. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Wav-Dateien aus Dll laden - Kein Sound

  Alt 22. Jun 2002, 17:08
Hi,

ich habe für mein Programm, welches diverse Wave-Dateien zum Abspielen benötigt, eine Dll Datei erstellt, in der genau diese Wave-Dateien sind. Nachdem die Dll erfolgreich erstellt wurde, wollte ich diese mithilfe meines Programmes folgendermaßen aufrufen:

Code:
PlaySound(PChar(200), Dll, SND_ASYNC [b]or[/b] SND_MEMORY [b]or[/b] SND_RESOURCE);
[color=#000080][i]// die 200 ist die Indexzahl, die in er .rc Datei festgelegt wurde[/i][/color]
Da dieser Versuch scheiterte, ist mir aufgefallen, dass die Dll Datei nirgendwo geladen wird. Also habe ich bei FormCreate die Dll so geladen:

Code:
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b]
  DLL := LoadLibrary('Sound.dll');
[b]end[/b];
Unter public habe ich noch die Variable festgelegt:

Code:
[b]public[/b]
  Dll : HINST;
Dies hat aber auch nicht funktioniert...kann mir da jemand helfen? Ich habe keine Fehlermeldung bekommen, sondern die Wav-Datei wurde einfach nicht abgespielt.

Gruß Yheeky
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 22. Jun 2002, 17:35
Moin Yheeky,

ich bin jetzt zwar nicht mit PlaySound so besonders vertraut, aber wenn ich mir die Doku dazu mal ansehe, komme ich zu dem Schluss, dass sich SND_MEMORY und SND_RESOURCE ausschliessen. (mag ein Irrtum sein).
Versuch's also mal ohne SND_MEMORY.

Prinzipiell kann es recht nützlich sein bei der Verwendung von API Funktionen, die's nicht so tun wie erwartet, sich mal den letzten Fehler anzeigen zu lassen. Auch wenn bei der Funktion nichts spezielles dokumentiert ist, kann das helfen.

Also einfach mal

Code:
ShowMessage(SysErrorMessage(GetLastError));
direkt hinter die PlaySound Zeile.

oder

Code:
[b]if[/b] [b]not[/b] PlaySound(...) [b]then[/b]
[b]begin[/b]
  ShowMessage(...);
[b]end[/b];
Vielleicht gibt das ja näheren Aufschluss.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 22. Jun 2002, 17:38
Hi Yheeky,

das PSDK sagt dazu:

Zitat:
pszSound
A string that specifies the sound to play.

[...]

Three flags in fdwSound (SND_ALIAS, SND_FILENAME, and SND_RESOURCE) determine whether the name is interpreted as an alias for a system event, a filename, or a resource identifier.
Das deutet darauf hin, dass du den Namen und nicht die Ressourcennummer verwenden musst. Auch im Buch "Win32 Multimedia-API" (Alan C. Moore) heißt es:

Zitat:
Drei Flags in fdwSound ([...]) entscheiden darüber, ob der Text als Dateiname, als Ressourcenbezeichner oder als Alias für einen Systemsound interpretiert wird.
Probier einfach mal, den Namen als String zu verwenden.

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#4
  Alt 23. Jun 2002, 00:36
@Christian: Also der Tipp war wirklich gut. Ich habe jetzt zwei Fehlermeldungen auslesen können (mit Stringschreibweise und ohne - z.B. '20' als Index oder 20 als Index):

Code:
1. Der angegebene Ressourcentyp wurde nicht in der Image-Datei gefunden.
2. Die angegebene Image-Datei enthält keinen Ressourcenabschnitt
@d3g: Wie schon im oberen Teil erwähnt...hat nichts geholfen. Durch eine Veränderung der Schreibweise änderte sich nur die Art der Fehlermeldung, aber der Sound wurde trotzdem nicht abgespielt.

Ich hoffe auf weitere Tipps ...

Gruß Yheeky
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 23. Jun 2002, 01:01
Moin Yheeky,

schön, dass es zumindest zum Einkreisen geholfen hat.
Hast Du auch schon versucht SND_MEMORY wegzulassen?
Ach ja, hast Du eigentlich auch überprüft, ob LoadLibrary überhaupt ein gültiges Handle zurückgeliefert hat (<> 0)? Falls nicht, siehe Tip 1

Einen hab' ich noch:
Probier mal statt PChar(200)

Code:
MAKEINTRESOURCE(200)
Dies entspricht zwar eigentlich PAnsiChar(200) und somit PChar(200) aber man kann ja nie wissen

BTW:
d3g meinte nicht, dass Du die ID als String übergeben sollst, sondern statt der ID den Namen der Resource zu benützen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6
  Alt 23. Jun 2002, 13:09
Also die Dll Datei wird richtig geladen. Ich bekomme die Meldung "Der Vorgang wurde erfolgreich beendet.".
SND_MEMORY habe ich auch mal weggelassen, funktioniert aber nicht.
Vielleicht liegt mein Fehler ja schon in der Res-Datei. Ich habe eine Textdatei erstellt und die dort einzubindenden Dateien so aufgelistet:
200 WAVE "Sound.wav"

Ist doch richtig so, oder? RCDATA und WAV hatte ich auch schon versucht, klappt aber auch nicht. Ich bin wirklich ratlos...ich hatte das schonmal hinbekommen, aber jetzt will es nicht mehr funktionieren.

Wie man schon oben an dem Textdateieintrag sehen kann, ist die ID 200 als String "200" oder habe ich das jetzt falsch verstanden?

Achja...MAKEINTRESOURCE funktioniert auch nicht

Gruß Yheeky
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 23. Jun 2002, 13:36
Moin Yheeky,

unter dem Titel

"Playing WAVE Resources"

habe ich im PSDK noch etwas gefunden.

Die Deklaration in der .RC Datei müsste so aussehen

SoundName WAVE c:\sounds\sound.wav

wobei SoundName der Name ist, der dann mit PChar('SoundName') angegeben werden kann, WAVE die Kennung für eine .WAV Resource ist, und c:\sounds\sound.wav die Datei angibt.

Da die Resource bei Dir ja, wie ich vermute, auch mit Deiner Deklaration ohne Meckermeldung eingebunden wurde, wurde zum einen die ID 200 akzeptiert, zum anderen die einzubindende Datei gefunden. Also sollte die Resource als solche OK sein.

Eine Möglichkeit, die mir noch einfällt ist

Code:
PlaySound(PChar('#200'), Dll, SND_ASYNC [b]or[/b] SND_RESOURCE);
Durch das # wird angegeben, dass es sich um eine Resourcen ID handelt, und nicht um einen Resourcennamen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8
  Alt 23. Jun 2002, 13:51
Also ich habe eben noch ein altes Programm gefunden, in dem ich das auch mal versucht hatte. Damals habe ich ein String statt einer ID verwendet und siehe da...dann geht´s jetzt auch in meinem neuen Programm.
Deine Idee mit dem # ist interessant. Werde ich mal testen...

Danke für die Hilfe!

Gruß Yheeky
  Mit Zitat antworten Zitat
DeathsShadow

Registriert seit: 26. Apr 2008
22 Beiträge
 
#9

Re: Wav-Dateien aus Dll laden - Kein Sound

  Alt 27. Okt 2008, 14:47
Ich habe das auch mal versucht umzusetzen, allerdings funktioniert es nicht

Die Wave-Datei in die *.Dll zukompilieren ist kein Problem, nur der Aufruf klappt nicht. ... könntest du vielleicht mal den Code posten?
Florian S.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Wav-Dateien aus Dll laden - Kein Sound

  Alt 27. Okt 2008, 14:53
was heißt denn "funktioniert nicht"? hast du dir mal den Fehler ausgeben lassen wie oben beschrieben?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:44 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