Skip to content

Sounds Guidelines

DonnieDice edited this page Apr 10, 2026 · 4 revisions

BLU Sound Pack Guide

This page covers the current BLU-compatible workflow for:

  • building a separate addon that registers a sound pack with BLU
  • creating a sound with low, medium, and high volume variants
  • adding personal custom files without writing your own addon

The old edit BLU files directly workflow is no longer the recommended path.


Overview

BLU supports two different integration styles:

  1. Full BLU-compatible sound pack

    • best option for addon authors
    • supports _low, _med, and _high variants
    • registers through BLU:RegisterSoundPack(...)
  2. Simple external bridge pack

    • quickest option for a single file per sound
    • registers through BLU:RegisterExternalSoundPack(...)
    • does not use BLU's 3-variant volume switching

If you want a sound pack that behaves like BLU's built-in packs, use the first option.


Create A 3-Variant Sound

Each BLU-compatible sound should use the same base name with three OGG files:

victory_low.ogg
victory_med.ogg
victory_high.ogg

Notes:

  • BLU uses the _med.ogg file as the registered base path.
  • When the player selects Low or High in BLU, it swaps to _low.ogg or _high.ogg.
  • For the cleanest compatibility, use .ogg for these 3-variant pack sounds.

Recommended export target:

  • mono or clean stereo source
  • trimmed start/end silence
  • consistent loudness across the three variants
  • keep the same exact filename stem for all three files

Example volume workflow:

  1. Export your main version as victory_med.ogg.
  2. Export a quieter copy as victory_low.ogg.
  3. Export a louder copy as victory_high.ogg.

Recommended Addon Layout

Create a separate addon folder for your pack instead of editing BLU itself.

Interface/
\-- AddOns/
    \-- MyBLUSoundPack/
        |-- MyBLUSoundPack.toc
        |-- MyBLUSoundPack.lua
        \-- media/
            \-- sounds/
                |-- victory_low.ogg
                |-- victory_med.ogg
                |-- victory_high.ogg
                |-- quest_low.ogg
                |-- quest_med.ogg
                \-- quest_high.ogg

Register A Full BLU-Compatible Pack

Use BLU:RegisterSoundPack(...) when you want BLU to treat your pack like a native multi-volume pack.

Example TOC

## Interface: 120001
## Title: My BLU Sound Pack
## Author: You
## OptionalDeps: BLU

MyBLUSoundPack.lua

Example Lua

local frame = CreateFrame("Frame")
frame:RegisterEvent("PLAYER_LOGIN")
frame:SetScript("OnEvent", function()
    local BLU = _G.BLU
    if not BLU or type(BLU.RegisterSoundPack) ~= "function" then
        return
    end

    BLU:RegisterSoundPack("my_blu_pack", "My BLU Pack", {
        my_blu_pack_victory = {
            name = "Victory",
            file = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\victory_med.ogg",
            category = "all",
            source = "BLU",
        },
        my_blu_pack_quest = {
            name = "Quest Reward",
            file = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\quest_med.ogg",
            category = "all",
            source = "BLU",
        },
        my_blu_pack_level = {
            name = "Level Up",
            file = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\level_med.ogg",
            category = "all",
            source = "BLU",
        },
    })

    if type(BLU.RefreshSoundPackUI) == "function" then
        BLU.RefreshSoundPackUI()
    end
end)

Important details:

  • Register the _med.ogg file path, not _low.ogg or _high.ogg.
  • Keep source = "BLU" so BLU applies its built-in volume variant switching.
  • category = "all" makes the sound show up for every supported BLU event.
  • Use your own unique sound IDs and pack ID to avoid collisions.

Register A Simple External Pack

Use BLU:RegisterExternalSoundPack(...) if you only want to expose direct file paths.

local frame = CreateFrame("Frame")
frame:RegisterEvent("PLAYER_LOGIN")
frame:SetScript("OnEvent", function()
    local BLU = _G.BLU
    if not BLU or type(BLU.RegisterExternalSoundPack) ~= "function" then
        return
    end

    BLU:RegisterExternalSoundPack("My Simple Pack", {
        { name = "Victory", path = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\victory_med.ogg" },
        { name = "Quest Reward", path = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\quest_med.ogg" },
        { name = "Level Up", path = "Interface\\AddOns\\MyBLUSoundPack\\media\\sounds\\level_med.ogg" },
    })
end)

Use this only when you want a simple bridge entry. BLU will play the file you register directly and will not swap between _low, _med, and _high for this API.


Personal Custom Sounds

If you are not building an addon and just want your own files available in BLU, the recommended folder is:

Interface\AddOns\BLU\user\sounds\

BLU can also resolve custom files from these common locations:

  • Interface\AddOns\
  • Interface\AddOns\sounds\
  • Interface\AddOns\BLU\
  • Interface\AddOns\BLU\sounds\
  • Interface\AddOns\BLU\user\
  • Interface\AddOns\BLU\user\sounds\
  • Interface\AddOns\BLU\media\
  • Interface\AddOns\BLU\media\sounds\

After placing the files:

  1. Open /blu
  2. Go to the Sounds tab
  3. Use Add Custom Sound
  4. Enter myfile or myfile.ogg

You can also use:

/blu addcustom myfile
/blu refresh

BLU will search the supported folders and store the resolved match in your profile.


Testing

After installing or updating your sound pack:

  1. Reload the UI with /reload
  2. Open /blu
  3. Check the sound dropdowns for your pack
  4. Test the sound at Low, Medium, and High
  5. If needed, run /blu refresh and /blu rescan

If your pack does not appear:

  • confirm BLU is loaded
  • confirm your addon is enabled
  • confirm the file paths start with Interface\\AddOns\\
  • confirm your filenames match exactly, including _low, _med, and _high
  • confirm you registered the _med.ogg file for full BLU-compatible packs

Quick Reference

Use this for full BLU behavior:

BLU:RegisterSoundPack(...)

Use this for simple direct-path bridge entries:

BLU:RegisterExternalSoundPack(...)

Clone this wiki locally