在OS X Haskell的音频输出? [英] Haskell audio output on OS X?
问题描述
我希望能够从哈斯克尔输出音频。我目前使用的OS X(雪豹)GHC 6.10。我试过建设插孔库(使用JackOSX)和PortAudio库,但他们都不似乎有效。是否有一个比较简单的方法从Mac?
I'd like to be able to output audio from Haskell. I'm currently using GHC 6.10 on OS X (Snow Leopard). I've tried building the jack library (using JackOSX) and the PortAudio library, but neither of them seemed effective. Is there a relatively simple way to do live audio output from a Haskell program on a Mac?
编辑:净度
推荐答案
我一直在使用PortAudio成功。
I've been using PortAudio successfully.
我花了一些摘录从我的玩具程序做一个非常简单的回声为例,如下:
I took some excerpts from my toy program to make a very simple "echo" example, below:
(耳机运行。这是从麦克风到扬声器的反馈回路,并可能成为很响亮几反馈回合后)
(run with headphones. this is a feedback loop from the mic to the speakers and may become very loud after a few feedback rounds)
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。
Works here in Leopard with GHC 6.10.4.
我自己的玩具程序实际只使用了音频输入,并输出零到音频输出(不这样做,PortAudio抱怨)。
My own toy program actually only uses audio input, and it outputs zeros to audio output (without doing that PortAudio complains).
这篇关于在OS X Haskell的音频输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!