1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

FM звук (софтовый драйвер FM синтеза для MIDI)

Тема в разделе "Мастерская", создана пользователем Crusader Mike, 2 янв 2007.

  1. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Надеюсь здесь есть люди, которые сведущи в звуке...

    Сперва история:
    Все началось с того, что музыка в Doom-подобных играх на современных аудиокартах отвратительная и очень отличается от того, к чему все привыкли на SoundBlaster Pro (хотя лечится, например DosBox'ом). Далее, недавно запущенный Warhammer тоже продемонстрировал звучание, контрастирующее с тем, что у меня записано в памяти.
    В общем родилась у меня идея сделать драйвер, который заставил бы музыку играть так, как она играла раньше. Итого -- убил 2 дня на:
    - чтение DDK, осознание того, как устроена WDM, kernel- и user-mode driver
    - разбор исходников DosBox'а и тому подобных вещей (хреноватенько, скажем прямо написан, между прочим :-) )
    - поиск DDKSYNTH sample code, который похоже давно выкинули из DDK (это код user-mode драйвера софтверного синтезатора -- то, что мне нужно было)
    - разбор кода Doom'а

    Выяснил:
    - В исходниках Дума отсутствует все, что касается музыки (Кармак сознался, что это не ихнее и раскрывать не могут :-( )
    - каждая игра, которая использовала FM музыку SB, фактически занималась программированием синтезатора напрямую! Т.е. писала в порты которые маппились на пины OPL микросхемы! shit... И вовсе необязательно что музыка базируется на MIDI
    - надеюсь!!!! многие игры все-таки использовали схожие версии музыкального движка, базирующегося на MIDI... чтобы не ихобретать велосипед. В таком случае в таких играх надо будет ставить General MIDI, а в винде использовать данный драйвер. Т.е. идея фактически равносильна переносу музыкального движка из игры + эмуляцию OPL на уровень драйвера
    - DDKSYNTH найти практически нереально :(
    - эмуляция синтезатора на основе OPL легко выдирается из DosBox'а, осталось найти как преобразовывать MIDI-поток в команды OPL и вообще выяснить стоит ли этим заниматься.


    Сейчас вопросы:
    - используют ли игры (например Doom) MIDI для проигрывания музыки на Sound Blaster FM или при выборе 'Generic MIDI' в setup музыка играется фундаментально отличная от того, на основе чего синтезируется SB-вариант?
    - если да -- как происходит конверсия MIDI нот в вызовы на входы/порты OPL? Есть ли "общий знаменатель" или каждая игра изобретает велосипед по-своему (как следствие один и тот же MIDI, воспроизведенный движками разных игр через OPL3 будет звучать по-разному)?
    - где добыть Doom music engine исходники? ;-)
    - где добыть хоть какой-нить music engine исходники? (т.е. тот, который MIDI поток предобразовывает в вызовы/команды OPL) для ознакомления с общими принципами
    - возможно ли добыть исходники MIDI FM драйвера для винды? если такой вообще существовал (т.е. не тот драйвер в XP, который MIDI->PCM, а тот, который MIDI->OPL комманды) -- это решило бы проблему звука в играх типа Warhammer


    P.S. У меня богатый опыт программирования в Винде и почти ничего в ДОСе. Поэтому некоторые вопросы могут показаться странными :)
     
    Змей нравится это.
  2.  
  3. Low_Pressure Titanium Helmet of Musicianship owner

    Low_Pressure

    Legacy

    Регистрация:
    1 окт 2005
    Сообщения:
    8.667
    Вроде как, дело нужное, но твоя работа похожа на изобретение велосипеда.

    (с)
     
  4. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    По твоему линку:
    Я не против изобретения велосипеда, но потратив кучу времени на копание в гугле я подобного драйвера не нашел. Самое близкое, что я нашел -- это AdPlug (не драйвер, нет поддержки OPL3, и вообще не работает -- Думовские миди я им проиграть не смог)
     
  5. VorteX DrAgON Троллей не кормлю, сами сдохнут.

    VorteX DrAgON

    Legacy

    Регистрация:
    20 сен 2004
    Сообщения:
    3.050
    В общем родилась у меня идея сделать драйвер, который заставил бы музыку играть так, как она играла раньше.

    Майк, я не понял, ты хочешь, чтобы музыка звучала как на SB Pro? Хочешь повторить это пищание и скрипение FM-синтезатора? Зачем? :)

    Я понимаю, если бы ты поставил целью драйвер написать для воспроизведения MIDI из игр на манер GUS или General MIDI, или я чего-то не догоняю? :upset: Опять же, Roland VSC прекрасно с этой целью справляется имхо, а если есть SB Live, так и вообще просто замечательно
     
  6. Grue13 Ocelote.12

    Grue13

    Регистрация:
    26 апр 2006
    Сообщения:
    9.808
  7. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Майк, я не понял, ты хочешь, чтобы музыка звучала как на SB Pro? Хочешь повторить это пищание и скрипение FM-синтезатора? Зачем?


    Ага, правильно понял... только как SB Pro II (т.е. OPL3), OPL2 -- уже как бесплатный бонус. Зачем? Зачем ты играешь в старые игры? помимо всего прочего из-за ностальгии -- т.е. у тебя с ними ассоциирован набор ощущений, который мозг вспоминает при повторной игре и ты тащишься. Звук -- одна из составляющих, я не могу наслаждаться думом, если он играет не так "как тогда". Кроме того много музыки писали специально под OPL2-3 и на "правильном" синтезаторе (я уж молчу про Microsoft GS SW Synth) она "не звучит". Например музыка из Дума лучше всего, имхо, звучит на SB Pro 2... Лучше чем на гусе.
    Опять же -- я драйверов ни разу не писал... а тут еще и интересно.


    Я понимаю, если бы ты поставил целью драйвер написать для воспроизведения MIDI из игр на манер GUS или General MIDI, или я чего-то не догоняю? :upset: Опять же, Roland VSC прекрасно с этой целью справляется имхо, а если есть SB Live, так и вообще просто замечательно


    1. Нельзя звучать 'на манер General MIDI' -- General MIDI значит 'выдать midi-поток в такой-то порт, а какой синтезатор там будет подключен, так и играть будет'
    2. GUS -- достанешь спеки или эмулятор, можно будет впихнуть... :-)
     
  8. TBAPb MIA

    TBAPb

    Хелпер

    Регистрация:
    26 сен 2005
    Сообщения:
    1.930
    Crusader Mike, напиши тогда ещё для меня эмулятор Edison Gold 16 a.k.a. ESS688, а? :cry:
     
  9. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    нет проблем -- давай код эмуляции этого чипа... ;-) Я с железом не дружу совсем -- лампочку не знаю как закручивать, поэтому хакинга чипов от меня ждать не стоит.
     
  10. дядя Лёша

    дядя Лёша

    Регистрация:
    27 фев 2006
    Сообщения:
    3.285
    Crusader Mike, не знаю, поможет ли тебе. Попробуй ещё досовскую утилитку для дума - NWT. Это выдиралка/вставлялка ресурсов в вады и у неё встроенная функция проигрывания мелодий, посредством идущего в комплекте драйверка для opl синтеза. Такого же по звучанию, как и в оригинале. Но работать это всё конечно будет либо на реальном бластере, либо опять в досбоксе. Я это к тому, что может быть сам драйверок этот чем то будет полезен.
    http://ftp.ntua.gr/mirror/idgames/utils/graphics_edit/nwt103.zip - последний релиз.
    http://ftp.ntua.gr/mirror/idgames/utils/graphics_edit/nwt14b1.zip - более поздняя бета с частичной поддержкой heretic/hexen. Драйвера genmidi.op2 в ней нет - его надо доложить из вышеуказанного последнего релиза.
     
    Последнее редактирование: 4 янв 2007
  11. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    34.671
    Я не понял почему досбокс не подходит, он ведь относительно прилично звук эмулирует (Гуся конечно плохо, а вот бластер или адлиб вполне даже ничего).
     
  12. TBAPb MIA

    TBAPb

    Хелпер

    Регистрация:
    26 сен 2005
    Сообщения:
    1.930
    Dimouse Само звучание не то. Оттенок, окрас, как угодно назови.
     
  13. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    34.671
    Т.е. смысл темы в том, что Crusader Mike хочет написать более точный эмулятор? Мне кажется что без настоящей старой железяки это нереально, как не исхитряйся все равно "оттенок и окрас" будет не тот.
     
  14. дядя Лёша

    дядя Лёша

    Регистрация:
    27 фев 2006
    Сообщения:
    3.285
    Вот вот, даже у реальных железок AWE32/64 уже отличается. Чё уж об эмуляции говорить.
     
  15. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Если она с исходниками -- однозначно поможет. мне чейчас нужен код того, как MIDI преобразовывать в вызову к синтезатору (OPL2/3)

    Потому что не все затолкаешь в DosBox, потому что Doom замечательно идет в VPC (но музыка ужасная) -- вот и хочется, чтобы в винде был драйвер эмуляции OPL, а из дума музыка к нему перебрасывалась как Generic MIDI, например.

    Если код реализует точно алгоритм, заложенный в чипе синтезатора, то звук будет 100% совпадающим (при условии что MIDI поток будет нести достаточно информации, чтобы воспросизвести все манипуляции движка игры с портами синтезатора -- ох боюсь здесь не все так просто)
     
  16. R4kk00n Benched arcade playa

    R4kk00n

    Модератор

    Регистрация:
    28 мар 2005
    Сообщения:
    9.195
    Crusader Mike, я, видимо, ничего не понимаю в MIDI-протоколе, но мне кажется, что в нём вообще нет команд, занимающихся программированием FM-синтезатора...
     
  17. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Совершенно верно -- этим занимается драйвер синтезатора (или микросхема внутри оного, если поддерживается MPU-401).
    Беда состоит в том, что хотя многие игры используют MIDI для музыки, воспроизводят они ее на OPL3 по разному. У меня уже есть пару вариантов (Sierra, Sierra old, Lucas, Lucas advanced, general midi).
     
  18. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Хех... случилось две вещи:
    1. есть первый вариант синтезатора, реализованного в виде 'DirectMusic software synthesizer' (в kernel-mode потом перенесу, ибо уж больно там большой геморрой дебажиться). Даже играет, даже похоже :-) (привет Билл Гейтсу за отвратительную документацию -- лоб болит от граблей и попыток додумать недосказанное)
    2. Как я и боялся процесс преобразования MIDI-сообщений в вызовы для OPL3 может быть самым разным. Я взял алгоритм из примера fmsynth (из DDK). Звучание совершенно другое...

    Счас буду читать теорию синтеза звука, попробую алгоритм из AdPlug (правда там OPL2 эмулируется :-( ).
    Кстати, о звучании -- побаловался с параметрами, такое веселье! один раз добился звучания тонкого и высокого (ну как яйца певцу отрезать) -- мидюки думовские начали звучать так, что мне два раза пришлось из-под стола вылезать :-)

    Мужики, у кого-нить часом не завалялся код для FM синтеза? ;-)
     
  19. TBAPb MIA

    TBAPb

    Хелпер

    Регистрация:
    26 сен 2005
    Сообщения:
    1.930
    делай фронт энд и выкладывай!
     
  20. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Идея умерла :-) С ходу не вышло, а ковыряться и разбираться во всем досконально -- времени нету, да и лень подступила.
    Нашел исходники NWT, там есть код для проигрывания музыки Doom'а -- так вот эта музыка -- в MUS формате (отличном от MIDI). Код NWT инициализирует OPL немножко по-другому, чем sample от MS. Подозреваю, если подобрать инструменты как надо, то оно и зазвучит поближе к оригиналу -- зависит от того, насколько MIDI дума близок к оригинальному MUS'у.
    В общем, учитывая мои пробелы в FM синтезе -- все это не стоит выеденных свеч. :)
     
  21. Teron Lifeslayer Malkavian

    Teron Lifeslayer

    Регистрация:
    14 ноя 2004
    Сообщения:
    7.603
    Хех, все как обычно уперлось в проблему железа.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление