Ich habe erfolgreich mit Portaudio.
ich von meinem Spielzeug Programm einige Auszüge nahm ein sehr einfaches „Echo“ Beispiel zu machen, unter:.
(laufen mit Kopfhörern ist dies eine Rückkopplungsschleife von dem Mikrofon an die Lautsprecher und sehr laut werden kann nach ein paar Feedbackrunden)
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
Werke hier in Leopard mit 6.10.4 GHC.
Mein eigenes Spielzeug-Programm verwendet tatsächlich nur Audio-Eingang, und es gibt Nullen zum Audio-Ausgang aus (ohne dass sich PortAudio darüber beschwert).
Wie haben Sie die portaudio-Bibliothek selbst installiert? Ich habe es über Macports installiert und nun beschwert sich die Haskell-Bibliothek, dass die Portaudio-Bibliothek die falsche Architektur ist. – Edward
Offensichtlich hängt das mit Snow Leopard zusammen, das standardmäßig alle 64 Bit ist, aber GHC ist immer noch 32 Bit. Der Versuch, Portaudio als 32bit zu bauen, scheitert auch. – Edward
@Edward Amsden: Ich habe keine Macports benutzt. Ich habe 'configure' ...' make install' für die stabile Version v19_20071207. Viel Glück. – yairchu