UNPKG

@akiver/csgo-voice-extractor

Version:

CLI to export players' voices from CSGO/CS2 demos into WAV files.

156 lines (101 loc) 5.79 kB
# Counter-Strike voice extractor 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.** ## Installation Download the last release for your OS from [GitHub](https://github.com/akiver/csgo-voice-extractor/releases/latest). ## Usage ### Windows ```bash 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: ```bash LD_LIBRARY_PATH="C:\Users\username\Desktop" csgove.exe ``` ### macOS > [!CAUTION] > The environment variable `DYLD_LIBRARY_PATH` must be set before invoking the program and point to the location of the `.dylib` files! ```bash DYLD_LIBRARY_PATH=. csgove demoPaths... [-output] ``` ### Linux > [!CAUTION] > The environment variable `LD_LIBRARY_PATH` must be set before invoking the program and point to the location of the `.so` files! ```bash LD_LIBRARY_PATH=. csgove demoPaths... [-output] ``` ### Options `-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. ### Examples Extract voices from the demo `myDemo.dem` in the current directory: ```bash csgove myDemo.dem ``` Extract voices from multiple demos using absolute or relative paths: ```bash csgove myDemo1.dem ../myDemo2.dem "C:\Users\username\Desktop\myDemo3.dem" ``` Change the output location: ```bash csgove -output "C:\Users\username\Desktop\output" myDemo.dem ``` ## Developing ### Requirements - [Go](https://go.dev/) - [GCC](https://gcc.gnu.org/) - [Chocolatey](https://chocolatey.org/) (Windows only) _Debugging is easier on macOS/Linux **64-bit**, see warnings below._ ### Windows _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](https://git-scm.com/), it will not work with `cmd.exe`! > [!WARNING] > The `$GCC_PATH` variable in the following steps is the path where `gcc.exe` is located. > By default, it's `C:\TDM-GCC-64\bin` when using [TDM-GCC](https://jmeubank.github.io/tdm-gcc/) (highly recommended). 1. Install `GCC` for Windows, [TDM-GCC](https://jmeubank.github.io/tdm-gcc/) is recommended because it handles both 32-bit and 64-bit when running `go build`. If you use [MSYS2](https://www.msys2.org/), it's important to install the 32-bit version (`pacman -S mingw-w64-i686-gcc`). 2. Install `pkg-config` using [chocolatey](https://chocolatey.org/) by running `choco install pkgconfiglite`. It's **highly recommended** to use `choco` otherwise you would have to build `pkg-config` and copy/paste the `pkg-config.exe` binary in your `$GCC_PATH`. 3. Download the source code of [Opus](https://opus-codec.org/downloads/) 4. Extract the archive, rename the folder to `opus` and place it in the project's root folder 5. Open the `opus/win32/VS2015/opus.sln` file with Visual Studio (upgrade the project if asked) 6. Build the `Release` configuration for `Win32` (**not `x64`** - it's important to build the 32-bit version!) 7. Copy/paste the `opus.dll` file in `$GCC_PATH` and `dist/bin/win32-x64` 8. Copy/paste the C header files located inside the `include` folder file in `$GCC_PATH\include\opus` (create the folders if needed) 9. Copy/paste the `opus.pc.example` to `opus.pc` file and edit the `prefix` variable to match your `GCC` installation path **if necessary**. 10. `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 involve `C/CGO` calls. ### macOS > [!IMPORTANT] > On macOS `ARM64`, the `x64` version of Homebrew must be installed! > You can install it by adding `arch -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)"`) 1. Install [Homebrew](https://brew.sh) **x64 version** 2. `arch -x86_64 brew install opus` 3. `arch -x86_64 brew install pkg-config` 4. `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) 5. `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. ### Linux 1. `sudo apt install pkg-config libopus-dev` 2. `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) 3. `LD_LIBRARY_PATH=dist/bin/linux-x64 CGO_ENABLED=1 GOARCH=amd64 go run -tags nolibopusfile .` ## Building ### Windows `make build-windows` ### macOS `make build-darwin` ### Linux `make build-linux` ## Credits Thanks to [@saul](https://github.com/saul) and [@ericek111](https://github.com/ericek111) for their [CSGO investigation](https://github.com/saul/demofile/issues/83#issuecomment-1207437098). Thanks to [@DandrewsDev](https://github.com/DandrewsDev) for his work on [CS2 voice data extraction](https://github.com/DandrewsDev/CS2VoiceData). ## License [MIT](https://github.com/akiver/csgo-voice-extractor/blob/main/LICENSE)