2010-10-30 48 views
34

Come far suonare l'hardware beep con C++?emette suoni (beep) con C++

Grazie

+3

quale sistema operativo Are You On? –

+0

toot è un file C multipiattaforma che tenta di chiamare diversi generatori di suoni per produrre il segnale acustico. http://github.com/vareille/toot – renataflow

risposta

54
cout << '\a'; 

Source

:)

+0

Questo esce dagli altoparlanti. Come posso fare in modo che la scheda madre interna emetta un segnale acustico anziché un altoparlante? –

+0

Dipende dal sistema operativo. Il vecchio MS-DOS ha attivato un suono della scheda madre con quello. Se si sta utilizzando un SO molto recente, mi aspetto che il kernel inneschi un segnale audio dall'altoparlante anziché utilizzare l'hardware –

2

modo più semplice è probbaly solo per stampare un ascii^G bell

+0

'stdout', forse? Non c'è alcun oggetto chiamato 'out' in' namespace std'. –

+0

sorry typo - thanks –

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

Se stai usando OS di Windows allora c'è una funzione chiamata 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; 
} 

Fonte: http://www.daniweb.com/forums/thread15252.html

Per Linux basata OS c'è :

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

E se non si desidera utilizzare Beep() in finestre si può fare:

echo "^G" 

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

+5

Questo non è un C++ standard. Non sappiamo nemmeno se sta usando Windows. –

+0

Il sistema operativo non è mai stato menzionato o tag – Samuel

+5

Im non un programmatore C++, C# principalmente ma pensavo che la risorsa sarebbe stata utile, Non penso che valesse la pena di scendere, ma questa è la tua prerogativa – RobertPitt

0

Il carattere ASCII campana potrebbe essere quello che state cercando. Numero 7 nella tabella this.

7

Ci sono alcune routine specifiche del sistema operativo per il segnale acustico.

  • Su un sistema operativo Unix, provare the (n)curses beep() function. È probabile che questo sia più portatile rispetto alla scrittura di '\a' come altri hanno suggerito, sebbene per la maggior parte degli emulatori di terminale probabilmente funzionerà.

  • In alcuni * BSD è presente il numero PC speaker device. Leggendo la sorgente del driver, l'ioctl SPKRTONE sembra corrispondere all'interfaccia hardware raw, ma sembra esserci anche un linguaggio di alto livello costruito attorno alle stringhe write() -ing per il driver, descritto nella manpage.

  • Sembra che Linux abbia un driver simile (vedere this article per esempio, c'è anche qualche codice di esempio su this page se si scorre verso il basso un po '.).

  • In Windows è presente una funzione denominata Beep().

+0

'\ a' è definito dallo standard C++ ed è estremamente portatile. Ovviamente, se si utilizza un software terminale danneggiato, tutte le scommesse sono disattivate, ma il sottosistema della console Win32 e la maggior parte dei cloni xterm elaborano tutti "\ a" correttamente. –

+6

@Ben Voigt: correggimi se sbaglio, ma lo standard C++ specifica solo che '\ a' rappresenterà un carattere ASCII BEL; ma non specifica mai quale dovrebbe essere il comportamento dei programmi quando invia un carattere simile allo stdout. La parte che ASCII BEL == '\ a' è estremamente portabile, come hai detto tu, ma la parte del segnale acustico è un comportamento totalmente indefinito. –

+0

@ Ben: per quanto mi riguarda, il software del terminale è rotto se * non * ha un modo di spegnere il campanello. –

0
cout << "\a"; 

In Xcode, Dopo la compilazione, è necessario eseguire il file eseguibile a mano per sentire il segnale acustico.

5

alternativamente in C o C++ dopo compresi stdio.h

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

(char) 7 è chiamato il carattere campana.

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

Beethoven? https://en.m.wikipedia.org/wiki/Symphony_No._5_(Beethoven) –

+0

@KIMTaegyoon cool –

1

Si potrebbe utilizzare la compilazione condizionale:

#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

È meglio lasciare che la parte LINUX sia flessibile anche con frequenza e tempo, usando 'system ("beep - f 5000 -l 50 -r 2 ") '(vedi https://wiki.archlinux.org/index.php/PC_speaker) –