skillby SpookyPirate

skyrim-audio

Handle Skyrim audio files including FUZ, XWM, and WAV formats. Use when the user wants to inspect audio, extract voice files, create FUZ files, or convert audio formats.

Installs: 0
Used in: 1 repos
Updated: 2d ago
$npx ai-builder add skill SpookyPirate/skyrim-audio

Installs to .claude/skills/skyrim-audio/

# Skyrim Audio Module

Handle Skyrim audio file operations including FUZ, XWM, and WAV formats using Spooky's AutoMod Toolkit.

## Prerequisites

Run all commands from the toolkit directory:
```bash
cd "<TOOLKIT_PATH>"
# Example: cd "C:\Tools\spookys-automod-toolkit"
```

## Overview

Skyrim uses several audio formats:

| Format | Extension | Purpose |
|--------|-----------|---------|
| FUZ | .fuz | Combined voice audio + lip sync |
| XWM | .xwm | Compressed audio (xWMA codec) |
| WAV | .wav | Uncompressed audio |
| LIP | .lip | Lip sync data |

Voice files are typically stored as FUZ (XWM audio + LIP lip sync combined).

## Command Reference

### Get Audio Info
```bash
dotnet run --project src/SpookysAutomod.Cli -- audio info "<audio>"
```
| Input | Description |
|-------|-------------|
| `<audio>` | Path to .fuz, .xwm, or .wav file |

Output includes: File type, file size, audio data size, lip sync presence (for FUZ).

### Extract FUZ
```bash
dotnet run --project src/SpookysAutomod.Cli -- audio extract-fuz "<fuz>" --output "<dir>"
```
Extracts FUZ into XWM and LIP components.

| Option | Description |
|--------|-------------|
| `--output`, `-o` | Output directory |

Output files:
- `filename.xwm` - Audio data
- `filename.lip` - Lip sync data (if present)

### Create FUZ
```bash
dotnet run --project src/SpookysAutomod.Cli -- audio create-fuz "<xwm>" --output "<file>" [options]
```
| Option | Description |
|--------|-------------|
| `<xwm>` | Path to XWM audio file |
| `--output`, `-o` | Output FUZ file path |
| `--lip` | Path to LIP file (optional) |

### Convert WAV to XWM
```bash
dotnet run --project src/SpookysAutomod.Cli -- audio wav-to-xwm "<wav>" --output "<file>"
```
| Option | Description |
|--------|-------------|
| `<wav>` | Path to WAV file |
| `--output`, `-o` | Output XWM file path |

**WAV Requirements:**
- PCM format
- 16-bit
- Mono or stereo
- 44100 Hz recommended for voice

## Common Workflows

### Inspect Voice File
```bash
# Check FUZ file info
dotnet run --project src/SpookysAutomod.Cli -- audio info "./Sound/Voice/MyMod.esp/NPC/Line01.fuz"

# Check if it has lip sync data
# Output will show hasLipSync: true/false
```

### Extract Existing Voice Files for Analysis
```bash
# 1. Extract from BSA if needed
dotnet run --project src/SpookysAutomod.Cli -- archive extract "SomeMod.bsa" --output "./Extracted" --filter "sound/*"

# 2. Extract FUZ to components
dotnet run --project src/SpookysAutomod.Cli -- audio extract-fuz "./Extracted/Sound/Voice/SomeMod.esp/NPC/Line01.fuz" --output "./AudioDebug"

# Creates:
#   ./AudioDebug/Line01.xwm
#   ./AudioDebug/Line01.lip (if present)
```

### Create Voice Line (Full Workflow)
```bash
# 1. Record/obtain WAV file (44100 Hz, 16-bit, mono recommended)

# 2. Convert WAV to XWM
dotnet run --project src/SpookysAutomod.Cli -- audio wav-to-xwm "./Source/Line01.wav" --output "./Audio/Line01.xwm"

# 3. Generate LIP file (requires FaceFX or external tool - not included)
#    Or use existing LIP from similar dialogue

# 4. Create FUZ with lip sync
dotnet run --project src/SpookysAutomod.Cli -- audio create-fuz "./Audio/Line01.xwm" --lip "./Audio/Line01.lip" --output "./Sound/Voice/MyMod.esp/NPC/Line01.fuz"

# Or without lip sync (for sound effects)
dotnet run --project src/SpookysAutomod.Cli -- audio create-fuz "./Audio/Line01.xwm" --output "./Sound/Voice/MyMod.esp/NPC/Line01.fuz"
```

### Create Sound Effect (No Lip Sync)
```bash
# 1. Convert WAV to XWM
dotnet run --project src/SpookysAutomod.Cli -- audio wav-to-xwm "./Source/effect.wav" --output "./Sound/FX/MyMod/effect.xwm"

# Or package as FUZ without LIP (some mods prefer this)
dotnet run --project src/SpookysAutomod.Cli -- audio wav-to-xwm "./Source/effect.wav" --output "./temp/effect.xwm"
dotnet run --project src/SpookysAutomod.Cli -- audio create-fuz "./temp/effect.xwm" --output "./Sound/FX/MyMod/effect.fuz"
```

### Batch Extract Voice Files
```bash
# Extract all FUZ files from a mod's BSA
dotnet run --project src/SpookysAutomod.Cli -- archive extract "VoiceMod.bsa" --output "./Extracted" --filter "*.fuz"

# Then extract each FUZ individually to analyze
# (Loop through files in script)
```

## Voice File Organization

Skyrim expects voice files in specific locations:
```
Data/
  Sound/
    Voice/
      MyMod.esp/              # Must match plugin name exactly
        NPC_EditorID/         # Must match NPC's Editor ID
          DialogueTopic_ResponseNumber.fuz
```

Example path:
```
Data/Sound/Voice/MyMod.esp/MerchantBob/DialogueMerchantGreeting_00001234_1.fuz
```

### Voice File Naming Convention
```
<TopicEditorID>_<FormID>_<ResponseNumber>.fuz
```
- `TopicEditorID` - The dialogue topic's Editor ID
- `FormID` - 8-digit hex form ID of the dialogue response
- `ResponseNumber` - Response index (usually 1)

## FUZ File Format

FUZ files combine audio and lip sync:
```
Header:
  Magic: "FUZE" (4 bytes)
  Version: uint32
  LIP size: uint32

Data:
  LIP data: [LIP size bytes]
  XWM data: [remaining bytes]
```

## Audio Recommendations

### For Voice Lines
- Sample Rate: 44100 Hz
- Bit Depth: 16-bit
- Channels: Mono (recommended) or Stereo
- Format: PCM WAV before conversion

### For Sound Effects
- Sample Rate: 44100 Hz or 22050 Hz
- Bit Depth: 16-bit
- Channels: Mono or Stereo depending on effect
- Format: PCM WAV before conversion

### For Music
- Sample Rate: 44100 Hz
- Bit Depth: 16-bit
- Channels: Stereo
- Format: Use XWM or vanilla formats

## Limitations

This module **CAN**:
- Read FUZ/XWM/WAV file information
- Extract FUZ to components
- Create FUZ from components
- Convert WAV to XWM

This module **CANNOT**:
- Generate LIP (lip sync) files
- Convert XWM back to WAV
- Edit audio content
- Generate voice from text

For LIP generation, use:
- **FaceFX** (included with Creation Kit)
- **LipGen** community tools
- **xVASynth** for AI voice generation (separate tool)

## Important Notes

1. **LIP files required for good lip sync** - Without LIP, NPCs won't move lips
2. **Path must match plugin name** - `Sound/Voice/PluginName.esp/`
3. **NPC folder must match Editor ID** - Case sensitive
4. **FUZ preferred for voice** - Combines audio and lip sync cleanly
5. **Use `--json` flag** for machine-readable output when scripting

## JSON Output

All commands support `--json` for structured output:
```bash
dotnet run --project src/SpookysAutomod.Cli -- audio info "./Sound/Voice/MyMod/Line01.fuz" --json
```

Example response:
```json
{
  "success": true,
  "result": {
    "fileName": "Line01.fuz",
    "type": "FUZ",
    "fileSize": 45678,
    "audioSize": 42000,
    "hasLipSync": true,
    "lipSyncSize": 3678,
    "sampleRate": 44100,
    "channels": 1,
    "bitsPerSample": 16
  }
}
```

Quick Install

$npx ai-builder add skill SpookyPirate/skyrim-audio

Details

Type
skill
Slug
SpookyPirate/skyrim-audio
Created
6d ago