2010-02-08 15 views
8

Chciałbym móc odtwarzać dźwięk z Haskell. Obecnie używam GHC 6.10 na OS X (Snow Leopard). Próbowałem już budować bibliotekę jack (używając JackOSX) i bibliotekę PortAudio, ale żadne z nich nie wydawało się skuteczne. Czy istnieje stosunkowo prosty sposób na uzyskanie dźwięku na żywo z programu Haskell na komputerze Mac?Wyjście audio Haskell na OS X?

Edit: Przejrzystość

Odpowiedz

5

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

+0

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

+1

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

+0

@Edward Amsden: Nie użyłem Macports. Zrobiłem 'configure' ..' make install' dla stabilnej wersji v19_20071207. Powodzenia. – yairchu