17 Şubat 2009 Salı

PortAudio'yu nihayet Windows altında compile edebilmem

# Barış sağolsun, hızır gibi yetişti. Byzantine: The Betrayal oyunu karşılığında Visual Studio'da portaudio'yu derlememe yardım etti. Böylece freqazoid'in içinde kullanabileceğim.
# N'aptığımı hemen buraya yazayım ki, ileride görüp hatırlayabileyim.

i) Son kararlı sürümü şuradan download ettik.
ii) Tutorial'da anlatılan adımları izledik: Yeni bir proje yarattık. Muhtelif kütüphane dosyaları için MSVC jargonuyla filter denen proje klasörleri yarattık. İlgili dosyaları explorer'da seçip sürükleyip bırakmak suretiyle ilgili filter'lara attık. Proje'nin adına sağ tıklayıp, özelliklerine gidip, All Configurations deyip, include directory'leri (relative path olarak) ekledik. Dandik bir main dosyası oluşturup, "portaudio.h" i include ettik.
iii) "pa_win_hostapis.c" e orada yazan #define PA_NO_WMME #define PA_NO_DS satırlarını ekledik.
iv) Build deyince bir takım hatalar verdi. Barış "bu 2008 versiyonu, nazlı bu ondandır" dedi. Hakikaten hatalar "bunu cast edemedim, sen et" tarzındaydı. Bir takım char[]'ları L(birşey)STR'lere cast edince build etti.
v) patest_saw.c örneğini projeye esas main dosyası olarak ekleyip build edince çalışmadı. Çünkü sürücü bir şey bulamadım dedi. 
vi) #define PA_NO_WMME satırını comment out edip, tekrar build edince, hallaah! o anda göbek atarak arkamda anime seyretmekte olan Erol'u korkuttum. İşte tarihi an, errorsuz, çökmesiz, realtime bir ses ortamını Windows'ta hazırlamış oldum.

# Kaç seferdir Cygwin ile Unix araçlarını kullanarak Portaudio'yu kurmaya çalışmıştım becerememiştim. Geçenlerde RtAudio'yu kurmayı başardım. Ama o da çözemediğim bir şekilde kapatırken veya açılırken çökme hataları veriyordu. Nihayet, make, Netbeans güzelliklerinden feragat edip, bilmediğim bir ortam olan MSVC'ye geçerek portaudio'ya ulaşmayı başardım.
# Hayırlı uğurlu olsun!
# Test klasöründeki hemen bütün örnekleri hatasız derleyip çalıştırabildim. Bir tek blocking read write örneği çalışmadı, o da eksik kalsın.
# Şimdi callback'e gelen input sample'larını bir array'de biriktirip, array dolduğunda ayrı bir thread'de FFT'sini hesaplatabilmek için (kastırıcı işlemleri callback'te yapmamak gerekiyormuş) cross-platform threading olayını nasıl yapacağımı öğrenmeye çalışıyorum.

Hiç yorum yok: