He estado usando PortAudio éxito.
Me tomó algunos extractos de mi programa de juguete para hacer un ejemplo muy simple "eco", a continuación:.
(pista con auriculares se trata de un circuito de retroalimentación desde el micrófono a los altavoces y puede convertirse en muy fuerte después de unos pocos retroalimentación redondea)
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
trabaja aquí en Leopard con GHC 6.10.4.
Mi propio programa de juguetes en realidad solo usa entrada de audio, y emite ceros a la salida de audio (sin hacer que PortAudio se queje).
¿Cómo instalaste la biblioteca de Portaudio? Lo instalé a través de macports y ahora la biblioteca de haskell se está quejando de que la biblioteca de Portaudio es la arquitectura incorrecta. – Edward
Aparentemente, esto está relacionado con que Snow Leopard sea 64 bits por defecto, pero GHC sigue siendo de 32 bits. Intentar construir portaudio como 32 bits también falla. – Edward
@Edward Amsden: No usé macports. Hice 'configure' ..' make install' para la versión estable v19_20071207. Buena suerte. – yairchu