Есть игра - Metaltech: Battledrome, сама игра мне не очень интересна, но очень понравилась музыка. К сожалению, в игре нет Sound Test, чтобы можно было послушать музыку.
Захотелось попытаться разобраться, можно ли запустить музыку отдельно от игры. В старых играх музыка часто работала через драйвер, который часто представлял из себя исполняемый файл. У меня сразу пало подозрение на SOUNDPLY.EXE. При запуске без аргументов ничего не происходит, программа ничего не пишет. Разобрался, музыка лежит в папке "SOUND", файлы с расширением "*.HMP". Попробовал открыть файл HMP при помощи SOUNDPLY, то есть, написал в командной строке "soundply sound\rock2.hmp", снова ничего не произошло.
Решил проверить в HEX-редакторе SOUNDSET.EXE - она играет музыку при проверке настроек звуковой карты. Поискал там упоминания "SOUNDPLY". По адресу 0xF4CA нашлось такое: "soundply.exe %s %s %s %s %s %s", похоже на какие-то аргументы, похоже их должно быть 6 штук. Попробовал выполнить "soundply 1 2 3 4 5 6" (да, аргументы взял просто "от балды") - программа выдала ошибку, уже какой-то прогресс. Была надежда, что какой-то один из аргументов - путь к файлу с музыкой. Честно говоря, не знаю как в DOS посмотреть, с какими аргументами там запущена программа, поэтому написал простенькую программу, которая выводит на экран, с какими аргументами она запущена. Заменил SOUNDPLY.EXE на свою программу. Получились такие аргументы: E016 220 1 7 A002 388. В принципе, смысл понятен, E016 - тип драйвера для воспроизведения звуков (есть такая строчка в RESOURCE.CFG), 220 - адрес Sound Blaster, 1 - DMA, 7 - IRQ, A002 - тип драйвера для воспроизведения музыки (опять же, из RESOURCE.CFG), 388 - адрес OPL2.
Попробовал запустить SOUNDPLY с такими аргументами - заиграла ту же музыку, что в SOUNDSET. Заметил еще, в RESOURCE.CFG есть строчка "midiFile=sound\rock1.hmp", если ее поменять, то начинает воспроизводится другая музыка (та, к которой указан путь).
Вывод: SOUNDPLY играет только ту музыку, что указана в RESOURCE.CFG. SOUNDPLY используется только для проверки настроек в SOUNDSET - при удалении\переименовании файла SOUNDPLY.EXE в самой игре звук\музыка не пропадает.
Можно слушать музыку через SOUNDPLY, но для того, чтобы послушать другую музыку, нужно отредактировать RESOURCE.CFG. А сложно ли модифицировать программу так, чтобы она брала имя файла из аргументов коммандной строки, а не из файла?
Мне уже на другом форуме предложили решение - сделать на каждую мелодию отдельный BAT-файл и отдельный RESOURCE.CFG, которые разложены по отдельным папкам (точнее, это уже сделали за меня), плюс отдельный BAT-файл для запуска самой SOUNDPLY. Правда метод мне видится все-таки слишком костыльным.