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