Zum Inhalt springen
PS5PCEM
TeilweiseTon und Video

ACM-Faltung

Die ACM-Faltung führt den partitionierten Hall von FMOD auf der CPU aus. Batches mit gemeinsamem Eingang transformieren ein Dry-Signal, wenden Impulspartitionen in Float oder Halbfloat an und fügen das Wet-Ergebnis per Overlap-Add zusammen.

Repository-Notizen bis 10. Oktober 2026

Der Fehler, den sie geschlossen hat

Subnautica: Below Zero konnte mit einem Knacken starten, verstummen und Minuten später zurückkehren. Das PCM, das das Host-Gerät erreichte, enthielt nicht endliche Gleitkommazahlen. Eine Ablaufverfolgung der DSP-Rückrufe von FMOD im Speicher zeigte endliche Audiodaten, die in den Faltungshall eintraten, und unbrauchbare Daten, die ihn verließen. Die HLE-Funktionen sceAcm_ConvReverb_SharedInput, die Batch-Einreichung und sceAcmBatchWait gaben Erfolg zurück, ohne eine Ausgabe zu schreiben.

FMOD mischte diesen unbeschriebenen Wet-Puffer danach in den Graphen. Die NaNs breiteten sich durch spätere Effekte aus. Die Bereinigung von AudioOut ersetzte sie durch Stille und konnte die vergiftete Filterhistorie nicht reparieren. Ein zweiter Fehler ließ das Warten auf die anfängliche Batch-Kennung -1 gelingen. FMOD behandelt ein fehlgeschlagenes erstes Warten als 'noch kein vorheriger Wet-Puffer' und mischt erst nach einem wirklich abgeschlossenen Auftrag.

Partitionierte Faltung

Das Deskriptor-Layout entspricht dem, das im ACM-Backend von FMOD beobachtet wurde. Partitionen der Impulsantwort sind verschachtelte komplexe Bins. Ein Block von B Bins gehört zu einer Transformation der Länge 2B. Puffer für Eingang, Ausgang und Überlappung sind getrennt und planar. Angenommen werden nur die beobachteten Spektren-Layouts float32 und float16 mit Offset null.

Ein Batch läuft auf der CPU. Die Eingangshistorie bleibt über Grains und über den Umbruch des Rings erhalten, und die Überlappung wird in das nächste Ausgangs-Grain übernommen. Mehrere Ausgänge können eine Eingangstransformation und einen Fortschritt der Historie teilen. Mono-Eingang kann mehr als einen Kanal speisen. Die inverse Transformation ist normalisiert. Eine unabhängige Inverse einer reellen Impulspartition legte ihre Energie in die erste Hälfte des nullgepolsterten Blocks, was das Vorzeichen des Spektrums bestätigt. Der gepackte Impuls, den das Spiel nutzt, lässt den Nyquist-Bin weg.

Wartebedingungen, Grenzen und der erneute Test

Die Erzeuger nehmen Zeigerfelder und Verstärkungen in einen begrenzten Befehlsdatensatz auf. Das PCM selbst wird gelesen, wenn der Batch startet. Ein Warten gelingt nur für einen Batch, den dieser Kontext tatsächlich abgeschlossen hat. Das Zerstören des Kontexts gibt die Historie frei. Ungültige Grenzen, unbekannte Befehlskodierungen und nicht unterstützte Layouts liefern Fehler.

Eigenständige ACM-Operationen für FFT, IFFT und Panner sind nicht implementiert. Kanäle sind auf 8 begrenzt, Ausgänge auf 32 und der Block auf 1024. Der Speicher für die Historie ist begrenzt. Auf dem signierten Runner enthielten 90 PCM-Schnappschüsse im Sekundentakt keine nicht endlichen Samples, mit einem Spitzenwert von 0.1255 und dem ersten Ton über 0.001 bei 11.03 Sekunden. Der Betreuer hat den Ton bestätigt. Die Samples sind eine Stichprobe, nicht jedes Sample, das das Spiel ausgegeben hat.

Was umgesetzt ist

  • Partitionierte FFT-Faltung für die Hall-Batches von FMOD mit gemeinsamem Eingang und gemeinsamer Impulsantwort.
  • Komplexe Spektren in Float32 und float16, Overlap-Add und Historie über Grains hinweg.
  • Wartebedingungen, die nur für einen abgeschlossenen Batch dieses Kontexts gelingen. Die anfängliche Kennung -1 schlägt fehl.
  • Endliches PCM im erneuten Test von Subnautica, wobei das Knacken und die spätere Stille weg sind.

Was noch fehlt

  • Eigenständige Aufrufe von ACM für FFT, IFFT und Panner sind nicht implementiert.
  • Spektren-Offsets ungleich null und nicht gemessene Routing-Layouts werden abgelehnt.
  • Die Faltung läuft auf der CPU. Es gibt keinen GPU-FFT-Pfad.

Verwandte Mechanismen

Worum es auf diesen Seiten geht

Der Text folgt den Architektur-Notizen und den Berichten vom Oktober 2026 im PS5PCEM-Repository. Ein bestandener Einzeltest ist keine neue Bildrate und kein neuer Durchspielstand.

Alle Techniken