Wer kennt eine sinnvolle Möglichkeit, eine ARBITRARY-Klangwelle in C# zu erstellen und sie über die Lautsprecher wiederzugeben?Wirklich niedrige Klangerzeugung in C#?
Dieses Problem ist seit Jahren immer wieder da, ich gebe es immer wieder nach einer Menge Fehler auf, ohne eine Lösung zu finden.
Was ich tun möchte, ist wie ein Reverse-Visualizer, das heißt, ich will keine "Zahlen" aus dem Sound generieren, ich möchte Sound aus Zahlen erzeugen.
Wie bekomme ich eine Funktion, die ich mit Sampling-Rate, Sample-Größe und die Sound-Daten (ein Array von ganzen Zahlen zum Beispiel), und es würde die entsprechende WAV-Datei daraus erzeugen (Echtzeit-Sound-Wiedergabe wäre ideal) , aber ich wäre auch mehr als zufrieden damit).
Ich weiß, dass die wav Dateispezifikationen über das Interweb sind, und machte mehrere Versuche, die obige Funktion zu erstellen, hatte etwas Erfolg für niedrige Frequenzen, aber sobald ich anfing, mit Bits pro Probe usw. zu spielen ... wird es ein RIESIGES , unkontrollierbares Durcheinander.
Ist dies noch nicht in irgendeiner Weise geschehen? Ich hätte nichts dagegen, was es verwendet, solange es ein .NET verwaltet Wrapper dafür (und ich kann es von der letzten VS zu Zeit zugreifen). XNA unterstützt auf diese Weise kein Low-Level-Audio. Habe auch einige Beispiele gefunden, die behaupten, etwas Ähnliches zu erreichen, aber sie funktionieren entweder gar nicht oder machen etwas völlig anderes.
Vielen Dank.
Das sieht wirklich toll aus, und ich schäme mich wirklich, habe aber noch nicht die Zeit, wirklich damit zu spielen. Nur eine Frage: Ist es einfach, 4 Bytes pro Sample zu machen? – jssyjrm
Sie können es 4 Bytes pro Beispiel machen, aber ich weiß nicht, ob Windows es spielen wird. Es könnte, ich weiß es einfach nicht. Wie auch immer, wenn Sie dies tun wollen, ändern Sie alle Verweise auf sizeof (short) auf sizeof (int), ändern Sie den Probentyp in int, ändern Sie den Skalierungsfaktor (short.MaxValue) in int.MaxValue und beheben Sie die Schleife, die das Bytearray füllt, um vier Bytes pro Beispiel hinzuzufügen. Aber ich wäre überrascht, wenn Sie einen Unterschied hören könnten. – arx
Vielen Dank dafür. Wie kann ich die Funktion "Stop" (und möglicherweise "Pause") hier hinzufügen? Ich nehme an, ich würde einen Hintergrundarbeiter benötigen, damit der Rest der GUI für die Eingabe frei ist. Welche Art von Code würde ein "Stop-Sound" aussehen? –