Я хотел бы смочь произвести аудио от Haskell. Я в настоящее время использую GHC 6.10 на OS X (Snow Leopard). Я попытался создать библиотеку разъема (использующий JackOSX) и библиотеку PortAudio, но ни один из них не казался эффективным. Существует ли относительно простой способ сделать живой аудиовыход из программы Haskell на Mac?
Править: Ясность
Я успешно использую 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 жалуется).