Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: DOS und Win32-Konsole ::  PlaySound(); Problem     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 20:56:23 22.02.2010   Titel:   PlaySound(); Problem            Zitieren

(Ich benutze den Dev-C++ 4.9.4.1 Compeiler.)

Wie kann ich eine .wav Datei abspielen?
Ich habe winmm.a in Projektoptionen in Dateien/Verzeichnisse als Bibliotheksverzeichnis eingebunden.
Ich habe 2 Beispiele und beide funktionieren nicht.

Beispiel 1:

#include <windows.h>
#include <mmsystem.h>

int main()
{
a:
PlaySound("test.wav",NULL,SND_LOOP | SND_SYNC);
goto a;
}

Hier bringt er mir "parse error before character 0246"

Beispiel 2:

#include <windows.h>
#include <mmsystem.h>

int main()
{
a:
PlaySound("test.wav",NULL,SND_LOOP);
goto a;
}

und hier bringt er mir "[Linker error] undefined reference to ´PlaySoundA@12´
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 21:12:30 22.02.2010   Titel:              Zitieren

Da fehlt wohl eine lib lib lib lib lib :D
probier mal

#pragma comment(lib, "winmm.lib")

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 21:25:43 22.02.2010   Titel:              Zitieren

Danke
aber wenn ich das reinschreibe dann bekomme ich immer noch die genau gleichen Fehlermeldungen!
geeky
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 6039
Beitrag geeky Mitglied 00:47:16 23.02.2010   Titel:              Zitieren

Liegt daran das DevC++ mit "#pragma comment(lib..)" nichts anfangen kann (Ist glaube ich was Micorosoft-spezifisches...)

Du musst die winmm.lib irgendwo anders direkt bei DevC++ eintragen.
DevC++ benutzt glaube ich MingW als Compiler, da wird die Lib vermutlich "winmm.a" heissen müssen...

(Ist DevC++ nicht seit Jahren ein totes Projekt? Ich dachte die Leute wären inzwischen alle auf Code::Blocks, Visual Studio Express Edition oder eclipse oder sonstwas umgestiegen...)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 10:34:56 23.02.2010   Titel:              Zitieren

Ja aber gibt es da nicht vieleicht eine alternatife um Sound Dateien abzuspielen?
Wenn nicht dann schreibt mir bitte mal einen Link von dem bessten C++ Compeiler den es momentan gibt. :D
Hobby Programmierer
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.03.2009
Beiträge: 75
Beitrag Hobby Programmierer Mitglied 12:44:28 23.02.2010   Titel:              Zitieren

Man kann doch in DevC++ bestimmt auch Libs angeben. Wenn nich, einige gut wären Codeblocks und Visual Studio.
Kóyaánasqatsi
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.10.2008
Beiträge: 3047
Beitrag Kóyaánasqatsi Mitglied 14:01:44 23.02.2010   Titel:              Zitieren

Projekt Optionen->Linker Optionen die Bezeichnung "-lwinmm" ohne Anführungszeichen angeben.

_________________
xDelete('//tr[td/strong[text()="volkard"]]');, Hobby.
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 18:10:30 23.02.2010   Titel:              Zitieren

Ich habe es geschafft ich habe einfach meinen Compeiler upgedatet
vorher 4.9.4.1
jetzt 4.9.8.0

und libwinmm.a in den Projekt Optionen eingebunden.
:D:):D
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 23:41:43 23.02.2010   Titel:              Zitieren

JoelW schrieb:

Ja aber gibt es da nicht vieleicht eine alternatife um Sound Dateien abzuspielen?

http://www.fmod.org/

Ist eine ziemlich gute Alternative zu den Windowsfunktionen mit vielen Optionen.
Ich verwende des sehr gern.

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 18:29:49 25.02.2010   Titel:              Zitieren

Ich habe nochmal eine ähnliche Frage.
Wie kann ich die Datei im Hintergrund in der Endlosschlaufe laufen lassen?
(Ohne das ich darauf warten muss das die Musik fertig abgespielt ist.)
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 00:32:00 27.02.2010   Titel:              Zitieren

Versuche es mal mit SND_ASYNC:

PlaySound("test.wav", NULL,SND_LOOP | SND_ASYNC);

SND_ASYNC
The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.

SND_SYNC
Synchronous playback of a sound event. PlaySound returns after the sound event completes.

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 12:12:35 27.02.2010   Titel:              Zitieren

Danke aber wenn ich es so schreibe dann kommt immer die Fehlermeldung:

stray '/246' in program

Wenn ich das | durch das Zeichen ersetze das so wie ein I ausseht,
dann compliert er es zwar aber die .wav Datei wird nur abgespielt bis ich eine andere .wav Datei abspiele.
Ich möchte aber eigentlich das die .wav Datei solange abgespielt wird bis ich es mit einem Befehl abbreche.

Wie geht das und wie breche ich es sonst ab?
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 12:52:33 27.02.2010   Titel:              Zitieren

JoelW schrieb:

Danke aber wenn ich es so schreibe dann kommt immer die Fehlermeldung:

stray '/246' in program

Wenn ich das | durch das Zeichen ersetze das so wie ein I ausseht,

Das Zeichen, was wie ein I aussieht, nennt sich PIPE und dient als Bitoperator mit der Funktion OR. Siehe hierzu in einem Tutorial für Bitoperatoren nach ;)

JoelW schrieb:

dann compliert er es zwar aber die .wav Datei wird nur abgespielt bis ich eine andere .wav Datei abspiele.

Richtig. Wenn du bei Start einer anderen Datei die erste nicht Beenden willst, so musst du "SND_LOOP | SND_ASYNC | SND_NOSTOP" schreiben. Bedenke, dass die 2. Datei aber NICHT nebenbei läuft.

JoelW schrieb:

Ich möchte aber eigentlich das die .wav Datei solange abgespielt wird bis ich es mit einem Befehl abbreche.

Ich vermute, dass hast du schon. Hier muss als 1. Parameter der Funktion PlaySound NULL angegeben werden. Danach kannst du die 2. Sounddatei abspielen.

Zusaetzlich empfehle ich noch die Doku, die eigentlich alles weitere enthalten sollte
http://msdn.microsoft.com/en-us/library/aa909766.aspx

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 15:45:01 27.02.2010   Titel:              Zitieren

PROBLEMME :warning:
1.Zum zweiten mal wenn ich ein | mache kommt die Fehlermeldung stray '/246' in program!
2.Ich will aber das zwei .wav dateien gleichzeitig laufen! da gibt es doch sicher einen Befehl dafür.
Bitte helft mir :(
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 16:14:02 27.02.2010   Titel:              Zitieren

JoelW schrieb:

1.Zum zweiten mal wenn ich ein | mache kommt die Fehlermeldung stray '/246' in program!

Schmeiss den DevC++ in den Muell. Verwende, wie schon erwaehnt, Codeblocks oder Visual Studio. Die sind ebenfalls kostenlos und machen weniger Probleme. ;)

JoelW schrieb:

2.Ich will aber das zwei .wav dateien gleichzeitig laufen! da gibt es doch sicher einen Befehl dafür.
Bitte helft mir

Ich bin mir sicher, dass das in den vorherigen Post's nicht drin stand. So wirst
du mit deinem Programm nie fertig, wenn du immer nur haeppchenweisse mit deinen Informationen rausrueckst :D.
PlaySound ist dafuer glaube ich nicht geschaffen, da dies nur ueber einen Kanal laeuft.
Schau mal hier:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-256383.html
http://msdn.microsoft.com/en-us/library/dd757161%28VS.85%29.aspx

Wenn du umfangreichere Dinge mit Sounds machen willst, so hab ich bereits auf fmod hingewiessen.

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 17:52:36 27.02.2010   Titel:              Zitieren

Nein wenn es auch nur Irgendwie umgehbar ist dann bleibe ich bei meinem Compeiler!:D

Dieses Beispiel funktioniert zwar aber könnte ich das auch in der Endlosschleife abspielen?
Wenn ja wie?

#include <conio.c>

int main()
{
char data[100];
sprintf(data,"open %s",test.mp3");
mciSendString(data,NULL,0,NULL);
sprintf(data,"play %s from 0","test.mp3");
mciSendString(data,NULL,0,NULL);
printf("play test.mp3\n");
PlaySound("test.wav",NULL,SND_SYNC);
printf("play test.wav\n");
for( ; ; ){}
}
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 22:50:09 27.02.2010   Titel:              Zitieren

Laut Doku von hier
http://msdn.microsoft.com/en-us/library/dd743667%28VS.85%29.aspx

ist es für den Typ "waveaudio" nich moeglich, repeat anzugeben.
Es sei denn, ich werde eines besseren belehrt.

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 23:18:35 27.02.2010   Titel:              Zitieren

Entschuldigung aber ich verstehe kein Wort.:(
(Ich verwende doch gar kein waveaudio.)
Also frage ich nochmal wie kann ich die Hintergrundmusik in der Endlosschleife abspielen?


Zuletzt bearbeitet von JoelW am 00:18:37 28.02.2010, insgesamt 2-mal bearbeitet
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 00:39:22 28.02.2010   Titel:              Zitieren

Warum liest du nicht den Artikel, den ich dir geschickt habe,
WARUM NUR WARUM? :D

Code:
// 2. Zeile
digitalvideo    from positionfullscreen repeat    reverse to positionwindow
Code:
// 2. Zeile
digitalvideo from positionfullscreen repeat reverse to positionwindow
Code:
// 2. Zeile
digitalvideo    from positionfullscreen repeat    reverse to positionwindow


repeat ist hier nur fuer digitalvideo moeglich. Ich vermute, du spielst kein Video ab?

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 14:22:55 28.02.2010   Titel:              Zitieren

Ich habe es doch gelesen aber ich verstehe nicht was das mit meinem Problem zu tun hat.
Ich verwende doch gar kein waveaudio!
Und man kann die Hintergrundmusik doch sicher irgendwie in der Endlosschleife abspielen.
Wenn man dafür einen anderen Befehl braucht dann sag mir bitte welchen,
und wenn es möglich ist möchte ich das mit den Dateien machen die bei meinem Compeiler dabei sind.
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 15:21:43 28.02.2010   Titel:              Zitieren

*HMMMPFFFFFFFF*

Vielleicht hilft dir das weiter. Da kannst du die Laenge des Tracks auslesen.
Da solltest du dann eventuell Threads verwenden.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char sReturn[128];
int ms;

memset(sReturn,0,sizeof(sReturn));

mciSendString("open start.wav type MPEGVideo alias mp3audio", NULL,0,NULL);
mciSendString("status mp3audio length", sReturn, sizeof(sReturn), NULL);

ms = atoi(sReturn);

while(true)
{
    mciSendString("play start.wav from 0 repeat",NULL,0,NULL);
    Sleep(ms);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char sReturn[128];
int ms;

memset(sReturn,0,sizeof(sReturn));

mciSendString("open start.wav type MPEGVideo alias mp3audio", NULL,0,NULL);
mciSendString("status mp3audio length", sReturn, sizeof(sReturn), NULL);

ms = atoi(sReturn);

while(true)
{
mciSendString("play start.wav from 0 repeat",NULL,0,NULL);
Sleep(ms);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char sReturn[128];
int ms;

memset(sReturn,0,sizeof(sReturn));

mciSendString("open start.wav type MPEGVideo alias mp3audio", NULL,0,NULL);
mciSendString("status mp3audio length", sReturn, sizeof(sReturn), NULL);

ms = atoi(sReturn);

while(true)
{
    mciSendString("play start.wav from 0 repeat",NULL,0,NULL);
    Sleep(ms);
}

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
problemerkenn0r
Unregistrierter




Beitrag problemerkenn0r Unregistrierter 15:31:07 28.02.2010   Titel:              Zitieren

Hallo,
JoelW schrieb:
PROBLEMME :warning:
1.Zum zweiten mal wenn ich ein | mache kommt die Fehlermeldung stray '/246' in program!
2.Ich will aber das zwei .wav dateien gleichzeitig laufen! da gibt es doch sicher einen Befehl dafür.
Bitte helft mir :(


1. Der Editor deiner IDE kann ein Zeichen nicht verarbeiten. Entferne dieses Zeichen aus den Quellcode. Das kommt meist daher, dass man von irgendwo Code kopiert und in den Editor einfügt.
2. Starte die Dateien direkt nacheinander. Für den Menschen sind die paar Nanosekunden nicht wahrnehmbar, du spielst sie quasi gleichzeitig ab.
JoelW
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.07.2009
Beiträge: 29
Beitrag JoelW Mitglied 19:18:33 17.03.2010   Titel:              Zitieren

BasicMan01:

Wie macht man Threads?
Könntest du mir das bitte in einem Beispielprogramm zeigen?
(Entschuldigung das ich schon wieder so eine Frage stellen musste,
aber ich fand mit Google einfach nichts das ich mit Dev-C++ 4.9.8.0 compilieren konnte!):(

Falls du schon wieder sagst ich solle meinen Compeiler wechseln sag ich nein! :p



problemerkenn0r schrieb:
1. Der Editor deiner IDE kann ein Zeichen nicht verarbeiten. Entferne dieses Zeichen aus den Quellcode. Das kommt meist daher, dass man von irgendwo Code kopiert und in den Editor einfügt.


Ich habe aber keinen Code kopiert!
Ich muss einfach Alt Gr und 1 drücken: ¦ !
BasicMan01
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.02.2004
Beiträge: 646
Beitrag BasicMan01 Mitglied 19:53:18 17.03.2010   Titel:              Zitieren

Ach ... dich gibs auch noch :D

1. ich hoffe, du hast nicht mehr Windows 95 *scherz*
2. Es würde sich anbieten, für extra Fragen jeweils ein Thema aufzumachen ;)
3. du weisst hoffentlich schon mal, was Threads überhaupt sind
4. du informierst dich über CreateThread unter http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx
5. du bindest die windows.h ein.
6. du informierst dich kurz über das Thema Funktionspointer, denn die wirst hier brauchen.

_________________
Der Vorteil in der Klugheit besteht darin, dass man sich dumm stellen kann.
(Code::Blocks 10.5, mingw32 gcc 4.4.1)
C/C++ Forum :: DOS und Win32-Konsole ::  PlaySound(); Problem   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.