Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libADLMIDI] xmi playing as dosbox does #294

Closed
alexeik opened this issue Sep 10, 2019 · 23 comments
Closed

[libADLMIDI] xmi playing as dosbox does #294

alexeik opened this issue Sep 10, 2019 · 23 comments
Labels
Dependency-side Issue related to one of dependent library and repository which is too specific to be on PGE-Project Off-Project Questions and reports are indended for another project or dependency

Comments

@alexeik
Copy link

alexeik commented Sep 10, 2019

Please maybe is it possible to emualate? to dump xmi files to wav with nostalgia.

@Wohlstand
Copy link
Member

Wohlstand commented Sep 10, 2019

You can use libADLMIDI for that: https://github.com/Wohlstand/libADLMIDI .
Compile it with enabling of MIDIPLAY tool and then, you'll be able to directly convert any MIDI file into WAV quickly. The libADLMIDI synthesizer is used in PGE as one of MIDI synthesizers together with libOPNMIDI and others.

@Wohlstand
Copy link
Member

One note: for your XMI you'll also have AD and OPL banks. To use them in libADLMIDI as side-load, please convert any of these banks into WOPL format. Here is a luck if your bank is already in a set of embedded libADLMIDI's banks

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

can we talk on russian?

@Wohlstand
Copy link
Member

Да конечно же! 🦊 Зачем мучиться и говорить на чужом языке, когда можно спокойно на своём 😜

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

:)
Слушай, да прикольно, что тут наши из города резинового.
Я тут делаю мод для openra платформы на дюну2.
ВОт пришел к тому, что нету софтовых эмуляторов с такой же эмуляцией как dosbox.
хожу уже спрашиваю, кто может чем помочь.

мне нужно прогнать через софт аналогичный dosbox, но еще и дамп сделать этой xmi
с твоей библиотекой , мне не понятно, как про AD & OPL банки.
и вообще как достичь результата)
я PGE music player то поставил не сразу, притом что сам программер.

@Wohlstand
Copy link
Member

Ну так libADLMIDI использует DosBox-овский эмулятор под капотом как один из, также он использует эмулятор Nuked OPL3, который максимально точно эмулирует OPL3-чип. Будет звучать не только как DosBox, но и даже лучше - как реальный OPL3-чип!

Кстати, лучше таки перемещю задачу прямо в libADLMIDI-шную репу, там как раз по теме будет.

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

Тогда помоги:)
у меня среды для компиляции нету в windows 7.
я даже в банках не разбираюсь.
может, что скажешь по этой xmi приложу ее сюда.
чтобы просвятить меня.

https://youtu.be/FEF-Nk025-c
вот как выглядят разные проигрышы. в этом видео два видоса.
первая часть OPL , меня интересует. это запись с dosbox сделана.

dune0.zip

@Wohlstand
Copy link
Member

У тебя мультидорожный XMI-файл, т.е. в одном файле запаковано несколько мелодий одновременно, мне придётся его засколоть на части для начала через XMI2MIDI...

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

это не важно, про много дорожек.
я и сам поколоть могу.
дело в звуке.

@Wohlstand
Copy link
Member

Wohlstand commented Sep 10, 2019

Покопал, нашёл, что кроме XMI, есть ещё формат ADL:
http://www.shikadi.net/moddingwiki/ADL_Format
Это, скорее всего, что-то близкое к IMF, который представляет из себя цепочку OPL-регистров, последовательно отправляемых на чип. А тут я нашёл полный пакет всей музыки к игре: http://www.vgmpf.com/Wiki/index.php/Dune_II:_The_Building_of_a_Dynasty_(DOS)
А вообще, мне будет очень полезно добавить ADL-формат в OPL3-BE, чтобы можно быть выдирать инструменты из этих файлов, чтобы потом можно было собрать GM-банк и играть уже MIDI-файлы с тем же звучанием, что и то, что ты сказал. Странно они решили, видимо не понравился им AIL-движок, через который XMIшки играются на OPL-чипе...

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

Тут понимаешь, та ссылка на уже оцифрованные,это известная штука)
Но там только 3хх подобны dosbox ,но они отличаются!
это видно на примере introduction музыки.
ADL в дюне2 тоже есть, там 4 формата миди под разные железки лежат.
alfx.drv algdig.adv dune0.adl dune0.c55 dune0.pcs dune0.tan dune0.xmi dune1.adl dune1.c55 dune1.pcs dune1.tan dune1.xmi dune10.adl dune10.c55 dune10.pcs dune10.tan dune10.xmi dune11.adl dune11.c55 dune11.pcs dune11.tan dune11.xmi dune12.adl dune12.c55 dune12.pcs dune12.tan dune12.xmi dune13.adl dune13.c55 dune13.pcs dune13.tan dune13.xmi dune14.adl dune14.c55 dune14.pcs dune14.tan dune14.xmi dune15.adl dune15.c55 dune15.pcs dune15.tan dune15.xmi dune16.adl dune16.c55 dune16.pcs dune16.tan dune16.xmi dune17.adl dune17.c55 dune17.pcs dune17.tan dune17.xmi dune18.adl dune18.c55 dune18.pcs dune18.tan dune18.xmi dune19.adl dune19.c55 dune19.pcs dune19.tan dune19.xmi dune2.adl dune2.c55 dune2.pcs dune2.tan dune2.xmi dune20.adl dune20.c55 dune20.pcs dune20.tan dune20.xmi dune3.adl dune3.c55 dune3.pcs dune3.tan dune3.xmi dune4.adl dune4.c55 dune4.pcs dune4.tan dune4.xmi dune5.adl dune5.c55 dune5.pcs dune5.tan dune5.xmi dune6.adl dune6.c55 dune6.pcs dune6.tan dune6.xmi dune7.adl dune7.c55 dune7.pcs dune7.tan dune7.xmi dune8.adl dune8.c55 dune8.pcs dune8.tan dune8.xmi dune9.adl dune9.c55 dune9.pcs dune9.tan dune9.xmi duneinit.xmi mt32mpu.adv pasdig.adv pcsound.drv pcspkr.adv sbdig.adv sbpdig.adv tandy.adv

Вот содержимое папки со звуками. Даже 5 форматов одного и того же.
ADL это для железок ADLIB сделано.
dosbox же делает это через FM-синтез через эмуляцию OPL.
OPL это sound blaster железка.

@Wohlstand
Copy link
Member

та ссылка на уже оцифрованные

Там есть "Game Rip", внимательно смотри, это я имел ввиду

@Wohlstand
Copy link
Member

Wohlstand commented Sep 10, 2019

ADL это для железок ADLIB сделано.
dosbox же делает это через FM-синтез через эмуляцию OPL.

Лол! 🤣
AdLib это ПЕРВАЯ карта на FM-синтезе (https://ru.wikipedia.org/wiki/AdLib), и которая использует чип OPL2. Первые SoundBlaster тоже использовали OPL2, но потом они стали использовать OPL3 (начиная с SoundBlaster Pro).

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

GameRip тоже проверял. там Inroduuction тоже не тот, как в dosbox.
Ну какая то история есть, кто первый:) у меня был SB16.

@Wohlstand
Copy link
Member

Чипы OPL2 и OPL3 совместимы между собой, OPL3 отличается дополнительными фичами и новыми режимами работы, а так, полностью идентичен чипу OPL2. У меня самого SB16 был, и он же есть. А так, пока спеки на ADL-файлы нету, попробую сделать кое-какой хак и получить WOPL-банк, на котором всё будет звучать как надо 🦊 😉

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

То есть , ты отталкиваешься именно от ADL файлов?
Я думал от XMI.

@Wohlstand
Copy link
Member

XMI это всего лишь ноты, FM-инструментов не содержат. Обычно для XMI-файлов FM-инструменты лежат в файлах AD или OPL, а именно в этой игре они поместили их в ADL-файлы, которые вовсе не похожи на то, что использовалось в библиотеке AIL (аудиобиблиотека, от которой и пошли XMI-файлы).

@alexeik
Copy link
Author

alexeik commented Sep 10, 2019

Ого, спасибо за подробности!
А , что за игровой движок ты делаешь? на vogons увидел твою тему.
https://www.vogons.org/viewtopic.php?f=9&t=48512&p=504839

@Wohlstand
Copy link
Member

PGE-Project это он и есть, в комплекте тут, в этом проекте, в папке Engine 🦊

@alexeik
Copy link
Author

alexeik commented Sep 11, 2019

Получаетя, что нету дампов музыки в формате OPL в свободном доступе?
я тут на vogons пообщался с хозяином. Он просвятил в xmi формате, что это для MT-32 синтезаторов.Поэтому я и не мог из этих xmi получить , ТО что слышу в DOSBOX.

Хотел бы еще спросить, в dune0.xmi там идут всякие треки после самого длинного трека.
Сейчас прослушал три штуки, оказывается эти все "после" какой то набор звуков одинаковый в каждом XMI.
Получается, там можно хранить разные звуки переключаясь между ними по номер трека?

Мне тут одна личность, сделала DRO =DosBox Raw OPL дамп.
у меня DRO файл. Приложил. Я его проиграл в winamp+in_adlib плагин, проигралось, но не так прям как в dosbox. Но это самое близкое.
dune2_000.dro.zip

CREATIVE LABS WAVEBLASTER OWNERS:

  As of 09/22/93 this patch has been updated to support Sound Blaster 16     
  and Wave Blaster owners.  To receive mixed sound support (digitized  
  sound from the SB16, and music from the Wave Blaster) do the following:

  1.  Follow steps 1 - 3 as shown above.
  
  2.  In the SETUP program assign sound (music) option to 
  Sound Canvas (General MIDI), sound effect option to SBPRO, and 
  digitized option to SBPRO.
  
  3.  After exiting SETUP.EXE, copy the files WAVESET.BAT and WAVESET.DAT
  to your LANDS of LORE directory.

  4.  Type WAVESET anytime you wish to play DUNE II in
  Wave Blaster/SB16 mode.         

-Westwood Studios Audio Department-

Поможет ли это ? что за WAVESET

Оставлю это тут:
soundChunk[Sound_CreditsTick] = loadMixFromADL("DUNE1.ADL", 52, 4*MIX_MAX_VOLUME); soundChunk[Sound_Tick] = loadMixFromADL("DUNE1.ADL", 38);

`
sdl2::mix_chunk_ptr SFXManager::loadMixFromADL(const std::string& adlFile, int index, int volume) const {

auto rwop = pFileManager->openFile(adlFile);
auto pSoundAdlibPC = std::make_unique<SoundAdlibPC>(rwop.get(), AUDIO_FREQUENCY);
pSoundAdlibPC->setVolume(volume);
sdl2::mix_chunk_ptr chunk{ pSoundAdlibPC->getSubsong(index) };

return chunk;

}

Mix_Chunk* SoundAdlibPC::getSubsong(int Num) {
Uint8* buf = nullptr;
int bufSize = 0;
bool bSilent = true;

playTrack(Num);

do {
    bufSize += 1024;
    if((buf = static_cast<Uint8*>(SDL_realloc(buf, bufSize))) == nullptr) {
        THROW(std::runtime_error, "Cannot allocate memory!");
    }

    memset(buf + bufSize - 1024, 0, 1024);

    SoundAdlibPC::callback(this, buf + bufSize - 1024, 1024);

    bSilent = true;
    for(Uint8* p = buf + bufSize - 1024; p < buf + bufSize; p++) {
        if(*p != 0) {
            bSilent = false;
            break;
        }
    }

    if(bufSize > 1024*1024*16) {
        SDL_Log("SoundAdlibPC::getSubsong(): Decoding aborted after 16MB have been decoded.");
        break;
    }

} while(isPlaying() || !bSilent);

Mix_Chunk* myChunk;
if((myChunk = static_cast<Mix_Chunk*>(SDL_calloc(sizeof(Mix_Chunk), 1))) == nullptr) {
    return nullptr;
}

myChunk->volume = 128;
myChunk->allocated = 1;
myChunk->abuf = (Uint8*) buf;
myChunk->alen = bufSize;
return myChunk;

}
`

Смотри, я нашел в проекте dunelegacy , код, который читает музыку из ADL файла.

Приложил сюда исходник этих двух файлов.
adlib.zip

@Wohlstand
Copy link
Member

Давай продолжать беседу здесь: Wohlstand/OPL3BankEditor#158
Ибо первым делом такие вещи больше относятся к libADLMIDI и OPL3-BE, а PGE-Project это лишь проект, который использует libADLMIDI в составе, но задача сама относится именно к самому libADLMIDI, который и есть ядро проигрывания музыки на OPL3-чипе, и к OPL3-BE как к редактору, который способен работать с такими инструментами.

@Wohlstand
Copy link
Member

Wohlstand commented Sep 11, 2019

adlib.zip

Попробую-ка прикрутить эту штуку к libADLMIDI и посмотрим, как он будет исполнять музыку в них...

@Wohlstand Wohlstand added Dependency-side Issue related to one of dependent library and repository which is too specific to be on PGE-Project Off-Project Questions and reports are indended for another project or dependency labels Sep 17, 2019
@Wohlstand
Copy link
Member

Wohlstand commented Sep 17, 2019

Закрываю, т.к. эта задача по факту относится к другому проекту/зависимости, и ни как не соотносится с самим PGE-проектом. Обсуждение перенесено в соответствующий репозиторий.

Closing as this issue in fact is related to different project/dependency and can't be affiliated with PGE-Project itself. The discussion has been moved into a specific repository.

Wohlstand/OPL3BankEditor#158

@Wohlstand Wohlstand changed the title xmi playing as dosbox does [libADLMIDI] xmi playing as dosbox does Sep 17, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Dependency-side Issue related to one of dependent library and repository which is too specific to be on PGE-Project Off-Project Questions and reports are indended for another project or dependency
Projects
None yet
Development

No branches or pull requests

2 participants