2010-02-08 9 views
8

Me gustaría poder emitir audio desde Haskell. Actualmente estoy usando GHC 6.10 en OS X (Snow Leopard). Intenté construir la biblioteca jack (usando JackOSX) y la biblioteca PortAudio, pero ninguno de ellos parecía ser efectivo. ¿Existe una forma relativamente simple de hacer una salida de audio en vivo desde un programa Haskell en una Mac?Salida de audio Haskell en OS X?

Editar: Claridad

Respuesta

5

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

+0

¿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

+1

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

+0

@Edward Amsden: No usé macports. Hice 'configure' ..' make install' para la versión estable v19_20071207. Buena suerte. – yairchu