2010-10-30 146 views
34

¿Cómo hacer que el hardware emita un pitido con C++?hacer sonidos (pitido) con C++

Gracias

+3

qué sistema operativo está usted? –

+0

toot es un archivo C multiplataforma que intenta llamar a varios generadores de sonido para producir el pitido. http://github.com/vareille/toot – renataflow

Respuesta

54
cout << '\a'; 

Source

:)

+0

Esto sale de los altavoces. ¿Cómo puedo hacer que la placa madre interna emita un pitido en lugar de un altavoz? –

+0

Eso depende del sistema operativo. El viejo MS-DOS activó un sonido de placa base con eso. Si está ejecutando un sistema operativo muy reciente, espero que el núcleo active una señal de audio desde el altavoz en lugar de utilizar el hardware –

2

La manera más fácil es probbaly sólo para imprimir una ascii^G campana

+0

'stdout', quizás? No hay ningún objeto llamado 'out' en' namespace std'. –

+0

error tipográfico - gracias –

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

Si utiliza sistema operativo Windows, entonces hay una función llamada 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; 
} 

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

Para Linux basada OS hay :

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

Y si no desea utilizar Beep() en las ventanas que puede hacer:

echo "^G" 

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

+5

. Eso no es estándar C++. Ni siquiera sabemos si está usando Windows. –

+0

El sistema operativo nunca se mencionó en pregunta o etiquetas – Samuel

+5

No soy un programador de C++, C# principalmente, pero pensé que ese recurso podría haber sido útil, no creo que valió la pena votar, pero esa es su prerrogativa – RobertPitt

0

El carácter ASCII campana podría ser lo que buscas. Número 7 en la tabla this.

7

Existen algunas rutinas específicas del sistema operativo para pitidos.

  • En un sistema operativo similar a Unix, intente the (n)curses beep() function. Es probable que sea más portátil que escribir '\a' como otros han sugerido, aunque para la mayoría de los emuladores de terminal probablemente funcione.

  • En algunos * BSD hay un PC speaker device. Leyendo la fuente del controlador, el SPKRTONE ioctl parece corresponderse con la interfaz de hardware sin formato, pero también parece haber un lenguaje de alto nivel construido en torno al write() -encadena al controlador, descrito en la página de manual.

  • Parece que Linux tiene un controlador similar (vea this article por ejemplo, también hay algún código de ejemplo en this page si se desplaza un poco hacia abajo).

  • En Windows hay una función llamada Beep().

+0

'\ a' está definido por el estándar C++ y es extremadamente portátil. Por supuesto, si está utilizando el software de terminal roto, todas las apuestas están desactivadas, pero el subsistema de la consola Win32 y la mayoría de los clones xterm procesan '\ a' correctamente. –

+6

@Ben Voigt: corrígeme si me equivoco, pero el estándar de C++ solo especifica que '\ a' representará un carácter ASCII BEL; pero nunca especifica cuál debe ser el comportamiento de los programas al enviar dicho carácter a stdout. La parte que ASCII BEL == '\ a' es extremadamente portátil, como dijiste, pero la parte de pitido es un comportamiento totalmente indefinido. –

+0

@Ben: en lo que a mí respecta, el software del terminal se rompe si * no * tiene una forma de apagar el timbre. –

0
cout << "\a"; 

En Xcode, Después de compilar, tiene que ejecutar el archivo ejecutable con la mano para escuchar el pitido.

5

alternativamente en C o C++ después de incluir stdio.h

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

(char) 7 se llama el carácter 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

Usted podría utilizar la compilación condicional:

#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

Es mejor dejar que LINUX sea flexible con la frecuencia y el tiempo también, usando 'system ("beep - f 5000 -l 50 -r 2 ") '(ver https://wiki.archlinux.org/index.php/PC_speaker) –

Cuestiones relacionadas