Hi,

I need help playing a sound in Visual C++ 2008. (Windows Forms App). I've tried many things searching on google, I used this method:

PlaySound("beep.wav", 0, SND_LOOP|SND_ASYNC);

Then I get the error, "'PlaySoundW' : cannot convert parameter 1 from 'const char [9]' to 'LPCWSTR''. Can anyone help me play the sound 'beep.wav' that I have in my resources folder? I need it to loop forever, (or 9999999999999999999999 times if u know wut i mean :)).

Thanks in advance to anyone who can help.

It has to do with the way your compiler is interpreting strings (I think it happens when you set the character encoding to unicode instead of multibyte, or something like that).

I think that this:

PlaySound((LPCWSTR)"beep.wav", 0, SND_LOOP|SND_ASYNC);

will work.

You could use the Beep command...

Beep(523,500); // 523 hertz (C5) for 500 milliseconds
Beep(587,500);
Beep(659,500);
Beep(698,500);
Beep(784,500);

but you probably didn't want to hear that from a novice like me...

Since you are compiling with the UNICODE flag, you must either indicate that string literals are wide-char directly: L"Hello world!" or (better yet) use the TEXT() macro: PlaySound(TEXT("beep.wav"), 0, SND_LOOP|SND_ASYNC); Have fun.

I forgot to describe at the beginning that this is supposed to loop forever after a timer finishes. Anyway, I get the same 3 errors, using any of your snippets:

1. error LNK2028: unresolved token (0A000011) "extern "C" int __stdcall PlaySoundW(wchar_t const *,struct HINSTANCE__ *,unsigned long)" (?PlaySoundW@@$$J212YGHPB_WPAUHINSTANCE__@@K@Z) referenced in function "private: void __clrcall Timer1::Form1::timer1_Tick(class System::Object ^,class System::EventArgs ^)" (?timer1_Tick@Form1@Timer1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) Timer.obj

2. error LNK2019: unresolved external symbol "extern "C" int __stdcall PlaySoundW(wchar_t const *,struct HINSTANCE__ *,unsigned long)" (?PlaySoundW@@$$J212YGHPB_WPAUHINSTANCE__@@K@Z) referenced in function "private: void __clrcall Timer1::Form1::timer1_Tick(class System::Object ^,class System::EventArgs ^)" (?timer1_Tick@Form1@Timer1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) Timer.obj

3. fatal error LNK1120: 2 unresolved externals


Basically, this is one of those times when the compiler seems to output a whole bunch of bogus crap :(. Any Ideas?

It isn't bogus crap. Learn to understand it and you'll begin to be able to solve problems on your own, though its understandable that at first you'll have no idea what it means.

The compilers complaining that the function PlaySound is declared somewhere, but it has no implementation. I'm actually not sure why it said it twice. The implementation would either be in the form of a .cpp file, or, in this case, a .lib file.

To fix this you need to link to the .lib winmm.lib. A simple way to do this is to add

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

in one of your source files.

Comments
Helped well with 2 fatal compiler errors

Wow man, thanks a ton. (I know, my questions always sound retarded :()
So simple to add a pragma comment...

Oh well, I'm a complete noob at VC++

But thanks a lot for the help, you were great

You could use the Beep command...

Beep(523,500); // 523 hertz (C5) for 500 milliseconds
Beep(587,500);
Beep(659,500);
Beep(698,500);
Beep(784,500);

but you probably didn't want to hear that from a novice like me...

this worked
thanks

Go to Project -> Properties -> C/C++ -> General and where it says something about Unicode, change it to Not Set. That solves all errors to do with Lpcwstr!

i need a function that play a definite frequency sound for a period of time. and the time piried is dinamicaly given.i use console beep but it need the time to call the function.. but in turbo c the sound() is helpful..please help me how i convert this sound function in turbc into visual c++

This question has already been answered. Start a new discussion instead.