Używam PortAudio pomyślnie.
Wziąłem jakieś fragmenty z mojego programu zabawka zrobić bardzo prosty „echo” przykład poniżej.
(prowadzony przez słuchawki to pętla sprzężenia zwrotnego od mikrofonu do głośników i mogą stać bardzo głośno po kilku rundach feedback)
import Control.Monad (forever)
import Data.Int (Int16)
import Foreign.Ptr (nullPtr)
import Sound.PortAudio
initPortAudio :: Int -> IO (PaStream Int16)
initPortAudio blockSize = do
Right NoError <- initialize
Just micDevIdx <- getDefaultInputDevice
Just spkDevIdx <- getDefaultOutputDevice
Right paStream <-
openStream
(Just (StreamParameters micDevIdx 1 PaInt16 0.1 nullPtr))
(Just (StreamParameters spkDevIdx 1 PaInt16 0.1 nullPtr))
44100 blockSize
:: IO (Either String (PaStream Int16))
Right NoError <- startStream paStream
let zeroBlock = replicate blockSize [0]
Right NoError <- writeStream paStream zeroBlock blockSize
return paStream
main :: IO()
main = do
paStream <- initPortAudio blockSize
forever $ do
Right numSampsAvail <- getStreamReadAvailable paStream
Right curSamps <- readStream paStream 1 numSampsAvail
Right NoError <- writeStream paStream curSamps numSampsAvail
return()
where
blockSize = 0x800
Pracuje tutaj w Leopardzie z GHC 6.10.4.
Mój własny program zabawkowy w rzeczywistości wykorzystuje tylko wejście audio i wyprowadza zera na wyjście audio (bez narzekania PortAudio).
Jak zainstalowałeś samą bibliotekę portaudio? Zainstalowałem go przez macports i teraz biblioteka haskell narzeka, że biblioteka portaudio jest niewłaściwą architekturą. – Edward
Najwyraźniej jest to związane domyślnie z systemem Snow Leopard, ale GHC wciąż jest 32-bitowe. Próba zbudowania portaudio jako 32-bitowego również się nie udaje. – Edward
@Edward Amsden: Nie użyłem Macports. Zrobiłem 'configure' ..' make install' dla stabilnej wersji v19_20071207. Powodzenia. – yairchu