Audio

lazar

Grünschnabel
Hallo,

vielleicht kann mir jemand helfen!
Ich möchte mit c# eine Audio Signal erzeugen!
z.b. 5kHz oder 10kHz mit einer bestimmten Lautstärke!
Bis jetzt hab ich noch nichts passendes gefunden!

mfg lazar
 

Saber

Erfahrenes Mitglied
Eine bereits in C#.NET implementierte Funktion wirst Du da nicht finden. Da wirst Du nicht um einen Windows-API-Call (z.B. kernel32.dll) herumkommen. Wie Du selber mittels API eine Beep-Funktion schreibst zeigt Dir der folgende Link:
Beep-Funktion mittels API

Dort sind die Source Codes für C#.NET, VB und VB.NET vorhanden. :)
Ist nicht viel, aber immerhin ein Ansatz.
 
Zuletzt bearbeitet:

lazar

Grünschnabel
danke!

und die lautstärke, kann ich die nur über den directx (directsound) ändern!
oder kann ich die auf einen bestimmten db wert ändern?
ich benötige eine signal das auf jeder soundkarte gleich laut ist!

lazar
 

Saber

Erfahrenes Mitglied
Also die Beep-Funktion läuft sowieso nicht über den Soundblaster sondern über den internen PC Lautsprecher. Da dürfte der Ton ohnehin konstant laut sein auf allen Systemen, was ich aber auch nicht 100%ig genau weiss.

Andernfalls kannst Du via DirectX bzw. DirectSound natürlich das ganze auch an den Soundblaster senden. Vielleicht gehts auch mit dem Creative SDK, wobei Dich das evtl. an den Hersteller festnagelt.

Vielleicht findest hier was:
Programmers Heaven (Graphics & Sound)

Speziell vielleicht dieses Progrämmchen:
Frequenzgenerator für 8-Bit-Soundkarte (Programmers Heaven)

Oder hier:
Sound Artikel (Programmers Heaven)

Wobei sich dort leider zu dem Thema fast keine oder gar keine C#-Sourcen befinden. Ich hoffe Du kannst mehr als eine Sprache. :)

Ansonsten hilft nur googlen. ;)
 

lazar

Grünschnabel
mmh!
Leider kann ich nur c,c++ und jetzt auch c#!
Aber die Lautstärke kann ich doch auch über die auxSetVolume einstellen?!
Ist diese Lautstärke von der Soundkarte abhängig

Danke für deine hilfreichen und schnellen Antworten

lazar
 

Saber

Erfahrenes Mitglied
auxSetVolume kenn ich nicht, aber die Beep-Funktion lauft nicht über die Soundkarte sondern über den internen PC-Lautsprecher. So genau weiss ich das auch nicht mehr. Den PC-Lautsprecher hab ich zuletzt unter Turbo Pascal vor acht Jahren angesteuert. ;)

Also das "leider" kannst Du bei Sprachkenntnissen in C/C++ und C# wieder streichen. Damit hast Du die besten Voraussetzungen für andere Sprachen. :)

Wenn Du die Möglichkeit hast DX9 zu verwenden, dann würde ich das auch machen. Es sei denn Du willst wirklich bloß einen Peep-Ton erzeugen, da wärs vielleicht etwas übertrieben ... aber ich meine warum auch nicht. Verwende Managed DirectX 9, das wurde speziell für .NET entwickelt. :)
 

lazar

Grünschnabel
mmh, Mein signal sollte über einen Kopfhörer hörbar sein, d.h. ich kann die Beep Ftk. nicht verwenden da sie nur am PC Speaker hörbar ist!
Hab bereits mit DirectX DirectSound probiert. Aber weiß nicht wie ich dort ein Signal erstellen kann, geht das
Hab dann für die verschiedenen Frequenzen einzelne .wav Files gelanden!
Das funktioniert ganz gut, leider ist die Lautstärke der Signale wieder von der Soundkarte abhängig!
Weißt du/ihr ob ich mit DirectX eine Signal erzeugen kann (bestimmte Frequenz/Lautstärke) das auf jeder Soundkarte gleich laut ist!
Oder bleibt es mir nicht aus das ich .wav Files verwenden muss!

lazar
 

Saber

Erfahrenes Mitglied
Nun ja, das mit der Lautstärke ist so eine Sache. Denn die hängt wohl weniger von der Soundkarte ab als viel eher von den Lautsprechern bzw. dem Verstärker. Das ist jetzt meine Meinung, dazu hab ich von Lautsprechern zu wenig Ahnung. Ich programmiere lieber. ;)

Also mit DirectX lässt sich selbstverständlich eine simple Frequenz erzeugen. Du musst einen Buffer erstellen, ihn mit den entsprechenden Informationen füllen und anschl. per DX ausgeben lassen.
Wobei ich auf die schnelle echt keine guten Tutorials oder Beispiele im Internet gefunden habe. Vielleicht helfen Dir diese Links ein wenig weiter:

http://www.it-academy.cc/content/article_browse.php?ID=743

Hier noch ein kleiner Ansatzpunkt. Ist zwar die Aufgabe und keine Lösung, aber vielleicht hilft Dir das als Ansatzpunkt weiter:
DirectSound als Frequenzgenerator (Aufgabe)

Aber das übersteigt meine Kenntnisse in Sound-Programmierung nun bei weitem muss ich leider zugeben. Vielleicht besser mal googlen. :)
 

lazar

Grünschnabel
erstmal danke für deine hilfreiche und schnelle Hilfe jedes mal!
Bei meiner Anwendung (ein Audiometer) wird ein Kopfhörer direkt an die Soundkarte angeschlossen!
d.h. das Signal läuft nicht über die Lautsprecher bzw. den Verstärker der Soundkarte, es ist nur von den Eigenschaften des Kopfhörers abhängig!
Dies kann ich aber kompensieren!
Deine Links sind sehr hilfreich, aber ich habe die direkte Anleitung für das Erstellen eines Signal nicht gefunden. Kann auch sein das es an mir liegt da ich noch nicht sehr lange am C# programmieren bin.
Mit Google hab ich nur beschränkt hilfreiche Sachen gefunden!
 

Saber

Erfahrenes Mitglied
Mit C#.NET hat Dein Problem wenig zu tun. Das ist "nur" die Sprache in der Du das ganze umsetzen willst. Bei Dir liegt das bei DirectX. Und das ist wieder eine ganz eigene Welt. :)