How to make the hardware beep sound with c++?
-
toot is a cross-platform C file that try to call several sound generators to produce the beep. http://github.com/vareille/toot – renataflow Nov 11 '17 at 06:13
12 Answers
- 26,101
- 30
- 154
- 305
-
This comes out of speakers. How can I make the internal motherboard make a beep instead of speaker? – Zeta.Investigator Jan 28 '16 at 11:22
-
That depends on the operating system. Old MS-DOS triggered a motherboard sound with that. If you are running a very recent OS I expect the kernel to trigger an audio signal from speaker rather than using hardware – usr-local-ΕΨΗΕΛΩΝ Jan 28 '16 at 13:43
-
4this is not working I tried full volume, my g++ version is `g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0` – Shoyeb Sheikh Sep 23 '20 at 12:18
If you're using Windows OS then there is a function called Beep()
#include <iostream>
#include <windows.h> // WinApi header
using namespace std;
int main()
{
Beep(523,500); // 523 hertz (C5) for 500 milliseconds
cin.get(); // wait
return 0;
}
Source: http://www.daniweb.com/forums/thread15252.html
For Linux based OS there is:
echo -e "\007" >/dev/tty10
And if you do not wish to use Beep() in windows you can do:
echo "^G"
- 20,480
- 21
- 73
- 110
- 56,863
- 21
- 114
- 161
-
For the last one, this does NOT work when I enter `^` and `G`. It only works when pressing `Ctrl+G`. Even though the strings look the same when entered, they are different and are also printed differently. – Felix Dombek Jul 16 '19 at 12:03
-
1`Beep()` function plays sound via speakers, not through motherboard's physical buzzer. According to microsoft website : "because of the lack of hardware to communicate with, support for Beep was dropped in Windows Vista and Windows XP 64-Bit Edition. In Windows 7, Beep was rewritten to pass the beep to the default sound device for the session" – 0xB00B Jun 22 '21 at 15:49
-
There are a few OS-specific routines for beeping.
On a Unix-like OS, try the (n)curses beep() function. This is likely to be more portable than writing
'\a'as others have suggested, although for most terminal emulators that will probably work.In some *BSDs there is a PC speaker device. Reading the driver source, the
SPKRTONEioctl seems to correspond to the raw hardware interface, but there also seems to be a high-level language built aroundwrite()-ing strings to the driver, described in the manpage.It looks like Linux has a similar driver (see this article for example; there is also some example code on this page if you scroll down a bit.).
In Windows there is a function called Beep().
- 39,039
- 2
- 53
- 68
-
'\a' is defined by the C++ standard, and is extremely portable. Of course if you're using broken terminal software all bets are off, but the Win32 console subsystem and most xterm clones all process '\a' properly. – Ben Voigt Oct 30 '10 at 20:48
-
7@Ben Voigt: Correct me if I'm wrong, but the C++ standard only specify that '\a' will represent an ASCII BEL character; but it never specifies what the programs' behavior should be when sending such character to stdout. The part that ASCII BEL == '\a' is extremely portable, as you said, but the beeping part is a totally undefined behavior. – Lie Ryan Oct 30 '10 at 21:27
-
1@Ben: as far as I'm concerned, terminal software is broken if it *doesn't* have a way of switching off the bell. – Steve Jessop Oct 30 '10 at 21:52
-
@Steve: I agree, but I don't read this question is "How do you make a beep when the users has explicitly turned sounds off?" – Ben Voigt Oct 30 '10 at 23:30
alternatively in c or c++ after including stdio.h
char d=(char)(7);
printf("%c\n",d);
(char)7 is called the bell character.
- 1,415
- 3
- 16
- 30
You could use conditional compilation:
#ifdef WINDOWS
#include <Windows.h>
void beep() {
Beep(440, 1000);
}
#elif LINUX
#include <stdio.h>
void beep() {
system("echo -e "\007" >/dev/tty10");
}
#else
#include <stdio.h>
void beep() {
cout << "\a" << flush;
}
#endif
- 172
- 3
- 10
-
2It is better to let LINUX part to be flexible with frequency and time too, using 'system("beep -f 5000 -l 50 -r 2") ' ( see https://wiki.archlinux.org/index.php/PC_speaker ) – Vit Apr 01 '17 at 16:35
#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
int main()
{
Beep(1568, 200);
Beep(1568, 200);
Beep(1568, 200);
Beep(1245, 1000);
Beep(1397, 200);
Beep(1397, 200);
Beep(1397, 200);
Beep(1175, 1000);
cout<<endl;
_getch()
return 0
}
- 1,366
- 5
- 18
- 33
- 31
- 1
I tried most things here, none worked on my Ubuntu VM.
Here is a quick hack (credits goes here):
#include <iostream>
int main() {
system("(speaker-test -t sine -f 1000)& pid=$!; sleep 1.0s; kill -9 $pid");
}
It will basically use system's speaker-test to produce the sound. This will not terminate quickly though, so the command runs it in background (the & part), then captures its process id (the pid=$1 part), sleeps for a certain amount that you can change (the sleep 1.0s part) and then it kills that process (the kill -9 $pid part).
sine is the sound produced. You can change it to pink or to a wav file.
- 7,002
- 5
- 43
- 52
Easiest way is probbaly just to print a ^G ascii bell
- 94,801
- 28
- 188
- 263
-
`stdout`, perhaps? There's no object named `out` in `namespace std`. – Ben Voigt Oct 30 '10 at 20:46
The ASCII bell character might be what you are looking for. Number 7 in this table.
- 10,451
- 28
- 109
- 179
cout << "\a";
In Xcode, After compiling, you have to run the executable by hand to hear the beep.
- 65
- 1
- 9