Pobranie dzwięku z mikrofonu

0

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:)

0

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;
 }
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1