2010-10-30 728 views
34

如何用C++制作硬件蜂鸣声?用C++发出声音(嘟嘟声)

感谢

+3

什么OS是你吗? – 2010-10-30 21:21:38

+0

toot是一个跨平台的C文件,它尝试调用几个声音发生器来产生嘟嘟声。 http://github.com/vareille/toot – renataflow 2017-11-11 06:13:54

回答

54
cout << '\a'; 

Source

:)

+0

这是扬声器。我如何让内部主板发出哔哔声而不是扬声器? – 2016-01-28 11:22:01

+0

这取决于操作系统。老MS-DOS用它触发了主板声音。如果你正在运行一个非常新的操作系统,我期望内核触发扬声器的音频信号,而不是使用硬件 – 2016-01-28 13:43:10

2

最简单方法是probbaly只是打印^ g ASCII响铃

+0

'stdout',也许? 'namespace std'中没有名为'out'的对象。 – 2010-10-30 20:46:43

+0

对不起,错字 - 谢谢 – 2010-10-30 21:19:43

3
std::cout << '\7'; 
40

如果你使用的是Windows操作系统,那么有一个叫功能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; 
} 

来源:http://www.daniweb.com/forums/thread15252.html

对于基于Linux有OS :

echo -e "\007" >/dev/tty10 

如果你不希望在Windows中使用Beep()你可以这样做:

echo "^G" 

来源:http://www.frank-buss.de/beep/index.html

+5

这不是标准的C++。我们甚至不知道他是否在使用Windows。 – 2010-10-30 20:45:52

+0

操作系统从来没有提到的问题或标签 – Samuel 2010-10-30 20:47:02

+5

我不是一个C++程序员,C#主要但认为资源会有帮助,不认为这是值得的票,但这是你的特权 – RobertPitt 2010-10-30 20:48:14

0

的ASCII响铃字符可能是你在找什么。在this表中的数字7。

7

有几个操作系统特定的例程用于发出哔声。

  • 在类Unix的操作系统上,请尝试the (n)curses beep() function。这可能比编写'\a'更容易,正如其他人所建议的那样,尽管对于大多数可能工作的终端仿真器而言。

  • 在一些* BSD中有一个PC speaker device。读取驱动程序源代码后,SPKRTONE ioctl似乎与原始硬件接口相对应,但似乎还有一个围绕write()构建的高级语言 - 驱动程序的字符串,如联机帮助页中所述。

  • 它看起来像Linux有一个类似的驱动程序(例如this article例如,如果你向下滚动一下this page也有一些示例代码)。

  • 在Windows中有一个叫做Beep()的函数。

+0

'\ a'由C++标准定义,非常便携。当然,如果你使用破坏的终端软件,所有的注单都关闭,但是Win32控制台子系统和大多数xterm克隆都可以正确处理'\ a'。 – 2010-10-30 20:48:57

+6

@本Voigt:纠正我,如果我错了,但C++标准只指定'\ a'将代表一个ASCII BEL字符;但它不会指定将这些字符发送到标准输出时程序的行为。正如你所说,ASCII BEL =='\ a'的部分是非常便携的,但哔哔声部分是完全未定义的行为。 – 2010-10-30 21:27:18

+0

@Ben:就我而言,终端软件如果不*有关闭铃声的方式就会被破坏。 – 2010-10-30 21:52:04

0
cout << "\a"; 

在Xcode中,编译之后,你必须手动运行可执行听到蜂鸣声。

5

可选地C或C++包括stdio.h中

char d=(char)(7); 
printf("%c\n",d); 

(炭)7被称为钟形字符之后。

1
#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

贝多芬? https://en.m.wikipedia.org/wiki/Symphony_No._5_(Beethoven) – 2016-06-10 17:58:28

+0

@KIMTaegyoon cool :) – 2016-10-30 08:39:43

1

您可以使用条件编译:

#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 
+1

最好让LINUX部分在频率和时间方面也很灵活,使用'system(“beep - f 5000 -l 50 -r 2“)'(见https://wiki.archlinux.org/index.php/PC_speaker) – 2017-04-01 16:35:21