Entwickler-Ecke
Multimedia / Grafik - Kurze Audiodateien in das Programm einbinden
Baltus - Do 17.05.07 12:50
Titel: Kurze Audiodateien in das Programm einbinden
Hallo,
ich hab schon überall geschaut, doch alles hat irgendwie nicht so recht geklappt. Also ich möchte kurze Audiodateien in meine Anwendung einbinden, soll heißen, dass die Anwendung größer wird und ich die Sounds auch dann abspielen kann, wenn die Anwendung nicht im selben Ordner, wie die Audiodateien liegt. Oder dass ich nur eine Resourcendatei immer mit der Anwedung sein muss, doch aus resourcen konnte ich bis jetzt noch keinen einzigen Sound abspielen, nur aus WAVE. Kenn ihr vielleicht ein Programm, mit dem man .res Dateien erzeugen kann, mit WAVE-Dateien drin?!
Außerdem möchte ich gerne mehrere Sounds gleichzeitig abspielen, da es sich um ein kleines Spiel handelt. Also eine Hintergrundmusik und dann noch Geräusche von Gegnern, Angriffen, Umgebung etc.
Danke schon mal im voraus. :)
MfG
Chryzler - Do 17.05.07 13:04
- Erstelle eine Ressourcen-Script-Datei (*.rc) mit Notepad. Dort gibst du folgendes ein:
1 WAVE "MeineWav.wav"
1 => der Index der Ressource
WAVE => kennzeichnet, dass es sich um eine WAV-Datei handelt
- Wenn du mehrere Audiodateien einfügen willst schreibst du:
1 WAVE "MeineWav1.wav"
2 WAVE "MeineWav2.wav"
...
- Öffne die MS-DOS Eingabeaufforderung und wechsel dort in das Bin-Verzeichnis von Delphi. Dort sollte eine Datei namens BRCC32.exe vorhanden sein. Gib also folgendes ein (MyResFile.rc ist die Resourcen-Script-Datei):
BRCC32 MyResFile.rc
- Nun wird die Datei MyResFile.res erstellt.
- Suche in deiner Unit in Delphi die Compiler-Direktive {$R *.DFM} und füge {$R MyResFile.res} hinzu:
Delphi-Quelltext
1: 2:
| {$R *.DFM} {$R MyResFile.res} |
- Füge zur Uses-Liste in deiner Unit die MMSystem-Unit hinzu:
Delphi-Quelltext
1: 2:
| uses Windows, Classes, ..., MMSystem; |
- Folgender Befehl spielt die Wave-Datei mit dem Index 1 ab:
Delphi-Quelltext
1:
| PlaySound(PChar(1), HInstance, snd_ASync or snd_Memory or snd_Resource); |
Baltus - Do 17.05.07 13:25
Ja SUPER danke!!!! :)
Aber wie kann ich mehrere Sounds gleichzeitig abspielen?? Bis jetzt wird der erste immer gestoppt und dann der zweite Abgespielt...Ich möchte ja, dass zusätzlich zum ersten noch der zweite oder auch noch ein dritter abgespielt wird...
Kann ich auf die weiße auch Bitmaps und Icons in die Resourcedatei laden?
MfG
Chryzler - Do 17.05.07 13:32
Baltus hat folgendes geschrieben: |
Kann ich auf die weiße auch Bitmaps und Icons in die Resourcedatei laden? |
Klar kannst du auch Bilder einfügen, die kannst du dann wieder mit
Delphi-Quelltext
1:
| Image1.Picture.Bitmap.LoadFromResourceID(HInstance, 3); |
in ein Image laden. Hier das Bild mit dem Index 3.
Baltus hat folgendes geschrieben: |
Ja SUPER danke!!!! :)
Aber wie kann ich mehrere Sounds gleichzeitig abspielen?? Bis jetzt wird der erste immer gestoppt und dann der zweite Abgespielt...Ich möchte ja, dass zusätzlich zum ersten noch der zweite oder auch noch ein dritter abgespielt wird... |
Leider ist meine Delphi Hilfe seit ein paar Tagen Schrott, deswegen kann ich dir nicht genau sagen, was du ändern musst. Versuch mal
Delphi-Quelltext
1:
| PlaySound(PChar(1), HInstance, snd_Memory or snd_Resource); |
Baltus - Do 17.05.07 13:51
Delphi-Quelltext
1:
| PlaySound(PChar(1), HInstance, snd_Memory or snd_Resource); |
Es wird zwar noch Musik abgespielt, jedoch ist das Programm solange der Sound abgespielt wird nicht ansprechbar...
neocox - Fr 24.04.09 18:24
erstma danke... funzt auch bei mir ;) wie kann ich den sound als loop abspielen lassen ? also endlos ?
Narses - Fr 24.04.09 18:41
Moin!
neocox hat folgendes geschrieben : |
erstma danke... funzt auch bei mir ;) wie kann ich den sound als loop abspielen lassen ? also endlos ? |
Schau dir doch mal die entsprechenden Konstanten in der mmSystem.pas an oder drück Strg+Space beim letzten Parameter. Dann überlegen wir noch mal kurz, was auf Englisch wiederholen, endlos, Schleife, etc.pp. heißen könnte... "loop", richtig. :zwinker:
cu
Narses
neocox - Fr 24.04.09 18:52
naja ich wusste schon, dass es loop is. aber es funzt net - ich gebs irgendwie verkehrt ein
Delphi-Quelltext
1: 2:
| PlaySound(PChar(1), hInstance, SND_ASYNC or SND_MEMORY or SND_RESOURCE); SND_Loop = 2; |
aber is ja falsch. ich find die richtige lösung net
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Fr 24.04.09 18:57
Moin!
Delphi-Quelltext
1:
| PlaySound(PChar(1), hInstance, SND_ASYNC or SND_MEMORY or SND_RESOURCE or SND_LOOP); |
Na, so wie die anderen Flags eben auch... :D
cu
Narses
neocox - Fr 24.04.09 19:14
so hatte ich das:
Delphi-Quelltext
1:
| PlaySound(PChar(1), hInstance, SND_ASYNC or SND_MEMORY or SND_RESOURCE or SND_LOOP=3) |
also für 3 wiederholungen ;)
Moderiert von
Narses: Color- durch Highlight-Tag ersetzt
ness - Di 21.07.09 05:07
BEI MIR FUNKTIONIERT DAS ALLES NICHT!
Ich kriege eine Zugriffsverletzung!!!!!
Habe Delphi 2007,habe auch RICHITIG eine RIS.rc erstellt ,und auf BIN und alle Audiodateien reingetan,dann mit MS DOS RICHTIG KOMPILIERT!
Dannach die ris.res in delphi projekt ordner reingetan,dann in unit mmsystem und alles drum und dran hinzugefuegt und TROTZDEM FUNZT ES NICHT!
Eine Exeption ist aufgetreten! :(
SO langsam geht mir Delphi auf den SACK!
Brauche unbedingt RAT,wie ich das Problem beheben kann!
HAB eine Button1 Funktion,MEHR AUCH NICHT!
DADRINNE steht folgendes:
PlaySound(PChar(1), HInstance, snd_ASync)
///Mehr auch nicht!
Teekeks - Di 21.07.09 07:53
Hast du denn auch das hier drin?
Delphi-Quelltext
1: 2:
| {$R *.DFM} {$R ris.res} |
Und: Schrei nicht so und ein Ausrufezeichen reicht völlig.
Achso: und das dürftest du auch brauchen:
SND_RESOURCE
jaenicke - Di 21.07.09 14:26
ness hat folgendes geschrieben : |
Delphi-Quelltext 1:
| PlaySound(PChar(1), HInstance, snd_ASync) | |
Da gehört der Name der Ressource hinein, den du in der Ressourcendatei vergeben hast.
Ansonsten siehe
Teekeks, was er geschrieben hat, gehört auch dazu.
ness - Mi 22.07.09 00:06
Problem habe ich entdeckt! Wenn ich die " NICHT schreibe,funzt es dann!
Ich habe ein neues Problem!
Die LOOP Funtkion funktioniert GARNICHT!
Button1:
SndPlaySound( 'intro.WAV', SND_LOOP );
Es wird nur einmal abgespielt! Die Sounddatei ist nur 5 Sekunden lang! Wieso funktioniert das nicht?
Edit: Ich moechte aber auch,dass das Programm dabei REAGIERT und nicht einfriert!!!!!
jaenicke - Mi 22.07.09 04:38
ness hat folgendes geschrieben : |
Edit: Ich moechte aber auch,dass das Programm dabei REAGIERT und nicht einfriert!!!!! |
Du hast das async ja wieder rausgenommen...
Vielleicht solltest du dir in der
Dokumentation [
http://msdn.microsoft.com/en-us/library/ms712879.aspx] einmal die Flags anschauen, falls dir gar nicht klar war was das async macht. Zudem hast du jetzt die veraltete sndPlaySound Funktion erwischt, die man nicht mehr nutzen sollte.
Mit der Ressource sollte es so gehen...
Delphi-Quelltext
1:
| PlaySound('ResourceName', HInstance, SND_ASYNC or SND_LOOP or SND_RESOURCE); |
Narses - Mi 22.07.09 11:09
Moin!
jaenicke hat folgendes geschrieben : |
Zudem hast du jetzt die veraltete sndPlaySound Funktion erwischt, die man nicht mehr nutzen sollte. |
Aha, was sollte man denn alternativ nutzen? :shock: AFAIK nutzt selbst der Explorer die, um die ganzen Ereignis-Sounds abzududeln... :nixweiss:
cu
Narses
turboPASCAL - Mi 22.07.09 11:30
Narses hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | Zudem hast du jetzt die veraltete sndPlaySound Funktion erwischt, die man nicht mehr nutzen sollte. | Aha, was sollte man denn alternativ nutzen? :shock: |
Na,
PlaySound. ;) Das Teil kann ein wenig mehr als sndPlaySound.
Narses hat folgendes geschrieben : |
AFAIK nutzt selbst der Explorer die, um die ganzen Ereignis-Sounds abzududeln... :nixweiss: |
Wie kommst du darauf ?
Quelltext
1: 2: 3: 4: 5:
| Offset(h) 00068498 72 6F 6C 44 65 74 61 69 6C 73 00 2E 00 00 6D 69 78 65 72 43 rolDetails....mixerC 000684AC 6C 6F 73 65 00 00 00 00 50 6C 61 79 53 6F 75 6E 64 57 00 00 lose....PlaySoundW.. ... 00 00 6D 69 78 65 72 4F 70 65 6E 00 00 00 77 61 76 65 4F 75 ..mixerOpen...waveOu ... 74 47 65 74 4E 75 6D 44 65 76 73 00 00 00 6D 69 78 65 72 4D tGetNumDevs...mixerM |
Narses - Mi 22.07.09 12:02
Moin!
turboPASCAL hat folgendes geschrieben : |
Na, PlaySound. ;) Das Teil kann ein wenig mehr als sndPlaySound.
[...]
Wie kommst du darauf ? |
:nut: Irgendwie ist mir das
snd wohl durchgerutscht... :gruebel:
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!