« Tüm yayınlar

C# ile Gerçek Zamanlı Ses Sentezi: Sigilgraph DAW'ın İçi

C# ile sıfır heap tahsisli, SIMD destekli gerçek zamanlı ses sentezi motoru: Sigilgraph DAW'ın mimarisi ve performans dersleri.

Bir sistem mühendisi, C#'ın gerçek zamanlı ses işleme için yetersiz olduğu yönündeki yaygın kanıyı test etmek amacıyla Sigilgraph adlı düğüm tabanlı, programatik bir DAW geliştirdi. Proje, Godot içine gömülü tamamen C# tabanlı bir ses sentezi kütüphanesinden doğdu ve zamanla 100'den fazla operatörden oluşan bir grafiği gerçek zamanlı işleyen tam teşekküllü bir sese dönüştü.

Mimarinin temelinde, ses sürücüsünün örnekleri doğrudan çektiği bir 'pull model' yatıyor. Heap tahsisinden tamamen kaçınmak için struct'lar ve Span<T> yaygın biçimde kullanılıyor, Fourier dönüşümleri ve yoğun matematiksel işlemler için Vector<T> ile SIMD donanım komutlarından yararlanılıyor. Bu sayede çöp toplayıcı (GC) sıcak yolda neredeyse hiç devreye girmiyor ve 96 kHz stereo akışta saniyede 192.000 float'ın 100'den fazla operatörden oluşan bir çağrı yığınında gecikmesiz işlenmesi garanti ediliyor.

Parametre kontrolü için lambda ve delegate'ler kullanılmış, ancak performans kaygısıyla bu lambda'lar örnek başına değil blok başına değerlendiriliyor; bu da fonksiyon çağrı yükünü 64 kat azaltıyor. Geliştirici, JetBrains dotTrace ve dotMemory ile yaptığı profil analizleri sonucunda, nota işleme gibi düşük frekanslı ve küçük nesneli yolları bilinçli olarak GC'ye bırakmayı tercih etmiş; bu da optimizasyon çabalarının nereye odaklanması gerektiğine dair önemli bir mühendislik dersi sunuyor.

Sonuç, .NET'in düşük seviyeli bellek kontrolü ile yönetilen dil rahatlığını bir arada sunabileceğini gösteren somut bir örnek: yüksek performanslı ses işleme için artık üretkenlikten ödün vermek gerekmiyor.