CLI to export players' voices from CSGO/CS2 demos into WAV files.
[!WARNING]
Valve Matchmaking demos do not contain voice audio data, hence there is nothing to extract from MM demos.
Download the last release for your OS from GitHub.
csgove.exe demoPaths... [-output]
By default .dll
files are expected to be in the same directory as the executable.
You can change it by setting the LD_LIBRARY_PATH
environment variable. Example:
LD_LIBRARY_PATH="C:\Users\username\Desktop" csgove.exe
[!CAUTION]
The environment variableDYLD_LIBRARY_PATH
must be set before invoking the program and point to the location of the.dylib
files!
DYLD_LIBRARY_PATH=. csgove demoPaths... [-output]
[!CAUTION]
The environment variableLD_LIBRARY_PATH
must be set before invoking the program and point to the location of the.so
files!
LD_LIBRARY_PATH=. csgove demoPaths... [-output]
-output <string>
Folder location where audio files will be written. Current working directory by default.
-exit-on-first-error
Stop the program at the first error encountered. By default, the program will continue to the next demo to process if an error occurs.
Extract voices from the demo myDemo.dem
in the current directory:
csgove myDemo.dem
Extract voices from multiple demos using absolute or relative paths:
csgove myDemo1.dem ../myDemo2.dem "C:\Users\username\Desktop\myDemo3.dem"
Change the output location:
csgove -output "C:\Users\username\Desktop\output" myDemo.dem
Debugging is easier on macOS/Linux 64-bit, see warnings below.
Because the CSGO audio library is a 32-bit DLL, you need a 32-bit GCC
and set the Go env variable GOARCH=386
to build the program.
[!IMPORTANT]
Use a unix like shell such as Git Bash, it will not work withcmd.exe
![!WARNING]
The$GCC_PATH
variable in the following steps is the path wheregcc.exe
is located.
By default, it'sC:\TDM-GCC-64\bin
when using TDM-GCC (highly recommended).
GCC
for Windows, TDM-GCC is recommended because it handles both 32-bit and 64-bit when running go build
.
If you use MSYS2, it's important to install the 32-bit version (pacman -S mingw-w64-i686-gcc
).pkg-config
using chocolatey by running choco install pkgconfiglite
.choco
otherwise you would have to build pkg-config
and copy/paste the pkg-config.exe
binary in your $GCC_PATH
.opus
and place it in the project's root folderopus/win32/VS2015/opus.sln
file with Visual Studio (upgrade the project if asked)Release
configuration for Win32
(not x64
- it's important to build the 32-bit version!)opus.dll
file in $GCC_PATH
and dist/bin/win32-x64
include
folder file in $GCC_PATH\include\opus
(create the folders if needed)opus.pc.example
to opus.pc
file and edit the prefix
variable to match your GCC
installation path if necessary.PKG_CONFIG_PATH=$(realpath .) LD_LIBRARY_PATH=dist/bin/win32-x64 CGO_ENABLED=1 GOARCH=386 go run -tags nolibopusfile .
[!WARNING]
Because the Go debugger doesn't support Windows 32-bit and the CSGO lib is a 32-bit DLL, you will not be able to run the Go debugger.
If you want to be able to run the debugger for the Go part only, you could comment on lines that involveC/CGO
calls.
[!IMPORTANT]
On macOSARM64
, thex64
version of Homebrew must be installed!
You can install it by addingarch -x86_64
before the official command to install Homebrew (arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
)
arch -x86_64 brew install opus
arch -x86_64 brew install pkg-config
cp /usr/local/Cellar/opus/1.4/lib/libopus.0.dylib dist/bin/darwin-x64
(arch -x86_64 brew info opus
to get the path)DYLD_LIBRARY_PATH=dist/bin/darwin-x64 CGO_ENABLED=1 GOARCH=amd64 go run -tags nolibopusfile .
[!WARNING]
On macOS ARM64, the Go debugger breakpoints will not work because the executable must target amd64 but your OS is ARM64.
sudo apt install pkg-config libopus-dev
cp /usr/lib/x86_64-linux-gnu/libopus.so.0 dist/bin/linux-x64
(you may need to change the path depending on your distro)LD_LIBRARY_PATH=dist/bin/linux-x64 CGO_ENABLED=1 GOARCH=amd64 go run -tags nolibopusfile .
make build-windows
make build-darwin
make build-linux
Thanks to @saul and @ericek111 for their CSGO investigation.
Thanks to @DandrewsDev for his work on CS2 voice data extraction.