Witam. Chciałbym napisać program, w którym dźwięk będzie pobierany z mikrofonu, następnie przetwarzany (np. transformata Fouriera, jakiś filtr) i finalnie wypuszczany na głośniki.
Jak się za to zabrać, może są jakieś biblioteki, które pomogą w tym zadaniu? Proszę o pomoc:)
Z neta wyszukałem takie biblioteki jak: FMODex, DirectSound, DirectShow, OpenAL. Znalazłem też kawałek w WinAPI, może zadziała:
#include <windows.h>
#include <mmsystem.h>
#include <iostream>
using namespace std;
int main()
{
//waveInOpen( 1 ); nie wyrzuca błędu o braku deklaracji, czyli ta opcja istenieje :)
WaveOut wo = new WaveOut(); // tutaj niestety jest już błąd undeclared....
wo.Play(fileName, 512*1024, 0xffff, 0xffff);
// Record and save a wave file
WaveIn wi = new WaveIn();
wi.Preload(3000, 256*1024);
wi.Start();
wi.Save(fileName);
cin.get():
return 0;
}
Na pewno warto przyjrzeć się bibliotece http://naudio.codeplex.com/ , która to polecana przeze mnie już na tym forum jest chyba najlepszą biblioteką do obsługi dźwięku w C#.
Jednak Twoje wymagania bardzo pasują do DirectShow. Jest to technologia, która pozwala tworzyć tzw. filtry, każdy filtr w grafie filtrów zajmuje się jakąś określoną operacją np. jeden pobiera dźwięk z mikrofonu i daje na wyjście bajty dźwięku, do tego wyjścia może się podłączyć jakiś filtr transformujący, który pobierze dane z mikrofonu i wykona jakieś przekształcenie i przekaże wynik dalej np. na głośniki. Wydaje mi się to dla Ciebie najlepsze wyjście, jednak musiałbyś pisać w Visual C++, ponieważ biblioteka do DirectShowa w C# ma ograniczone możliwości w temacie pisania filtrów DirectShow. (http://directshownet.sourceforge.net/)
Tutaj masz też linka do stronki msdn z opisem technologii i przykładami, być może zechcesz z tego skorzystać
(http://msdn.microsoft.com/en-us/library/ms783323)
Pozdrawiam
Łukasz Gawron