2010-02-08 5 views
8

Ich möchte Audio von Haskell ausgeben können. Ich verwende derzeit GHC 6.10 unter OS X (Snow Leopard). Ich habe versucht, die Jack-Bibliothek (mit JackOSX) und die PortAudio-Bibliothek zu bauen, aber keiner von ihnen schien effektiv zu sein. Gibt es eine relativ einfache Möglichkeit, Live-Audio-Ausgaben von einem Haskell-Programm auf einem Mac zu machen?Haskell Audio-Ausgang auf OS X?

Edit: Clarity

Antwort

5

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

+0

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

+1

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

+0

@Edward Amsden: Ich habe keine Macports benutzt. Ich habe 'configure' ...' make install' für die stabile Version v19_20071207. Viel Glück. – yairchu