Аудиовыход Haskell на OS X?

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

Править: Ясность

8
задан Edward 8 February 2010 в 18:24
поделиться

1 ответ

Я успешно использую 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 жалуется).

5
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: