2010-02-08 3 views
8

하스켈에서 오디오를 출력하고 싶습니다. 현재 OS X (Snow Leopard)에서 GHC 6.10을 사용하고 있습니다. 나는 (JackOSX를 사용하여) 잭 라이브러리와 PortAudio 라이브러리를 만들려고했으나 그 중 어느 것도 효과적이지는 않았다. Mac에서 하스켈 프로그램의 라이브 오디오 출력을 비교적 간단하게 할 수 있습니까?OS X에서 하스켈 오디오 출력?

편집 : 선명도

답변

5

나는 성공적으로 PortAudio을 사용하고있다.

내가 아래에, 아주 간단한 "에코"예를 만들기 위해 내 장난감 프로그램에서 일부 발췌했다 :.

이 (헤드폰으로 실행이 스피커 마이크에서 피드백 루프 매우 큰 될 수 있습니다 몇 피드백 라운드 후)

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 

는 GHC 6.10.4와 레오파드 여기에 작동합니다.

내 장난감 프로그램은 실제로 오디오 입력 만 사용하며 오디오 출력에 0을 출력합니다 (PortAudio에서 불평하지 않고).

+0

어떻게 portaudio 라이브러리를 설치 했습니까? 내가 macports를 통해 그것을 설치하고 지금 haskell 라이브러리는 portaudio 라이브러리가 잘못된 아키텍처라고 불평하고있다. – Edward

+1

그래서 분명히 Snow Leopard는 기본적으로 64 비트이지만 GHC는 여전히 32 비트입니다. portaudio를 32 비트로 만들려고해도 실패합니다. – Edward

+0

@Edward Amsden : 나는 맥 포트를 사용하지 않았다. 안정 버전 v19_20071207에 대해'configure '를했다.'make install'. 행운을 빕니다. – yairchu