başarıyla portaudio kullanıyorum.
aşağıda, çok basit "yankı" örneğini yapmak benim oyuncak programından yaklaşık alıntılar aldı.
(kulaklık ile çalışacak bu hoparlörlere mikrofon bir geribesleme döngüsü ve çok yüksek
hale gelebilir birkaç geribildirim yuvarlar sonra)
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 ile Leopard burada çalışır.
Kendi oyuncak programım aslında yalnızca ses girdisini kullanır ve ses çıkışına sıfırlar çıkarır (bu, PortAudio'u yapmadan şikayet eder).
Portaudio kitaplığını nasıl kurdunuz? Macports aracılığıyla yükledim ve şimdi haskell kütüphanesi, portaudio kütüphanesinin yanlış mimariden şikayetçisidir. – Edward
Görünüşe göre bu, Snow Leopard'ın varsayılan olarak 64 bit olmasına bağlı, ancak GHC hala 32 bit. 32bit olarak portaudio kurmaya çalışmak da başarısız oluyor. – Edward
@Edward Amsden: Macports kullanmadım. Kararlı sürüm v19_20071207 için 'make' 'make install' komutunu yaptım. İyi şanslar. – yairchu