Ich versuche, mit einer einfachen Audio-Anwendung unter .NET 3.5 (vorzugsweise in VB.NET, aber wird glücklich C# verwenden) zu starten. Was ich tun möchte, ist:
- Kontinuierliche Aufzeichnung von Audiodaten von (dem Standard-) Windows-Audioeingabegerät im 8-Bit-pro-Sample-PCM-Format
- Führen Sie für jedes N Byte eine Analyse der Rohdaten durch (einige RMS- und/oder SPL-Berechnungen - im Grunde das, was Sie für ein hübsches VU-Balkendiagramm benötigen)
- Wenn das Audiofragment nach der Analyse als interessant eingestuft wird, speichern Sie es in einem komprimierten Dateiformat (z. B. MP3).
Das erste, was ich bemerkte, ist, dass Audio-Unterstützung in der grundlegenden .NET Framework ist so ziemlich nicht vorhanden. Beim Googeln fand ich einige Codebeispiele, meist unter Verwendung von Managed DirectX. Das Fehlen der MSDN-Dokumentation, der Jahrgang der Bibliotheken (2004) und die folgende bedrohliche MDA-Ausnahme in VS.NET 2008 überzeugten mich jedoch, dass dies eine Sackgasse ist:
Message: DLL 'Microsoft.DirectX.dll' is attempting managed execution inside
OS Loader lock. Do not attempt to run managed code inside a DllMain or image
initialization function since doing so can cause the application to hang.
...was, wie ich glaube, grob übersetzt bedeutet: "Nicht einmal Versuchen Sie um dieses Zeug zu benutzen." Übersehe ich hier etwas, oder ist Managed DirectX wirklich tot? Eine weitere StackOverlow-Frage legt nahe, dass XNA ein Ersatz für Managed DirectX ist, aber es fehlt die Art von Low-Level-Funktionalität, die ich brauche.
Welche API oder Bibliothek eines Drittanbieters ist also für die Audioentwicklung unter .NET tatsächlich nützlich? Die Verwendung von COM-Interop oder P/Invoke ist akzeptabel, solange es einen anständigen .NET-Beispielcode gibt, mit dem man anfangen kann...