2010-02-08 12 views
8

मैं हास्केल से ऑडियो आउटपुट करने में सक्षम होना चाहता हूं। मैं वर्तमान में ओएस एक्स (हिम तेंदुए) पर जीएचसी 6.10 का उपयोग कर रहा हूं। मैंने जैक लाइब्रेरी (जैकओएसएक्स का उपयोग करके) और पोर्टऑडियो लाइब्रेरी का निर्माण करने की कोशिश की है, लेकिन उनमें से कोई भी प्रभावी नहीं लग रहा था। क्या मैक पर हास्केल प्रोग्राम से लाइव ऑडियो आउटपुट करने का अपेक्षाकृत सरल तरीका है?ओएस एक्स पर हास्केल ऑडियो आउटपुट?

संपादित करें: स्पष्टता

उत्तर

5

मैं PortAudio का सफलतापूर्वक उपयोग किया गया है।

मैं अपने खिलौना कार्यक्रम से कुछ अंश ले लिया एक बहुत ही सरल "गूंज" उदाहरण बनाने के लिए नीचे दिए गए:।

(हेडफोन के साथ चलाने के इस वक्ताओं करने के लिए माइक से एक राय पाश है और बहुत जोर से बन सकते हैं कुछ प्रतिक्रिया दौर के बाद)

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 साथ तेंदुए में यहां काम करता है।

मेरा अपना खिलौना कार्यक्रम वास्तव में केवल ऑडियो इनपुट का उपयोग करता है, और यह (कर कि PortAudio शिकायत के बिना) ऑडियो आउटपुट के लिए शून्य आउटपुट।

+0

आपने पोर्टौडियो लाइब्रेरी को कैसे इंस्टॉल किया? मैंने इसे मैकपोर्ट्स के माध्यम से स्थापित किया है और अब हैकेल लाइब्रेरी शिकायत कर रही है कि पोर्टौडियो लाइब्रेरी गलत आर्किटेक्चर है। – Edward

+1

तो स्पष्ट रूप से यह हिम तेंदुए से डिफ़ॉल्ट रूप से सभी 64 बिट होने से संबंधित है, लेकिन जीएचसी अभी भी 32 बिट है। 32 बिट के रूप में पोर्टौडियो बनाने की कोशिश भी विफल रहता है। – Edward

+0

@ एडवर्ड एम्सडन: मैंने मैकपोर्ट का उपयोग नहीं किया। मैंने स्थिर संस्करण v19_20071207 के लिए 'कॉन्फ़िगर करें' .. 'इंस्टॉल करें '। सौभाग्य। – yairchu