我希望能够从Haskell输出音频。我目前在OS X(Snow Leopard)上使用GHC 6.10。我已经尝试构建插孔库(使用JackOSX)和PortAudio库,但它们似乎都没有效果。是否有一种相对简单的方法从Mac上的Haskell程序进行实时音频输出?
编辑:清晰度
答案 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抱怨)。