Wie erzeuge ich Töne nach der Frequenz? [Duplikat]

7

Ich möchte Sounds erzeugen. Entweder so etwas wie:

%Vor%

Oder:

%Vor%

Ich habe etwas gefunden, das heißt: Microsoft.Directx.DirectSound , habe aber gelesen, dass es eingestellt wurde. Und ich konnte es nicht als eine Option für eine Referenz in Visual Studio (2010) finden. Ich habe diesen Link gefunden was nach dem, was ich gelesen habe, ist sollte es einbeziehen, aber ich zögere, etwas von 2006 zu verwenden, da es möglicherweise nicht mehr unterstützt wird. Und dieser sagt, es ist für C / C ++ (trotz der Aussage: "managed code") und ich möchte nicht Wochen damit verschwenden zu verstehen, wie man das in verwalteten Code einpackt, nur um herauszufinden, dass ich es nicht kann. Der vielversprechendste Link, den ich gefunden habe, ist WaveFormat aber ich konnte nicht finden, wie man es benutzt.

Ich bin nicht frage, wie man die mathematische Darstellung für die Schallwelle bekommt. Ich frage auch nicht, wie man eine MP3-Datei oder ähnliches spielt. Ich suche auch keine Software oder Wrapper von Drittanbietern. Nur für eine C # /. NET-Lösung für ein ganz bestimmtes Ziel.

    
ispiro 26.12.2012, 15:32
quelle

2 Antworten

13

Wie auch immer Sie es betrachten, es sei denn, Sie möchten nicht verwalteten Code verwenden, Sie müssen einen WAV erstellen, um ihn zu spielen. Im Folgenden finden Sie jedoch ein Code-Snippet von Eric Lipperts Blog , der Ihnen zeigt, wie Sie Ihre eigene WAV-Datei mit Hilfe von Frequenzen rollen können.

%Vor%

Brich es für deine Bedürfnisse auseinander, aber beachte die aNatural Variable - es ist eine Frequenz - genau wie du suchst.

Jetzt kannst du das in ein MemoryStream setzen und es dann mit SoundPlayer spielen, wenn du möchtest.

    
Mike Perrenoud 26.12.2012 15:40
quelle
8

Hier ist ein Wrapper um die Beep Funktion in der Kernel, eine Dauer und eine Häufigkeit. Heutzutage verwendet Beep die Soundkarte; Zu meiner Zeit verwendete es einige Piezo-Gerät auf dem Motherboard geklebt.

%Vor%

In meiner Win10-Box muss ich die Dauer (letzter Parameter) viel größer als die 5 ms hier einstellen, mehr bis zu 50 ms, aber um etwas vernünftiges zu bekommen, muss ich 100 ms machen.

Oder verwenden Sie die Console.Beep (Int32, Int32) Methode, wenn Sie den einfachen Weg nehmen möchten. Diese Methode wurde in .Net 2.0 eingeführt.

    
rene 26.12.2012 15:44
quelle

Tags und Links