2010-10-30 778 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