2011-07-12 109 views
3

我試圖使用portaudio(是跨平臺功能),從麥克風讀入,然後我想通過FFT將這些數據,但我不是這樣當然如何去做。 很多人告訴我:1.獲取數據,2.apply fft, 但問題是我不太確定如何獲取數據,portaudio沒有太多關於從麥克風獲取輸入的教程,如果你知道任何代碼,教程或任何其他資源,它會很好。我一直在尋找這一點。請幫助PortAudio:如何從麥克風獲取記錄(獲取數據)

+0

任何人都可以幫助我,真的很難過。 – Rave

+0

以下鏈接可能有所幫助:http://www.rossbencina.com/static/writings/portaudio_icmc2001.pdf?q=%7Erossb/writings/portaudio_icmc2001.pdf – unpythonic

回答

3

portaudio發行版以示例C程序的形式提供了文檔。它們位於test目錄中,通常稱爲patest_...。這裏有很多很好的資料,文檔包含一個overview with very short description,

你想看的那個是patest_record,它通過回調進行異步記錄。如果你想做任何嚴肅的事,恕我直言,這就是要走的路。但也有patest_read_record.c,它同步(阻塞)IO。代碼實際上非常簡單,下面是相關部分(大量的東西被遺漏): 1 /你malloc一個緩衝區2 /你在回調中安裝一個回調函數3 /,你將數據複製到你的緩衝區

/* 1 */ 
data.recordedSamples = (SAMPLE *) malloc(numBytes); 
/* 2 */ 
err = Pa_OpenStream(
      &stream, 
      &inputParameters, 
      NULL,     /* &outputParameters, */ 
      SAMPLE_RATE, 
      FRAMES_PER_BUFFER, 
      paClipOff,  
      recordCallback, 
      &data); 
/* 3, in recordCallBack with rptr the input data and wptr our buffer */ 
for(i=0; i<framesLeft; i++) 
{ 
    *wptr++ = *rptr++; /* left */ 
    if(NUM_CHANNELS == 2) *wptr++ = *rptr++; /* right */ 
} 

再次,這是簡化,但你明白了。有相當數量的簿記,示例代碼不是最乾淨的,但很容易適應您的目的。