engine.setPitchShiftSemitones(2.5f) // +2.5 semitones engine.setTimeStretchRatio(0.8f) // 20% slower

: It retains the signature "lo-fi" aesthetic, characterized by heavy scanlines, chromatic aberration, and pixelated gore that defines the "ribs" sub-genre of Sonic EXE fan games. Key Features Optimized Performance

# Requires Android NDK r25+ and CMake 3.22+ cd sonic-ribs-android ./gradlew assembleDebug # Native tests: adb shell /data/local/tmp/ribs_test --gtest_filter=*Latency*

The original sonic.ribs used arithmetic. Android Java layer prefers float .

Sonic.ribs Android Port

Sonic.ribs Android Port __link__ -

engine.setPitchShiftSemitones(2.5f) // +2.5 semitones engine.setTimeStretchRatio(0.8f) // 20% slower

: It retains the signature "lo-fi" aesthetic, characterized by heavy scanlines, chromatic aberration, and pixelated gore that defines the "ribs" sub-genre of Sonic EXE fan games. Key Features Optimized Performance Sonic.ribs Android Port

# Requires Android NDK r25+ and CMake 3.22+ cd sonic-ribs-android ./gradlew assembleDebug # Native tests: adb shell /data/local/tmp/ribs_test --gtest_filter=*Latency* engine

The original sonic.ribs used arithmetic. Android Java layer prefers float . characterized by heavy scanlines