Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Audiodateien einbinden (https://www.delphipraxis.net/9458-audiodateien-einbinden.html)

hacker 26. Sep 2003 18:05


Audiodateien einbinden
 
Kann mir mal jemand verraten, wie ich Audiodateien einbinden kann, so dass man z.B. auf einen Button drückt und dann die Audiodatei abgespielt wird?

Ich wäre sehr dankbar. :bouncing4:


Gruss Häcki

Christian Seehase 26. Sep 2003 18:27

Re: Audiodateien einbinden
 
Moin Häcki,

schau mal in der Code-Library

Sounds aus Ressourcen abspielen

hacker 26. Sep 2003 18:49

Re: Audiodateien einbinden
 
Sorry das ich so blöd frage, aber wo finde ich diese Resource? :cry:


Habe voll keine Ahnung.


Gruss Häcki

Matze 26. Sep 2003 19:16

Re: Audiodateien einbinden
 
Die erstellt man.

Kann man mit Delphi machen:

Datei - Neu - Weitere - Textdatei


dort gibt man z.B. ein:

100 Sound 'irgendwas.wav' (Angabe ohne Gewähr!) ;)


Speichern unter: irgendwas.res

Dann in Delphi: Umschalttaste+F11 und diese Datei auswählen.

Jens Schumann 26. Sep 2003 19:17

Re: Audiodateien einbinden
 
Hallo hacker,
die Resource wirst Du solange nicht finden bis Du sie nicht eingebunden hast.
Dafür musst Du Die eine Resourcendatei schreiben und in dein Projekt einbinden.
Code:
WaveResource WAVE "sound.wav"
Dabei muss sich die Wave-Datei sound.wav in demselbem Verzeichnis wie die Resourcendatei befinden.

emkay 26. Sep 2003 21:32

Re: Audiodateien einbinden
 
Das wird wohl so nicht funktionieren.

Delphi-Quellcode:
WaveResource WAVE "sound.wav"
Dies kommt in eine *.rc Datei rein. (per Texteditor oder Delphi)

Diese muss mit der Brcc32.exe aus dem Delphi-BIN-Verzeichnis in eine *.res kompiliert werden.
(einfach draufziehen) Dabei sollten Wave-Datei, *.rc und Brcc32.exe im selben Verzeichnis sein.

So, und dann wie im Link einbinden.

hacker 27. Sep 2003 09:48

Re: Audiodateien einbinden
 
Mir ist alles klar...Aber ich finde die Brcc32.exe nicht :cry:


Wo finde ich die?


Gruss Häcki :hi:

fkerber 27. Sep 2003 09:51

Re: Audiodateien einbinden
 
HI!

Also vom Pfadmuster hier:

C:\Programme\Borland\Delphi6\Bin\brcc32.exe

Ciao fkerber

hacker 27. Sep 2003 09:55

Re: Audiodateien einbinden
 
danke für den hinweis!! :bounce1:

Gruss Häcki :hi:

hacker 27. Sep 2003 10:14

Re: Audiodateien einbinden
 
Mit den Ressourcen wäre jetzt alles klar. :hello:

Jetzt fehlt mir nur noch dieser Ausdruck mit dem ich nichts anfangen kann :( :

Delphi-Quellcode:
procedure TfrmMAIN.Button1Click(Sender: TObject);
begin
  // Sounds stoppen
  PlaySound(nil,0,0);
  // Wavedatei aus Resource abspielen (SND_RESOURCE) und
  // nicht warten, bis das Abspielen beendet ist (SND_ASYNC)
  PlaySound('WaveResource',hInstance,SND_RESOURCE or SND_ASYNC);
end;
kann mir da jemand helfen?Ich wäre echt froh :)


Gruss Häcki :hi:

[edit=Admin]Delphi-Tags eingefügt. Künftig bitte selber machen. Danke. Mfg, Daniel[/edit]

fkerber 27. Sep 2003 10:27

Re: Audiodateien einbinden
 
Hi!

Als Tipp vorneweg: Quellcode immer in den Delphi-Code-Tags: [.delphi][./delphi](ohne die Punkte)

Wo genau ist das Problem mit dem Code?
Hast du schonmal in die Delphi-Hilfe zu diesem Thema geschaut?

ciao fkerber

hacker 27. Sep 2003 10:34

Re: Audiodateien einbinden
 
Für das nächste mal weiss ich es ja jetzt :)

Mein Problem...Ich kann doch nicht einfach das eingeben und dann kommt dr Sound und alles von aleine oder?

Habe noch nicht in der Hilfe gestöpert.Werde ich jetzt machen vieleicht hilft es mir weiter.


Gruss Häcki :hi:

emkay 27. Sep 2003 12:00

Re: Audiodateien einbinden
 
Doch, doch.

Eigentlich müsste es dann genau so klappen.

Bedingung ist halt nur, dass sämtliche Bezeichner, wie "WAVERESOURCE" und "Sound.wav"
mit Deinen persönlichen Bezeichnern bzw. Dateinamen übereinstimmen. (waren ja nur als Beispiele gedacht)

Viel Erfolg! :thuimb:

hacker 27. Sep 2003 13:44

Re: Audiodateien einbinden
 
kanst du mir ein Beispiel machen?

Im moment check ich garnichts mehr :wall:


Gruss Häcki :hi:

Jens Schumann 27. Sep 2003 14:33

Re: Audiodateien einbinden
 
Hallo,
wenn Du Playsound verwenden möchtest musst Du die unit mmsystem.pas einbinden

Den Resourcencompiler brcc32.exe brauchst Du (ich glaube) ab Delphi 5 nicht mehr.
Es reicht wenn Du die rc-Datei zu Deinem Projekt hinzufügst.

Wenn Du den Resourcencompiler verwenden möchtest, dann musst Du natürlich die Resource einbinden.
das gschieht mit {$R MeineResource.res}

Christian Seehase 27. Sep 2003 14:43

Re: Audiodateien einbinden
 
Moin Jens,

Zitat:

Zitat von Jens Schumann
Den Resourcencompiler brcc32.exe brauchst Du (ich glaube) ab Delphi 5 nicht mehr.
Es reicht wenn Du die rc-Datei zu Deinem Projekt hinzufügst.

Da hat Dich Dein Glaube leider in die Irre geführt.
Zumindest bei D5 klappt das mit dem einfachen einbinden der RC Datei bei vielen Resourcen nicht so richtig.
Ich habe den Eindruck, dass Borland hier intern einfach nicht den BRCC32 benutzt, warum auch immer.

Jens Schumann 27. Sep 2003 14:45

Re: Audiodateien einbinden
 
Hallo Christian,
ich glaube aber doch.
Bei mir klappt es mit Bitmap's, Wave's und RCData.
Mit welche Typen klappt es denn nicht?

Christian Seehase 27. Sep 2003 15:19

Re: Audiodateien einbinden
 
Moin Jens,

ich hab's jetzt gerade noch mal geprüft:
Wenn ich 24 Bit Bitmaps als Resourcen einbinden will (via RC-Datei), bekomme ich vom RLINK32 immer die Fehlermeldung:
"Unsupported 16 Bit Resource in File: ..."

Wenn ich hingegen die gleiche RC Datei mit dem BRCC32 in eine RES umwandele und diese dann einbinde gibt's keine Probleme.

Auf Grund Deiner Anregung hab' ich es eben noch einmal mit anderen Resourcetypen versucht, und erhalte immer (jetzt seltsamer Weise auch bei 24 Bit Bitmaps) die Meldung "Error Reading File", aber nur, wenn die RC Datei im Projektverzeichnis liegt (wo ich sie normalerweise nicht hinlege).
Bei der RES Datei nach wie vor keine Probleme.

Falls Du mir mal ein Beispiel (RC samt Datei(en), Pfadangaben usw.) zuschicken kannst, dass bei Dir funktioniert kann ich mal Ursachenforschung betreiben.

hacker 27. Sep 2003 16:13

Re: Audiodateien einbinden
 
Liste der Anhänge anzeigen (Anzahl: 3)
Jetzt komme ich überhaupt nicht mehr nach. :(

Ich habe jetzt eine kleine Vorlage dazu gelegt...wen jemand will, kann er mir mal ein Beispiel mit al den ressourcen, Quelltext und so machen dann komm ich vieleicht auch nach.

Ich bin euch dankbar.


Gruss Häcki :hi:

Jens Schumann 27. Sep 2003 18:36

Re: Audiodateien einbinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Christian,
hier kommt das Beispiel. Ich verwende D5 SP1.
Es werden fünf Bilder aus der Resource geladen mit 24,16,8,4,2 Bit.
Es wird eine EXE aus der Resource geladen und gestartet ( kannste ruhig starten. ist nur ein Form).
Es wird ein Sound abgespielt.

Ach ja: Unbedingt mit Pfadangaben entpacken.

kiar 27. Sep 2003 18:53

Re: Audiodateien einbinden
 
das bsp von jens läuft bei mir problemlos, werde es mal mit anderen ressourcen testen

raik

Christian Seehase 28. Sep 2003 02:10

Re: Audiodateien einbinden
 
Moin Häcki,

eigentlich steht hier im Thread schon alles was Du brauchst. Ich fasse das mal zusammen:

Du erstellst eine Textdatei mit der Endung RC.
In dieser schreibst Du eine (ggf. auch mehrere) Zeile, die folgenden Aufbau hat:
NameDerResource TypDerResource PfadZuDerDateiDieDieResourceEnthält

NameDerResource meint die Bezeichnung, unter der Du die Resource später im Programm ansprechen kannst.
TypDerResource bezeichnet einen vordefinierten Resourcentyp, z.B. WAVE oder BITMAP, oder einen selbsterdachten, was hier aber keine Rolle spielen wird.
PfadZuDerDateiDieDieResourceEnthält gibt den Namen der Resourcendatei an, und den Pfad, der auch relativ zur Lage der RC Datei angegeben werden kann (bei Leerzeichen im Pfad in "" einschliessen)

Beispiel:
bild BITMAP Graphics\Photo.bmp

es soll eine Resource vom Typ BITMAP eingebunden werden, die im Programm mit der Bezeichnung bild angesprochen werden kann. Hierzu soll die Datei Photo.bmp hinzugefügt werden, die sich im Verzeichnis Graphics befindet, das sich im gleichen Verzeichnis befindet, wie die RC Datei.

Du könntest jetzt also eine Datei erstellen, als Beispiel nenne ich sie SOUNDFILE.RC. Da hinein kommt eine Zeile:
MySound WAVE MySound.wav

Nur zur Sicherheit, falls Jens' Variante nicht funktioniert, kannst Du jetzt eine Resourcendatei erstellen:
Konsole öffnen, BRCC32 eingeben, und die SOUNDFILE.RC per Drag&Drop in das Konsolenfenster ziehen. Enter.
Jetzt sollte der Resourcencompiler eine SOUNDFILE.RES im gleichen Verzeichnis angelegt haben, in der sich auch die SOUNDFILE.RC befindet.

Und jetzt folgt nur noch ein Ausschnitt aus der Unit in der die Datei abgespielt werden soll (wichtig: unter uses die unit mmsystem mit einbinden):

Delphi-Quellcode:
implementation
uses mmsystem;

{$R *.DFM}

{$R SOUNDFILE.RES}

// Abspielen der Wavedateiresource
procedure TForm1.Button1Click(Sender: TObject);
begin
  // 'MySound' = Name der Resource (erster Wert in der RC Datei)
  // 0         = Handle zur Datei aus der die Resource geladen werden
  //             soll. Wird hier nicht gebraucht, da diese EXE auch
  //             die Resource enthält. Man kann auch hInstance angeben
  // SND_RESOURCE = Der erste Parameter gibt den Namen einer Resource an
  // SND_ASYNC   = Die Funktion startet das Abspielen, und kehrt dann
  //                sofort zurück.
  //                Ansonsten würde das Ende des Abspielens abgewartet,
  //                und das Programm würde an dieser Stelle stehenbleiben
  PlaySound('MySound',0,SND_RESOURCE or SND_ASYNC);
end;

// Abspielen stoppen
procedure TForm1.Button2Click(Sender: TObject);
begin
  // nil = Das Abspielen der aktuellen Wavedatei wird beendet
  PlaySound(nil,0,0);
end;
Fertig.
Jetzt kann man mit Button1 die Wavedatei aus der Resource abspielen, und das Abspielen mit Button2 stoppen.

hacker 28. Sep 2003 15:53

Re: Audiodateien einbinden
 
Vielen dank!!!!!!!!!!

Das ist sehr ausführlich und verständlich geschrieben.Ich habe es ausprobiert und mein programm läuft jetzt.


:dancer2: :dancer2: :dancer2: :bounce1: :bounce1: :bounce1: :hello: :hello: :hello:


Gruss häcki :hi:

fatze 29. Okt 2004 00:20

Re: Audiodateien einbinden
 
hmmm kann mir vllt einer sagen wo mein fehler liegt???

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, mmsystem, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R song2.RES}

procedure TForm1.Button1Click(Sender: TObject);
begin
  PlaySound('song2' ,0,SND_RESOURCE or SND_ASYNC);
end;

end.
ich weiss nicht warum aber wenn ich auf den button klicke dann passiert nichts....

die dateien song2.wav song2.rc und song2.res befinden sich alle im Ordner ....\DELPHI\BIN

dizzy 29. Okt 2004 00:27

Re: Audiodateien einbinden
 
Zitat:

Zitat von fatze
Delphi-Quellcode:
  PlaySound('song2' ,0,SND_RESOURCE or SND_ASYNC);

In den ersten Parameter gehört nicht der Dateiname der .res, sondern der von dir in der .rc-Datei vergebene Name für die Ressource.


N8i,
Fabian

glkgereon 29. Okt 2004 08:24

Re: Audiodateien einbinden
 
wenn es nur um sounddateien geht, warum nutzt ihr nicht den mediaplayer? :gruebel:

Benjin 10. Jan 2005 20:44

Re: Audiodateien einbinden
 
Hallo,

ich erhalte folgende Fehlermeldung beim Kompilieren:

[Fehler] WARNING. Duplicate resource(s):
[Fehler] Type WAVE, ID WAVERESOURCE:

nachdem ich eine Sounddatei als Ressource eingebunden habe.
.wav, .rc und .res sind alle im Projektordner, wo auch die brcc32.exe ist.

Der Progcode des implementation Teils:
Delphi-Quellcode:
implementation
uses mmsystem;

{$R *.DFM}
{$R bicasso.res}

procedure TForm1.Button1Click(Sender: TObject);
begin
 // Sounds stoppen
  PlaySound(nil,0,0);
  // Wavedatei aus Resource abspielen (SND_RESOURCE) und
  // nicht warten, bis das Abspielen beendet ist (SND_ASYNC)
  PlaySound('Waveresource',hInstance,SND_RESOURCE or SND_ASYNC);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Sounds stoppen
  PlaySound(nil,0,0);
end;

end.


Wo liegt mein Fehler?

Kann mit der Fehlermeldung rehct wenig anfangen...

Jan

C64-Flo 10. Jan 2005 23:01

Re: Audiodateien einbinden
 
Also ich verwende die mediaplayer in Delphi für soundwiedergabe.... sind easy zu benutzen:

Delphi-Quellcode:
MediaPlayer20: TMediaPlayer;
Eigenschaften vom player selbst auf visible=false setzen, dann sieht man ihn nicht, und bedienen kannst Du ihn auch über buttons oä marke eigenbau

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
MediaPlayer1.filename:=(ExtractFilePath(ParamStr(0)) + 'data\musik\chargeneration1.mp3');
MediaPlayer1.open;
MediaPlayer1.play;
end;

usw

:wink:
just my 2 cents...


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