# Frequenzausgabe



## Drache2 (15. Juli 2007)

Erstma Hallo.

Habe schon viel unter  Google (und auch hier) nachgeguckt wie man einzelne Frequenzen (z.B.1200 khz) in *C++* üder die Lautsprecher ausgeben kann.

Bin dabei auf die Funktionen *sound(unsigned short Frequenz)*
und                                     *nosound()*

gestoßen. Die sollen angeblich in dos.h drin sein.

Nur leider sind die da nciht!

Nun frage ich, wie und mit welchem Haeder kann ich solche Frequenzen ausgeben?

Es würde mir schon reichen wenn ihr mir den passenden Haeder  und die dazugehörigen Funktionen (und eventuell ihre Funktionsweise)sagt.

Nutze übrigens Codeblocks mit dem mingwin compiler


----------



## windos (16. Juli 2007)

Hallo,

unter Windows kannst du "windows.h" einbinden und die Funktion "Beep(uint,uint)" nutzen:


```
//Beep(freq,t) 
 
#include <windows.h> 
 
... 
 
    Beep(523,250); 
    Beep(587,250); 
    Beep(659,250); 
    Beep(698,250); 
     
    Beep(784,500); 
    Beep(784,500); 
     
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
     
    Beep(784,1000); 
     
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
     
    Beep(784,1000); 
     
    Beep(698,250); 
    Beep(698,250); 
    Beep(698,250); 
    Beep(698,250); 
     
    Beep(659,500); 
    Beep(659,500); 
     
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
     
    Beep(659,500); 
    Beep(659,500); 
     
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
    Beep(880,250); 
     
    Beep(523,1000);
```

btw: Es heißt "MinGW", nicht "MingWin"...


----------



## Drache2 (16. Juli 2007)

Joa. Danke für die Antwort.

Und erstma entschuldige ich mich dafür das ich anstat MinGW MinWin geschrieben habe (klingt numal so änlich^^).

Ist zwar schön und gut (ne Tontabelle äre eventuell noch nett^^), jedoch wird der Sound über den Internen Lautsprecher und nicht von den an der Soundkarte angeschlossenen Boxen ausgegeben. Das war ja die eigentliche Frage (trotzdem danke). Die Ausgabe über PC-Lautsprecher (Boxen) soll (angeblich) mit sound(Frequenz) und nosound() möglich sein.

Nur fehlt mir die Libary (angeblich unter dos.h ,ist es aber leider  nicht).

Wäre also nett wenn jemand wüsste wie man das (möglichst einfach) hinkrigt.


----------



## windos (16. Juli 2007)

Das wird, unter Windows, schwer, da du die Hardware nicht direkt ansprechen darfst. Unter DOS ist das noch möglich! Unter Win musst du da schon auf "DirectSound" (Teil von "DirectX") oder eine andere lib setzen:

Eine andere Möglichkeit: mit "PlaySound(...)" (Windows) einen wavesound abspielen, ob das aber einfacher ist...

plattform-indep.: http://www.openal.org/


----------



## Drache2 (16. Juli 2007)

Zu Playsound:

Habe hier einen Beitrag gefunden, der zwar besagt, dass das geht, jedoch bekomme ich folgende Fehlermeldung bei der folgenden 
Funktion (windows.h ist eingebunden):

PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_LOOP | SND_ASYNC);

Fehler:

undefined reference to 'PlaySoundA@12'

Nun die Frage, Was ist dieses A@12 
Hatte diesen Fehler bisher noch nicht!

Und, wie krieg ich das jezt zum Laufen?

Habe auch gehört, dass man irgentetwas in den Linker schreiben muss.

Nur war die Beschreibung immer für DevC++

Wie gesagt. Ich nutze Codeblocks (Aktuellste version mit Nightly Builds) und den MinGW Compiler.


----------



## deepthroat (16. Juli 2007)

Hi.

In Headerdateien stehen nur die Deklarationen der Funktionen bzw. evtl. Variablen. Aber definiert sind die Funktionen / Variablen in Bibliotheken die man dazu noch einbinden muss.

Dazu schaut man in eine Referenz (http://msdn2.microsoft.com/en-us/library/ms712879.aspx) und sieht dann, das die Funktion PlaySound in der Winmm.lib Bibliothek definiert ist.

Die Bibliothek kann man dann in den Linker-Optionen bei den Bibliotheken hinzufügen. Normalerweise wird die Endung bei MinGW nicht angegeben.

Um die A@12 Schreibweise brauchst du dir keine Gedanken machen. Das kommt daher, weil unter Windows viele Funktionen doppelt existieren - einmal als ASCII Funktion mit dem Suffix "A" und als Wide-Character-Funktion (Unicode) mit dem Suffix "W". Normalerweise geschieht das alles hinter den Kulissen und man bekommt gar nichts davon mit.

Gruß


----------



## Drache2 (17. Juli 2007)

Ok. thx. Es funktioniert, nur eine Frage bleibt noch. Wie lasse ich den Sound denn wieder stoppen (also , halt ausschalten?)


----------



## deepthroat (18. Juli 2007)

Ähem, du solltest dir evtl. die *Dokumentation* durchlesen - speziell was die SND_LOOP Option bedeutet die du der Funktion mitgegeben hast.

Gruß


----------



## windos (19. Juli 2007)

Ich meine es reicht einen anderen Sound wiederzugeben, ist aber lang her. Wie gesagt: steht in der Doc.


----------



## Drache2 (24. Juli 2007)

Ja. Okay. Es Funktioniert fabelhaft.

Nun noch die Frage, Wie lasse ich mehrer Sounds gleichzeitig laufen?
Hab gelesengoogle, dass das damit anscheinend nicht wirklich klappt und man irgentwie DirectX oder so benutzen muss.Nur kenne ich mich mit DirectX bisher kaum aus.

Wäre nett wenn es da noch eine Lösung zu gäbe.
(Am besten mit Beispiel^^)

Und äm. Zu den Beep(). Welche Frequenz ist denn bitte das A?(Versuche eine Funktion zu schreiben, die aus einem String die Zeichen liest und entsprechende Töne ausgibt. (In QBasic wäre das Play "Soundstring". Daran orientiere ich mich dabei^^))


----------

