![]() |
Wie wave-Resource mit SndPlaySound abspielen?
Hallo zusammen!
Ich habe für ein Programm, sagen wir ‚Zahlen.dpr‘ mit der IDE eine Resourcendatei erstellt, die die Wave-Dateien der gesprochenen Zahlen von 1 bis 100 enthält. Die Vorlage sieht dann so aus: Resource_1 RCDATA 001.wav Resource_2 RCDATA 002.wav …. Resource_100 RCDATA 100.wav Diese Vorlage besteht ja nur aus Strings, die in eine RES.Datei compiliert werden, die dann wohl die Wave-Dateien der Zahlen enthält. Diese Resource wird mit {$R ZahlenResource.RES} in das Programm eingebunden. Sie befindet sich im selben Ordner wie ‚Zahlen.dpr‘. Wie muss nun der SndPlaysound-Befehl aussehen, um zum Beispiel die Resource_1 abzuspielen? Ich würde mich freuen, wenn mir jemand weiterhelfen würde. MfG Gelmo |
AW: Wie wave-Resource mit SndPlaySound abspielen?
Sorry, im Eifer habe ich gar nicht gesagt, was ich wissen möchte. Wie kann ich eine der Dateien aus der Resource auslesen und mit PlaySound abspielen? Muss ich dafür Resource_1 oder 001.wav als Resourcennamen angeben? Habe in der Beschreibung zur WinApi nachgesehen, kann aber mit den Parametern nichts anfangen.
|
AW: Wie wave-Resource mit SndPlaySound abspielen?
Du musst keine Ressourcendatei mehr erstellen und manuell kompilieren. Das macht Delphi mittlerweile bequem selbst.
Du findest die Ressourcenverwaltung im Menü Projekt --> "Ressourcen und Bilder...". Dort kannst du einfach direkt Ressourcen hinzufügen. Abspielen geht dann mit:
Delphi-Quellcode:
Statt 0 sollte auch HInstance gehen, aber soweit ich mich erinnere geht beides.
PlaySound('Resource_1', 0, SND_RESOURCE or SND_ASYNC);
Mehr dazu findest du in der Doku zu PlaySound, ![]() ![]() Dort wird als Typ der Ressource WAVE verwendet. |
AW: Wie wave-Resource mit SndPlaySound abspielen?
Das habe ich schon so gemacht. Mit 'Project/Resourcen und Bilder' habe ich die Dateien in die Resource übernommen.
Mit folgender Procedure, die ich nach deinem Post angepasst habe:
Delphi-Quellcode:
erhalte ich die Fehlermeldung: [dcc32 Fehler] Unit1.pas(93): E2010 Inkompatible Typen: 'PWideChar' und 'string'
Procedure TForm1.ZahlSound (Zahl : Integer);
var ResName, ResQuelle : String; begin Resquelle:='Programm1Resource.RES'; ResName:='Resource_'+Zahl.ToString; Playsound(ResName, 0,SND_Resource or SND_Sync); end; Den Wert Zahl erhalte ich durch Klick auf ein Label mit der Zahl. Diese Angabe nehme ich dann in ResName auf. |
AW: Wie wave-Resource mit SndPlaySound abspielen?
Du musst auf den korrekten Typ casten:
Delphi-Quellcode:
procedure TForm1.ZahlSound(Zahl: Integer);
var ResName: String; begin ResName := 'Resource_' + Zahl.ToString; Playsound(PChar(ResName), 0, SND_Resource or SND_Sync); end; |
AW: Wie wave-Resource mit SndPlaySound abspielen?
Ich melde mich erst jetzt, weil es auch mit
Delphi-Quellcode:
nicht geklappt hat, den Sound in der Resource zu aktivieren. In der Version oben höre ich keinen Ton, wenn ich Snd_Resource weglasse, höre ich den Windows-Fehlerton.
Playsound(ResName, 0,SND_Resource or SND_Sync);
Habe das Problem inzwischen gelöst, indem ich den Ordner mit den Wave-Dateien im Umfeld des Programms suche und die einzelnen Töne in ein String-Array mit den jeweiligen Sounddatei-Pfaden aufnehme und dann mit
Delphi-Quellcode:
abspiele. Das funktioniert jetzt.
Playsound(ZahlSound[Zahl],0,SND_Sync);
Vielen Dank MfG Gelmo |
AW: Wie wave-Resource mit SndPlaySound abspielen?
Liste der Anhänge anzeigen (Anzahl: 2)
Dann musst du irgendetwas anders gemacht haben. So sieht es bei mir aus:
Anhang 57362
Delphi-Quellcode:
Das Testprojekt, das ich dafür eben erstellt habe, liegt im Anhang.
procedure TForm281.ZahlSound(Zahl: Integer);
var ResName: String; begin ResName := 'Resource_' + Zahl.ToString; Playsound(PChar(ResName), 0, SND_Resource or SND_Sync); end; procedure TForm281.Button1Click(Sender: TObject); begin ZahlSound(1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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