我希望能够从 Haskell 输出音频。我目前在 OS X (Snow Leopard) 上使用 GHC 6.10。我尝试过构建 jack 库(使用 JackOSX)和 PortAudio 库,但它们似乎都没有效果。有没有一种相对简单的方法可以在 Mac 上从 Haskell 程序进行实时音频输出?
编辑:清晰度
我已经成功地使用了 PortAudio。
我从我的玩具程序中摘录了一些内容,制作了一个非常简单的“echo”示例,如下所示:
(带着耳机运行。这是从麦克风到扬声器的反馈回路,可能会变成很响经过几轮反馈后)
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 抱怨的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)