digi_mind
asked on
How to play a sound in the shell ?
I have a very simple program running in the shell made in C++.
I want this program to be able to play a sound when I prees "s". how and what class should I include ?
cin >> option;
if(option=="s")
//play the .wav or what ever format I can play in the shell....
Thank you.
I want this program to be able to play a sound when I prees "s". how and what class should I include ?
cin >> option;
if(option=="s")
//play the .wav or what ever format I can play in the shell....
Thank you.
ASKER
Do I need to include some class to use "system" ? because so far I have a file called email.wav, but it is not working... have a look:
#include <iostream>
using namespace std;
main()
{
system("start /usr/share/sounds/email.wa v");
}
#include <iostream>
using namespace std;
main()
{
system("start /usr/share/sounds/email.wa
}
For simple sounds...as in speaker beeps...
int main( int argc, char **argv )
{
int i;
for (i=1; i < 5; i++)
putchar(7);
return 0;
}
for real audio as in .wav files or .mp3 files you need a library already built...
check out this one...writting in C++
http://osalp.sourceforge.net/
or use a cheater method...
fork() off a new process and call an already made audio program, and then when the child exists contil in your program....
#include <signal.h>
#include <iostream>
#define __USE_XOPEN 1
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
int main( void )
{
pid_t pid;
int status, died;
switch(pid=fork())
{
case -1: cout << "can't fork\n";
exit(-1);
case 0 : cout << " I'm the child of PID " << getppid() << ".\n";
cout << " My PID is " << getpid() << endl;
sleep(2);
exit(3);
default: cout << "I'm the parent.\n";
cout << "My PID is " << getpid() << endl;
// kill the child in 50% of runs
if (pid & 1)
kill(pid,SIGKILL);
died= wait(&status);
if(WIFEXITED(status))
cout << "The child, pid=" << pid << ", has returned " << WEXITSTATUS(status) << endl;
else
cout << "The child process was sent a " << WTERMSIG(status) << " signal\n";
}
return 0;
}
int main( int argc, char **argv )
{
int i;
for (i=1; i < 5; i++)
putchar(7);
return 0;
}
for real audio as in .wav files or .mp3 files you need a library already built...
check out this one...writting in C++
http://osalp.sourceforge.net/
or use a cheater method...
fork() off a new process and call an already made audio program, and then when the child exists contil in your program....
#include <signal.h>
#include <iostream>
#define __USE_XOPEN 1
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
int main( void )
{
pid_t pid;
int status, died;
switch(pid=fork())
{
case -1: cout << "can't fork\n";
exit(-1);
case 0 : cout << " I'm the child of PID " << getppid() << ".\n";
cout << " My PID is " << getpid() << endl;
sleep(2);
exit(3);
default: cout << "I'm the parent.\n";
cout << "My PID is " << getpid() << endl;
// kill the child in 50% of runs
if (pid & 1)
kill(pid,SIGKILL);
died= wait(&status);
if(WIFEXITED(status))
cout << "The child, pid=" << pid << ", has returned " << WEXITSTATUS(status) << endl;
else
cout << "The child process was sent a " << WTERMSIG(status) << " signal\n";
}
return 0;
}
use the man pages there are your friend
man system
NAME
system - execute a shell command
SYNOPSIS
#include <stdlib.h>
int system (const char * string);
it bascially does what I showed you above.....
man system
NAME
system - execute a shell command
SYNOPSIS
#include <stdlib.h>
int system (const char * string);
it bascially does what I showed you above.....
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
digi_mind,
Errm... Wrong implication - you don't need Windows to play .wav
use "apropos sound" to get the appropriate tool. I only have Solaris here :-/
Stefan
Errm... Wrong implication - you don't need Windows to play .wav
use "apropos sound" to get the appropriate tool. I only have Solaris here :-/
Stefan
If you have ALSA (and who doesn't these days :-) you can use the aplay command:
aplay /path/to/your/file.wav
aplay /path/to/your/file.wav
... and you would put this command into the system() function, or use the fork() example from above.
or if mp3s then everyone should have mpg123
ASKER
let me tell you all something... I never said windows. I said linux... no problem the code is so simple:
System("play music.wav");
Can I get my points refunded ?
System("play music.wav");
Can I get my points refunded ?
every one of these examples is for linux....by windows they were meaning a window manager? like gnome? etc....
the system() call was a suggestion from stefan73 by which you didn't know about it, hence your next question...and then you got the it correct but I would venture to guess that means that stefan73 deserves the points....every linux distro has different default progs installed so hence all the various system() suggestions
just my .6 cents
the system() call was a suggestion from stefan73 by which you didn't know about it, hence your next question...and then you got the it correct but I would venture to guess that means that stefan73 deserves the points....every linux distro has different default progs installed so hence all the various system() suggestions
just my .6 cents
ASKER
Yes, Stefan73 will get the points. Agree with your help. Thank you
The simplest way is
system("start your_wav.wav");
...this will be like a doubleclick on the wav in Explorer.
Cheers,
Stefan