2011-01-15 12 views
6

Ich habe versucht, Console.Beep() mit niedrigen Millisekunden Raten zwei spielen zwei Frequenzen "auf einmal", aber die Pause zwischen Signaltönen ruiniert es. Ich habe versucht, es zu recherchieren, aber ich habe nichts gefunden und weiß nicht, wo ich anfangen soll, abgesehen von DirectSound, auf das ich schaue. Alles was ich brauche, ist ein Programm zu erstellen, das zwei oder mehr Frequenzen gleichzeitig in C# aus einem Lautsprecher heraus wiedergibt.Akkorde in C#?

Danke.

+0

Awww ... erinnert mich an meine BBC Micro ... nun, das war eine Maschine mit etwas Power ... diese Art von fortgeschrittener Programmierung ist wahrscheinlich in C# nicht möglich. –

Antwort

2

Ich schlage vor, dass Sie DirectSound betrachten, die nette .NET-Bindungen hat. Sie können zwei (oder mehr) Buffer Objekte verwenden und ihre Methoden Play aufrufen, um sie gleichzeitig abzuspielen.

This tutorial zeigt, wie man eine einfache Drum Machine in C# durch die Synthese von Sounds on the fly implementiert. Ich hoffe es hilft.

+0

Das sieht genau so aus, was ich brauche. Vielen Dank. – apophis

+0

@apophis: Keine Sorge. – CesarGon

0

Versuchen Sie, mit MIDI zu suchen. This example sollte Sie beginnen. Es verwendet eine MIDI-Bibliothek, die mehrere Leute empfehlen.

+0

Prost. Ich werde es mir ansehen. – apophis

0

Console.Beep() ist synchron und kehrt erst zurück, wenn der Sound beendet ist.

Probieren Sie Simple DirectMedia Layer (SDL.net) aus.

0

Hier ist ein sehr einfacher Beispielcode, mit dem Sie eine WAV- oder MIDI-Datei abspielen können. Auf diese Weise können Sie Ihren Code einmal schreiben und dann nur die wav- oder mid-Datei beibehalten, wenn Sie Änderungen am Soundeffekt vornehmen möchten.

Play Any Sound File - C# (Benötigt DirectX 9.0 für Managed-Code)

0

Wenn Sie die Frequenzen im Voraus wissen, können Sie sie in eine Wave-Datei (Dreistigkeit oder ein anderes ähnliches Programm) synthetisieren und dann mit der SoundPlayer Klasse der Wave-Datei abspielen.

string path = /*path goes here*/; 
player = new SoundPlayer(path); 
player.Play(); 

Wenn Sie sie zur Laufzeit synthetisieren müssen, müssten Sie die Datei von Hand schreiben. Here's eine SO-Frage, auf die Sie verweisen können, um die Wave-Dateien zu erstellen.