ACM evrişimi
ACM evrişimi FMOD'un bölümlenmiş yankısını CPU'da çalıştırır. Ortak girdili gruplar tek bir kuru sinyali dönüştürür, kayan nokta veya yarım kayan nokta dürtü bölümlerini uygular ve ıslak sonucu örtüştür-topla yöntemiyle birleştirir.
10 Ekim 2026 tarihine kadarki depo notları
Kapattığı hata
Subnautica: Below Zero bir çıtırtıyla başlayıp sessizleşebiliyor ve dakikalar sonra toparlanıyordu. Ana sistem aygıtına ulaşan PCM sonlu olmayan kayan noktalı değerler içeriyordu. FMOD'un DSP geri çağırmalarının bellek içi izi, evrişimli yankıya sonlu sesin girdiğini ve çöpün çıktığını gösterdi. sceAcm_ConvReverb_SharedInput, grup gönderimi ve sceAcmBatchWait HLE işlevleri bir çıktı yazmadan başarı döndürüyordu.
FMOD ardından bu yazılmamış ıslak arabelleği grafiğe karıştırıyordu. NaN'ler sonraki efektlere yayılıyordu. AudioOut'un temizleyicisi onları sessizlikle değiştiriyor ve zehirlenmiş filtre geçmişini onaramıyordu. İkinci bir hata, ilk grup tanımlayıcısı -1 üzerindeki beklemenin başarılı olmasına yol açıyordu. FMOD başarısız bir ilk beklemeyi 'henüz önceki ıslak arabellek yok' olarak yorumlar ve yalnızca gerçekten tamamlanmış bir işten sonra karıştırır.
Bölümlenmiş evrişim
Tanımlayıcı düzeni FMOD'un ACM arka ucunda gözlenenle eşleşir. Dürtü yanıtı bölümleri serpiştirilmiş karmaşık kutulardır. B kutudan oluşan bir blok 2B uzunluğunda bir dönüşüme aittir. Girdi, çıktı ve örtüşme arabellekleri ayrı ve düzlemseldir. Yalnızca gözlenen sıfır konumlu float32 ve float16 spektrum düzenleri kabul edilir.
Bir grup CPU'da çalışır. Girdi geçmişi taneler arasında ve halka dönüşünde korunur ve örtüşme sonraki çıktı tanesine taşınır. Birkaç çıktı tek bir girdi dönüşümünü ve tek bir geçmiş ilerletmesini paylaşabilir. Mono girdi birden fazla kanalı besleyebilir. Ters dönüşüm normalleştirilir. Gerçek bir dürtü bölümünün bağımsız tersi enerjisini sıfırla doldurulmuş bloğun ilk yarısına koydu; bu da spektrum işaretini doğruluyor. Oyunun kullandığı paketlenmiş dürtü Nyquist kutusunu içermez.
Beklemeler, sınırlar ve yeniden test
Oluşturucular işaretçi dizilerini ve kazançları sınırlı bir komut kaydına alır. PCM'in kendisi grup başladığında okunur. Bir bekleme yalnızca bu bağlamın gerçekten tamamladığı bir grup için başarılı olur. Bağlamı yok etmek geçmişi serbest bırakır. Geçersiz sınırlar, bilinmeyen komut kodlamaları ve desteklenmeyen düzenler hata döndürür.
Bağımsız ACM FFT, IFFT ve panner işlemleri uygulanmadı. Kanallar 8, çıktılar 32 ve blok 1024 ile sınırlıdır. Geçmiş depolaması sınırlıdır. İmzalı çalıştırıcıda saniyede bir alınan 90 PCM anlık görüntüsü sonlu olmayan örnek içermedi; zirve 0,1255 idi ve 0,001'in üzerindeki ilk ses 11,03. saniyede geldi. Geliştirici sesi doğruladı. Örnekler bir yoklamadır, oyunun ürettiği her örnek değil.
Uygulananlar
- FMOD'un ortak girdili ve ortak IR'li yankı grupları için bölümlenmiş FFT evrişimi.
- Float32 ve float16 karmaşık spektrumlar, örtüştür-topla ve taneler arası geçmiş.
- Yalnızca o bağlamın tamamlanmış bir grubu için başarılı olan beklemeler. İlk -1 tanımlayıcısı başarısız olur.
- Subnautica yeniden testinde sonlu PCM; çıtırtı ve sonraki sessizlik yok.
Hâlâ eksik olanlar
- Bağımsız ACM FFT, IFFT ve panner çağrıları uygulanmadı.
- Sıfır olmayan spektrum konumları ve ölçülmemiş yönlendirme düzenleri reddedilir.
- Evrişim CPU'da çalışır. GPU FFT yolu yok.
İlgili mekanizmalar
Bu sayfalar nedir