2010-02-08 36 views
8

Tôi muốn có thể xuất âm thanh từ Haskell. Tôi hiện đang sử dụng GHC 6.10 trên OS X (Snow Leopard). Tôi đã thử xây dựng thư viện jack (bằng cách sử dụng JackOSX) và thư viện PortAudio, nhưng không ai trong số họ có vẻ hiệu quả. Có cách nào tương đối đơn giản để thực hiện đầu ra âm thanh trực tiếp từ chương trình Haskell trên máy Mac không?Đầu ra âm thanh Haskell trên OS X?

Chỉnh sửa: Clarity

Trả lời

5

Tôi đã sử dụng PortAudio thành công.

Tôi mất một số đoạn trích từ chương trình đồ chơi của tôi để thực hiện một "echo" rất đơn giản ví dụ, dưới đây:.

(chạy với tai nghe này là một vòng phản hồi từ mic vào loa và có thể trở thành rất lớn sau một vài vòng phản hồi)

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 

Hoạt động tại đây với Leopard với GHC 6.10.4.

Chương trình đồ chơi của riêng tôi thực sự chỉ sử dụng đầu vào âm thanh và nó xuất các số không thành đầu ra âm thanh (mà không làm như vậy mà PortAudio khiếu nại).

+0

Bạn đã tự cài đặt thư viện portaudio như thế nào? Tôi đã cài đặt nó qua macports và bây giờ thư viện haskell phàn nàn rằng thư viện portaudio là kiến ​​trúc sai. – Edward

+1

Vì vậy, rõ ràng đây là liên quan đến Snow Leopard là tất cả 64bit theo mặc định, nhưng GHC vẫn là 32 bit. Đang cố gắng để xây dựng portaudio như 32bit cũng không thành công. – Edward

+0

@Edward Amsden: Tôi không sử dụng macports. Tôi đã làm 'cấu hình' ..' make install' cho phiên bản ổn định v19_20071207. Chúc may mắn. – yairchu

Các vấn đề liên quan