OS X上的Haskell音频输出?

时间:2010-02-08 18:24:49

标签: macos audio haskell core-audio

我希望能够从Haskell输出音频。我目前在OS X(Snow Leopard)上使用GHC 6.10。我已经尝试构建插孔库(使用JackOSX)和PortAudio库,但它们似乎都没有效果。是否有一种相对简单的方法从Mac上的Haskell程序进行实时音频输出?

编辑:清晰度

1 个答案:

答案 0 :(得分: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

在Leopard中使用GHC 6.10.4。

我自己的玩具程序实际上只使用音频输入,它输出零到音频输出(没有做PortAudio抱怨)。