AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Wie wave-Resource mit SndPlaySound abspielen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie wave-Resource mit SndPlaySound abspielen?

Ein Thema von Gelmo · begonnen am 24. Jan 2025 · letzter Beitrag vom 25. Jan 2025
Antwort Antwort
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
37 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie wave-Resource mit SndPlaySound abspielen?

  Alt 24. Jan 2025, 14:08
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
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
37 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 24. Jan 2025, 20:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.724 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 24. Jan 2025, 21:07
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: PlaySound('Resource_1', 0, SND_RESOURCE or SND_ASYNC); Statt 0 sollte auch HInstance gehen, aber soweit ich mich erinnere geht beides.

Mehr dazu findest du in der Doku zu PlaySound, inklusive Beispiel:
https://learn.microsoft.com/en-us/pr...43680(v=vs.85)
Dort wird als Typ der Ressource WAVE verwendet.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
37 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 24. Jan 2025, 23:19
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:
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;
erhalte ich die Fehlermeldung: [dcc32 Fehler] Unit1.pas(93): E2010 Inkompatible Typen: 'PWideChar' und 'string'
Den Wert Zahl erhalte ich durch Klick auf ein Label mit der Zahl. Diese Angabe nehme ich dann in ResName auf.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.724 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 25. Jan 2025, 00:20
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;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
37 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 25. Jan 2025, 17:13
Ich melde mich erst jetzt, weil es auch mit
Playsound(ResName, 0,SND_Resource or SND_Sync); 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.
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  Playsound(ZahlSound[Zahl],0,SND_Sync); abspiele. Das funktioniert jetzt.
Vielen Dank
MfG Gelmo
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.724 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wie wave-Resource mit SndPlaySound abspielen?

  Alt 25. Jan 2025, 18:57
Dann musst du irgendetwas anders gemacht haben. So sieht es bei mir aus:

screenshot-2025-01-25-185259.png

Delphi-Quellcode:
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;
Das Testprojekt, das ich dafür eben erstellt habe, liegt im Anhang.
Angehängte Dateien
Dateityp: zip Wav Test.zip (284,8 KB, 2x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:35 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 by Thomas Breitkreuz