2010-02-08 22 views
8

Haskell'den ses çıkışı yapabilmek istiyorum. Şu anda OS X (Snow Leopard) üzerinde GHC 6.10 kullanıyorum. Jack kütüphanesini (JackOSX kullanarak) ve PortAudio kütüphanesini oluşturmayı denedim, ancak bunların hiçbiri etkili görünmedi. Bir Mac üzerinde bir Haskell programından canlı ses çıkışı yapmak için nispeten basit bir yolu var mı?Haskell ses çıkışı?

Düzenleme: Açıklık

cevap

5

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).

+0

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

+1

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

+0

@Edward Amsden: Macports kullanmadım. Kararlı sürüm v19_20071207 için 'make' 'make install' komutunu yaptım. İyi şanslar. – yairchu