PC ses kartını mıncıklamak

Başlatan z, 29 Aralık 2012, 16:24:21

z

Bugüne kadar ses kartı ile hiç uygulamam olmadı.

Mesela ekrana mouse yardımıyla bir grafik çizsem. Bu grafik, voltaj-zaman ikilisine ait olsa.

Sonra bunu ses kartına yollasam ve grafiğin fonksiyonunu bir de ses olarak dinlesem ne güzel olur.

Acaba böyle bir open source delphi kod varmıdır? Kim yazabilir buraya kopyalayabilir?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


z

Ses kartını bize tanıtacak varmı?

İçinde neler vardır? Nasıl haberleşir. Ne tip veriler ister vs vs.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

metaltrrocker

Hocam tek bildigim icerisinde dac ve adc var onuda gecenlerde proje arastırırken ogrendim:-)

fatih6761

Bülent hocam;
Ses kartı genelde PCI soketinde bağlıdır. Denetimi güney köprüsündedir.(?) Eğer Windows üzerinde iseniz kartla iletişim kurmanın tek yolu sürücü çerçevesi. Windows Driver Kit ile kendi sürücünüzü yazarak ses kartı PCI arayüzüne erişebilir, donanıma doğrudan komut yollayabilirsiniz. Ürün marka/modeline göre komut seti değişecektir. Bu uzun çözüm yolu.
İkinci ve kolay olan yol, kütüphaneleri kullanmak. Bu konuda Linux üzerinde çok kullanışlı ve ücretsiz kütüphaneler var. Windows üzerinde ise en çok kullanılan ve neredeyse tüm Ses kartlarının desteklediği iki alernatif var: DirectX ve OpenAL.
Bunları araştırısanız belki Delphi ile ilgili de örnekler bulabilirsiniz.

MC_Skywalker

#5
Normal ses kartlarında sadece DAC ve ADC var. daha gelişmiş ses kartlarında DSP bulunmakta. Gelişmis ses kartları birçok çözme ve sıkıştırma işini yazılımsal codeck yerine kenidi üzerinde yapmakta.
http://asia.creative.com/products/product.asp?category=1&subcategory=872&product=21383&listby=usage

Birde Studiolarda kullanılanlar var.  onlar hakkında tam bir bilgim yok.

Ek:
Creative tarafından grliştirlmiş OpenAL http://connect.creativelabs.com/openal/default.aspx

z

Alala sadece DAC ve ADC den oluşan ses kartları varmıymış. Ben içinde muhakkak DSP var biliyordum.

Bu durumda ana işlemcinin mükemmel bir zamanlama ile ses kartına veri transferi yapması lazım.

DirectX ve OpenGL den hep uzak durdum bana karışık geldi hep. Bu konuyu anlatacak varmı?

OpenAL nedir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MC_Skywalker

#7
çok basitçe ve kabaca OpenAL bizim STM32F4 için kullandığımız LCD sürüsüne benzer diye bilirim.

.c ve .h dosylarında oluşumuştur ve projemize ekleyip ses kartı donanımına erşimek için kullanırız. Tabi işin esas kısmı windowstaki API kısmıdır (OpenAL32.dll) biz bunla ilgilenmeyiz.

z

Peki ses kartındaki DAC'a atıyorum her 10 mikrosaniyede bir veri yükleyebilecek program örneğini nereden bulabilirim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MC_Skywalker

bu tarz örnekleri sourceforge gibi google code gibi yerlerden bulabilirsiniz. normal aramalarınızda hit oranı yüksek olduğu için karşınıza hep mp3/4 wav oynatma/kaydetme vb. gibi örnekler çıkar.

t2

#10
Grafik olan sinyali pcm data olarak ifade ettikten sonra, wav olarakkaydedip  ses kartından bunu çalmak sorun değil.
Kaydetmek istemiyorsak memorystream olarak hafızada biriktirir oradan çalabiliriz.

Delphide bu işi yapabilecek çok sayıda komponentler var. komponentsiz çalabilmek için örnek de vardır.

Her 10 mikrosaniyede ne kadar bir veri yüklenecek? çalışacak sinyalin örnekleme frekansı  ne? saniyedeki örnek sayısı? ses kartı bunu çalabilir mi her şeyden önce ona bakmak gerek.  mümkünse 10 mikrosaniyede gelecek bilgileri biriktirip bir kaç ms uzunluğunda buffer olarak göndermek gerek.
bu buffer ayrıca komponent içinde bufferlara  ayrılımış güzelce gidiyor.  o kısmı dert etmeye gerek yok.

Açık kodlu komponenti bu :
http://www.delphiarea.com/products/delphi-packages/waveaudio/

fatih6761

En basit ses kartı ADC ve DA biriminden oluşacaktır. Yine veri aktarmanın en basit yolu Timer-Based Audio Scheduling'dir. Linux'ta uygun sürücü bulunamadığı zaman ( ALSA desteklenmiyorsa ) PulseAudio bu işi halleder. Ses kartlarında DAC modülünün bildiğim iki çalışma modeli var: Timer-Based dediğimiz gerçek zamanlı veri transferi ve veri tamponları ( buffers ) ile. DSP modülü bulunanlarda zaten çevrimler aracılığıyla farklı aktarım yöntemleri mevcut. OpenAL nin yeri hakkında şöyle bir resim çizebiliriz:

Siyah çizgiler Giden veri ,düz griler gelen veri, kesikli griler ise tetikleyicileri temsil ediyor. Donanım soyutlama katmanına kadar IRQ ile olaylar tetiklendiği için özel olarak belirttim.