Importer des fichiers audio créés artisanalement et les spatialiser dans GTA V

10 avril 2026
  • Robin Moretti et Élise Voët

Dans ce tutoriel, nous allons voir comment importer des fichiers audio créés artisanalement et les spatialiser dans GTA V grâce à FiveM et au mod xSound.

Nous ajouterons plus tard la méthode native audio.

Prérequis

Installation du mod xSound

  1. Télécharger la dernière version de xSound depuis le dépôt GitHub.

  1. Décompresser l’archive, renommer le dossier obtenu en xsound et le placer dans le répertoire resources de votre serveur, par exemple : C:\Users<user>\Desktop\txData\FiveMBasicServerCFXDefault_BC1780.base\resources\xsound

  1. Ouvrir le fichier de configuration du serveur (server.cfg) et ajouter la ligne suivante pour s’assurer du chargement du mod : ensure xsound

Le mod est maintenant correctement installé.

Préparer le script audio dans le serveur FiveM

(optionnel si vous n’avez pas encore de dossier de script)

  1. Dans le répertoire resources de votre serveur, créez un nouveau dossier nommé audio_mod (ou le nom de votre choix).
  2. Ajoutez un fichier fxmanifest.lua dans ce dossier avec le contenu suivant :
fx_version 'cerulean'
game 'gta5'
author 'An awesome dude'
description 'Audio spatialisation demo'
version '1.0.0'

files {
    'sounds/sound-1.wav'
}

client_script 'audio_script.lua'
  1. Créez le fichier audio_script.lua (dans le même dossier) et collez‑y le code ci‑dessous :
local spawnPos   = vector3(-22.28888, 22.04243, 72.0)
local soundPos1  = vector3(spawnPos.x, spawnPos.y - 5.0, spawnPos.z - 1.0) -- ajustez `triangleWidth` si besoin
local xSound = exports.xsound
Citizen.CreateThread(function()
    -- Gestion du spawn du joueur
    exports.spawnmanager:setAutoSpawnCallback(function()
        exports.spawnmanager:spawnPlayer({
            x = spawnPos.x,
            y = spawnPos.y,
            z = spawnPos.z,
            model = 'A_M_M_Golfer_01'
        }, function()
            print("Player spawned at custom location with custom model.")
        end)
    end)
    exports.spawnmanager:setAutoSpawn(true)
    exports.spawnmanager:forceRespawn()
    -- Lecture du son spatialisé
    xSound:PlayUrlPos("mySound", "https://cfx-nui-custom_code/sounds/sound-1.wav", 1.0, soundPos1, true)
    xSound:Distance("mySound", 20.0)
    xSound:setSoundDynamic("mySound", true)
end)
-- Thread séparé pour afficher les marqueurs de debug
Citizen.CreateThread(function()
    while true do
        Wait(0)
        -- Marqueur 1 (rouge)
        DrawMarker(1, soundPos1.x, soundPos1.y, soundPos1.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                   1.0, 1.0, 1.0, 255, 0, 0, 100, false, true, 2, false, nil, nil, false)
        -- Cercle de distance d’écoute (rayon 20 m)
        local radius   = 20.0
        local segments = 64
        local angle    = (2 * math.pi) / segments
        for i = 0, segments do
            local x1 = soundPos1.x + radius * math.cos(i * angle)
            local y1 = soundPos1.y + radius * math.sin(i * angle)
            local x2 = soundPos1.x + radius * math.cos((i + 1) * angle)
            local y2 = soundPos1.y + radius * math.sin((i + 1) * angle)
            DrawLine(x1, y1, soundPos1.z + 0.2, x2, y2, soundPos1.z + 0.2, 255, 0, 0, 100)
        end
    end
end)

Attention : lorsqu’on veut faire référence à un fichier dans notre script, le chemin doit être relatif au serveur et au mod, en suivant la convention suivante : https://cfx-nui-${resourceName}/${filepath} Dans mon cas, le chemin correct est : https://cfx-nui-custom_code/sounds/sound-1.wav

  1. Enregistrez le fichier audio (sound-1.wav) dans le sous‑dossier sounds du répertoire audio_mod.
  2. Ouvrez le fichier server.cfg (à la racine du serveur) et ajoutez la ligne suivante :
start audio_mod

Test du script

  • Lancez votre serveur FiveM.
  • Connectez‑vous avec le client FiveM.
  • Le joueur devrait apparaître à la position définie, et le son sound-1.wav sera joué de façon spatiale autour du point soundPos1.
  • Les marqueurs rouges et le cercle de 20 m vous permettront de visualiser la zone d’écoute.
1
2
3