在OS X Haskell的音频输出? [英] Haskell audio output on OS X?

查看:143
本文介绍了在OS X Haskell的音频输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望能够从哈斯克尔输出音频。我目前使用的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆