Hi,

I am trying to a play a .wav file in a C++ program.

I think my code is OK, but when it plays, it plays the default windows 'error' sound, not my .wav file.

This is the program:

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
using namespace std;

int main()
{
	for( int a = 0;a<10;a++)
	{
		PlaySound((LPCWSTR)"tone.wav", 0, SND_LOOP|SND_ASYNC);
		Sleep(1000);
	}
	return 0;
}

How can i add the .wav file so it is found?

In the Visual Studio 2005 soulution explorer I right click on Resource Files>Add>Resource, but can't find an option for .wav.

Thanks for any help!

You forgot the SND_FILENAME argument, change that line to:

PlaySound((LPCWSTR)"tone.wav", 0, SND_LOOP|SND_ASYNC|[B]SND_FILENAME[/B]);

and it should work.

Comments
Thanks for the help :)

Thanks William!

I changed the line, but it still makes the same 'error/not found' sound.

I honestly think it doesn't now where to find the .wav file?

Its a 26 KB .wav file.

I need to add the .wav file to the project some how. It's on my Desktop right now.

Edited 6 Years Ago by Carrots: n/a

Well, to use that line of code, the .wav file has to be in the same directory as the executable/project folder if you're running directly from Visual Studio. If you want to attach it to your resouce file, that's easy too.

Yes, i just want to add it as a resource, so it plays.

I can see an option for .bmp files, but nothing for .wav.

Edited 6 Years Ago by Carrots: n/a

See example code and attachments.

#include <windows.h>
#include "resource.h"
#pragma comment(lib,"Winmm.lib")

int WINAPI WinMain(
      HINSTANCE hInstance,
      HINSTANCE hPrevInstance,
      LPSTR lpCmdLine,
      int nShowCmd)
{
  PlaySound( (char*)IDR_WAVE1, NULL, SND_RESOURCE | SND_ASYNC ); 
  MessageBox( NULL, "", "", MB_OK );
  return 0;
}
Attachments h1.jpg 41.04 KB h2.jpg 32.28 KB

Thanks buddy :)

I got it to work, copy and pasted the .wav file into the Project's directory.

Used this code:

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
using namespace std;

int main()
{
	for( int a = 0;a<1;a++)
	{
		PlaySound(L"tone.wav", NULL, SND_FILENAME | SND_SYNC);
		Sleep(3000);
	}
	return 0;
}

and now it plays.

Shame though that I can't see the file in the Solution Explorer.

I tried your recommendation and it created a .rc file, but was trying to convert char* into ____,

The file doesn't need to appear in the solution explorer. Do you know how to work with resource files? You can put any kind of file into a resource file, you just need the right commands to read them.

So, first you need to create a resource file for your project by right clicking on your project name and adding a resource file.

Then double click on your resource file in the solution explorer to open it, then right click on resource.rc and click "Add resource", then press 'Import'.

If you do all those steps right, it will work.

Hope this helps.

Edited 6 Years Ago by William Hemsworth: n/a

That's sweet.

Thanks ever so much for the help. I understand it now. yes it was the first time I'd ever tried to add a resource.

Real appreciated!

Thanks again :)

Comments
You're welcome (:

Might be worth noting the Micorosft example uses MAKEINTRESOURCE instead of casting to a char pointer.

PlaySound(
MAKEINTRESOURCE(IDR_WAVE1),
GetModuleHandle(NULL),
SND_RESOURCE);

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