2011-01-15 14 views
6

Próbowałem używać Console.Beep() przy niskich milisekundach dwa odtwarzają dwie częstotliwości "naraz", ale przerwa między dźwiękami rujnuje go. Próbowałem go zbadać, ale niczego nie znalazłem i nie wiem, od czego zacząć, poza DirectSound, na który patrzę. Wszystko, czego potrzebuję, to zrobić program, który odtwarza dwie lub więcej częstotliwości jednocześnie z jednego głośnika, w C#.Dźwiękowe akordy w języku C#?

Dzięki.

+0

Awww ... przypomina mi moje BBC Micro ... teraz to była maszyna z pewną mocą ... tego rodzaju zaawansowane programowanie prawdopodobnie nie jest możliwe w języku C#. –

Odpowiedz

2

Proponuję spojrzeć na DirectSound, który ma ładne powiązania .NET. Możesz użyć dwóch (lub więcej) obiektów Buffer i wywołać ich metody Play, aby odtwarzać je jednocześnie.

This tutorial pokazuje, jak zaimplementować prostą maszynę perkusyjną w języku C#, syntetyzując dźwięki w locie. Mam nadzieję, że to pomoże.

+0

To wygląda dokładnie to, czego potrzebuję. Dzięki. – apophis

+0

@apophis: Bez obaw. – CesarGon

0

Console.Beep() jest synchroniczny i nie powraca, dopóki dźwięk nie zostanie zakończony.

Wypróbuj Simple DirectMedia Layer (SDL.net).

0

Oto bardzo prosty przykładowy kod, który pozwoli ci odtwarzać plik WAV lub MIDI. W ten sposób możesz raz napisać swój kod, a następnie zachować plik WAV lub MID, jeśli chcesz wprowadzić zmiany w efektach dźwiękowych.

Play Any Sound File - C# (Używa DirectX 9.0 dla kodu zarządzanego)

0

Jeśli znasz częstotliwości wcześniej można syntetyzować je do pliku wave (Audacity lub innego podobnego programu), a następnie odtworzyć plik wave z klasą SoundPlayer.

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

Jeśli chcesz je zsyntetyzować w czasie wykonywania, musisz ręcznie zapisać plik. Here's a WIĘCEJ pytania, które można odwołać się do budowy plików wave.