Skip to main content

Module Overview

The LCK SDK is organized into modular runtime modules, each with specific responsibilities and loading phases.
LCKVulkan (EarliestPossible)

LCKCore (PostDefault)
    ├── LCKAudio (PostDefault)
    ├── LCKWindowsEncoder (Win64 only)
    ├── LCKAndroidEncoder (Android only)
    └── LCKAndroidGallery (Android only)

LCKTablet (Default)
    └── LCKUI (Default)

Optional Audio Plugins:
    ├── LCKFMOD (Default)
    ├── LCKWwise (Default)
    ├── LCKVivox (Default)
    └── LCKOboe (Android only, Default)

Loading Phases

ModulePhasePlatformDescription
LCKVulkanEarliestPossibleAndroidVulkan interop initialization
LCKCorePostDefaultAllCore recording and subsystems
LCKAudioPostDefaultAllAudio capture framework
LCKWindowsEncoderPostDefaultWin64Media Foundation encoder
LCKAndroidEncoderPostDefaultAndroidNDK MediaCodec encoder
LCKAndroidGalleryPostDefaultAndroidMedia gallery integration
LCKTabletDefaultAllTablet UI and camera control
LCKUIDefaultAllUI components
LCKFMODDefaultAllFMOD integration
LCKWwiseDefaultWin64, AndroidWwise integration
LCKVivoxDefaultAllVivox voice chat
LCKOboeDefaultAndroidGoogle Oboe microphone
EarliestPossible modules load before the engine is fully initialized. This is required for Vulkan interop on Android.

Module Dependencies

Build.cs Configuration

// MyGame.Build.cs
public class MyGame : ModuleRules
{
    public MyGame(ReadOnlyTargetRules Target) : base(Target)
    {
        // Core LCK (always required)
        PublicDependencyModuleNames.AddRange(new string[] {
            "LCKCore"
        });

        // Optional: Tablet UI
        PublicDependencyModuleNames.AddRange(new string[] {
            "LCKTablet",
            "LCKUI"
        });

        // Optional: Audio middleware
        if (Target.Platform == UnrealTargetPlatform.Win64 ||
            Target.Platform == UnrealTargetPlatform.Android)
        {
            // PublicDependencyModuleNames.Add("LCKFMOD");
            // PublicDependencyModuleNames.Add("LCKWwise");
        }

        // Optional: Voice chat
        PublicDependencyModuleNames.Add("LCKVivox");
    }
}

Module loading from plugin settings

Unreal Audio Plugins

Plugin settings warning when enabling multiple Game and Audio sources

Unreal Audio Plugins Warnings

Core Modules

LCKCore

The foundation module providing:
  • ULCKRecorderSubsystem - Low-level recording control
  • ULCKTelemetrySubsystem - Analytics
  • ULCKDeveloperSettings - Project configuration
  • ILCKEncoderFactory - Encoder abstraction
Dependencies: None (base module)

LCKAudio

Audio capture framework:
  • ILCKAudioSource interface
  • FLCKAudioMix for combining sources
  • Audio channel management
Dependencies: LCKCore

LCKTablet

High-level tablet functionality:
  • ULCKSubsystem - World subsystem
  • ULCKService - Recording service
  • ALCKTablet - Tablet actor
  • ULCKTabletDataModel - State management
Dependencies: LCKCore, LCKUI

LCKUI

3D UI components:
  • ULCKButton - Interactive buttons
  • ULCKSlider - Slider controls
  • Recording state visualization
Dependencies: LCKCore

Platform-Specific Modules

LCKWindowsEncoder

Windows Media Foundation implementation:
  • H.264 video encoding
  • AAC audio encoding
  • MP4 muxing
Required: Automatically loaded on Win64

Audio Plugin Modules

Priority Order

When multiple audio plugins are available, LCK uses this priority:
  1. LCKFMOD (highest priority for game audio)
  2. LCKWwise
  3. LCKUnrealAudio (built-in, always available)
Only ONE game audio source is active at a time. Microphone and voice chat can run alongside game audio.

LCKFMOD

FMOD Studio integration:
  • DSP-based capture from master bus
  • Zero-copy audio pipeline
  • Automatic FMOD detection
Dependencies: LCKAudio, FMODStudio

LCKWwise

Audiokinetic Wwise integration:
  • Output capture callback
  • 3rd-order ambisonic support
  • Stereo downmix
Dependencies: LCKAudio, AkAudio

LCKVivox

Vivox voice chat:
  • Microphone capture
  • Incoming voice capture
  • Thread-safe callbacks
Dependencies: LCKAudio, VivoxCore

LCKOboe (Android only)

Google Oboe microphone:
  • Low-latency audio input
  • AAudio/OpenSL ES abstraction
  • Optimized for Quest
Dependencies: LCKAudio

Checking Module Availability

// Check if a module is loaded
bool bFMODAvailable = FModuleManager::Get().IsModuleLoaded("LCKFMOD");
bool bWwiseAvailable = FModuleManager::Get().IsModuleLoaded("LCKWwise");

// Get loaded audio plugins
TArray<FLCKAudioPluginInfo> LoadedPlugins =
    ULCKDeveloperSettings::Get()->GetLoadedAudioPlugins();

for (const FLCKAudioPluginInfo& Plugin : LoadedPlugins)
{
    UE_LOG(LogLCK, Log, TEXT("Audio plugin: %s"), *Plugin.Name);
}

Plugin Configuration

.uproject File

{
  "Plugins": [
    {
      "Name": "LCK",
      "Enabled": true
    },
    {
      "Name": "LCKTablet",
      "Enabled": true
    },
    {
      "Name": "LCKFMOD",
      "Enabled": true,
      "Optional": true
    }
  ]
}

Conditional Loading

For optional audio plugins that may not be present:
{
  "Name": "LCKFMOD",
  "Enabled": true,
  "Optional": true,
  "SupportedTargetPlatforms": ["Win64", "Android"]
}

See Also