libcgss is a helper library originally for THE iDOLM@STER Cinderella Girls Starlight Stage (CGSS). It provides both C and C++ API for HCA audio and ACB archive manipulation.
The project consists of a library (libcgss) and several other applications.
- Library (libcgss)
- Applications
- hcaenc: HCA encoder. Requires
hcaenc_lite.dll
[1]. C# equivalent - hcacc: HCA cipher converter. C# equivalent
- hca2wav: HCA decoder. C# equivalent
- hcainfo: HCA info viewer.
- utftable: UTF table schema explorer, similar to utf_tab.
- acbunpack: ACB archive unpacker. C# equivalent
- acb2wavs: Batch converter for HCAs in ACB. C# equivalent
- acb2hcas: Batch exporter for HCAs in ACB. Generates companion
.hcakey
files for vgmstream.
- hcaenc: HCA encoder. Requires
This project has a sister project DereTore. However the strength of C API is better interoperability with other libraries. The pure C# version of hcaenc and hcacc can be found in DereTore as applications.
If you are looking for a better HCA decoder for *NIX and you are a DIY person, have a look at this.
[1] Download ADX2LE from here, and use the DLL located at
tools\hcaenc_lite.dll
.
- GitHub Releases
- AppVeyor (nightly)
A quick example, from hca2wav:
#include "cgss_api.h"
int main() {
cgss::CHcaDecoderConfig decoderConfig;
decoderConfig.decodeFunc = cgss::CDefaultWaveGenerator::Decode16BitS;
decoderConfig.waveHeaderEnabled = TRUE;
decoderConfig.cipherConfig.keyParts.key1 = 0x12345678;
decoderConfig.cipherConfig.keyParts.key2 = 0x90abcdef;
try {
cgss::CFileStream fileIn(HCA_FILE_NAME, cgss::FileMode::OpenExisting, cgss::FileAccess::Read),
fileOut(WAV_FILE_NAME, cgss::FileMode::Create, cgss::FileAccess::Write);
cgss::CHcaDecoder hcaDecoder(&fileIn, decoderConfig);
uint32_t read = 1;
static const uint32_t bufferSize = 1024;
uint8_t buffer[bufferSize];
while (read > 0) {
read = hcaDecoder.Read(buffer, bufferSize, 0, bufferSize);
if (read > 0) {
fileOut.Write(buffer, bufferSize, 0, read);
}
}
} catch (const cgss::CException &ex) {
cerr << "Exception: " << ex.GetExceptionMessage() << ", code=" << ex.GetOpResult() << endl;
return ex.GetOpResult();
}
return 0;
}
Requirements:
- General:
- CMake (>=3.2)
- Windows:
- MSVC (>=19.0, VC++ 2015) or Cygwin/GCC (>=5.0) or MinGW/GCC (>=5.0)
- macOS and Linux:
- GCC (>=5.0)
For Windows users, please use CMake GUI (supplied with CMake) to generate a Visual Studio solution.
For macOS and Linux users, you can simply invoke the script build.sh
.
Remarks:
- I personally recommend you to use Cygwin rather than MinGW. The latter seems to lack support of properly handling
try...catch
statements.- Linux build is tested on Windows Subsystem for Linux (WSL) using GCC 6.2.0.
API definition can be found at docs/api/cgss-api.md.
User manual can be found at docs/manual/user-manual.md.
MIT License. See LICENSE.md.
See DISCLAIMER.md.
More tech details can be found in Behind the Scenes.