Ich denke, der einfachste Weg zu gehen ist, die alte Windows-Multimedia-API zu verwenden, weil es wirklich einfach ist.
Hier ist der Link zu MSDN: http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx
Was Sie tun, ist, dass Sie die waveInOpen
Funktion verwenden, um ein Eingabegerät zu erhalten. Um herauszufinden, welches Gerät Sie verwenden sollen, listen Sie nicht alle Geräte auf, aber Sie können jedes einzelne Gerät abfragen. Die Anzahl der installierten Geräte wird durch den Aufruf waveInGetNumDevs
zurückgegeben. Sie können dann für jedes Gerät waveInGetDevCaps
aufrufen und diese Eigenschaften überprüfen.
Wenn Sie mit Ihrem Gerät umgehen, rufen Sie wiederholt waveInAddBuffer
an, um kleine Datenblöcke zu erhalten. Abhängig vom Format, das Sie während waveInOpen
angegeben haben, repräsentieren die Bytes die rohen Audiodaten. Amplitude in 8 oder 16 Bit signiert oder unverstimmt mit einer bestimmten Frequenz abgetastet.
Sie könnten dann einen gleitenden Durchschnitt anwenden, um das Signal zu glätten und nur das zu drucken.
C# verfügt nicht über eine Sound-API, die ich kenne. Sie verwenden also P/Invoke, um an die Win32-API-Funktionen zu gelangen. Dies ist ziemlich einfach, Sie müssen nur kleine Versionen der Win32-Header portieren, um sie direkt aus C# aufrufen zu können.
Wenn Sie mehr Hardcore sind, könnten Sie eine Wrapper-Bibliothek in C++/CLI schreiben. Das ist gar nicht so schlecht für eine Idee, denn Sie können vorhandene Windows C/C++ - Headerdateien verwenden und C++ und verwalteten Code auf interessante Weise mischen. Seien Sie vorsichtig mit den nicht verwalteten Ressourcen und Sie werden in kürzester Zeit eine sehr leistungsfähige Introability-Bibliothek haben.
Aber es gibt auch erweiterte Audio-APIs, die mit Windows Vista beginnen, die Windows Core Audio-Komponenten, die auf der ganzen Linie interessanter sein könnten. Aber für den grundlegenden I/O-Betrieb bringen Sie die Windows-Multimediafunktionen schneller voran.
Ich habe diese Funktionen bei mehreren Gelegenheiten beim Erstellen einfacher Software-Synthesizer verwendet. Leider ist dieser Code längst weg.
Haben Sie DirectX DirectSound ausprobiert? – JYelton
Haben Sie versucht, Ihr Programm von "Beliebige CPU" auf "Nur 32 Bit" zu setzen? Die meisten Programme profitieren nicht sehr davon, dass sie im 64-Bit-Modus ausgeführt werden. – CodesInChaos
Ich habe das schon versucht, aber bisher kein Glück. Habe auch kein einfaches directSound-Beispiel gefunden. Ich habe auch SlimDX ausprobiert, aber es sieht so aus, als ob es immer Probleme mit all diesen Beispielen gibt. Außerdem benötige ich integer Wert mit dynamischem Update (einige Male pro Sekunde). Jeder hat etwas Erfahrung damit? Danke für jede Hilfe. – Marian