SeregaZ, сделал библиотеку, не очень хорошо, но работает.
В папке
Release: dll, lib и GEMSPlayClient.exe, которая тестирует dll (запускать GEMSPlayClient.bat как у вас).
Заголовочный файл GEMSPlayLibrary.h, функции такие:
// Инициализация. Указатели на массивы из байтов: patches, envelopes, sequences, samples.
// Возвращает 1 - если получилось инициализировать и есть хотя бы одна последовательность, иначе 0. (
int в VC++ - 4 байта)
// Размер не передаётся в оригинале, видимо как-то определяется конец.
// Каждый вызов будет очистка gemsplay_cleanup(), если не было.
int gemsplay_init(
const unsigned char* PatPtr, const unsigned char* EnvPtr,
const unsigned char* SeqPtr, const unsigned char* SmpPtr);
// Очистка выделенной памяти.
void gemsplay_cleanup(void);
// Остановка.
void gemsplay_stop(void);
// Переключать паузы.
void gemsplay_pause(void);
// Воспроизведение. Повторный вызов начнёт воспроизведение сначала.
void gemsplay_play(void);
GEMSPlayClient.exe принимает только 4 аргумента, начинается воспроизведение, Enter, пауза, Enter, продолжается воспроизведение, Enter, выход.
Не разобрался что такое song, sequences и т. п., в GEMSPlay.exe есть всякие настройки воспроизведения, я оставил значения по умолчанию.
Я не использовал статическую компоновку в dll и GEMSPlayClient.exe, поэтому требуется
распространяемый компонент Microsoft Visual C++ для Visual Studio 2015, 2017 и 2019 (
как вариант).
Надеюсь вам не надо поддерживать WinXP.
Попробуйте библиотеку и отпишитесь.