Автор Тема: нужна компиляция длл  (Прочитано 4772 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
нужна компиляция длл
« : 23 Июль 2017, 14:11:30 »
есть исходник... эээ... черт знает какой язык, исходник эмулятора чипа YM2612 - который Sega Mega Drive. в архиве файлы с расширениями, может кому это подскажет что за язык:
OPN_DLL.c
OPN_DLL.def
OPN_DLL.dsp
OPN_DLL.dsw
OPN_DLL.h

кто шарит, гляньте одним глазом и подскажите как это дело собрать в dll? сам файл этот dll там есть в архиве, НО! в этом коде есть парочка косяков, которые портят всю радость. хотя возможно я просто не правильно делаю...

при использовании длл я импортирую только 4 функции, которые мне нужны:
OpenOPNDriver - что-то вроде инициализация чипа. в качестве параметра, насколько я понимаю, следует указывать количество чипов, которые будут созданы.
CloseOPNDriver - выключает этот самый чип. использую в конце своей программы.
OPN_Write - посылает в какой-то регистр какую-то команду.
PlayDACSample - поскольку проигрывание сэмплов через посылку данных через регистры OPN_Write буржуйский товарищ сделать не смог, то он добавил эту функцию для возможности проигрывания сэмплов.

так вот первая проблема заключается в OpenOPNDriver. при инициализации одного чипа OpenOPNDriver(1) - все работает без проблем. однако мне хотелось бы использовать 2 чипа, поскольку 6 каналов будет не достаточно для проигрывателя. хотелось бы 12 - два по 6. но при указании OpenOPNDriver(2) - происходит какая-то фигня. такое ощущение что частота чипа повышается, то есть звуки становятся писклявее. 3, 4, 5 и так далее - звук все выше и выше. получается вместо увеличения количества чипов эта функция производит разгон чтоль... вот где может быть ошибка в коде? как исправить?

вторая проблема связана с  PlayDACSample. если аудиосэмпл содержит сразу данные - крики там, пальба - сразу с начала файла, то все играет без проблем. ежели сэмпл имел скажем пару секунд тишины в начале файла, то проигрывание прекращается. буржуйский товарищ делал типа оптимизации чтоль... он так боялся загрузить процессор компьютера, что прикрутил это дурацкое отрубание при тишине в сэмпле. поскольку PlayDACSample должна содержать в своих параметрах размер файла, то хотелось бы чтоб эта функция играла не от начала сэмпла до тишины секундной длительности и отрубалось проигрывание, а чтоб от начала и до конца - по всему размеру сэмпла, даже если весь сэмпл тишина. чтоб не было этого экономного отрубания.

в архиве 2 ехешника с моим импортом дллки. один с OpenOPNDriver(1) - кнопка play покажет как должен звучать звук выстрела, используется FM инструмент. второй с OpenOPNDriver(2) - там звук будет искажен, из-за ускорения чтоль...

так-же в одночиповом еще две кнопки внизу - одна сэмпл, где данные сразу идут с начала файла. вторая кнопка запускает сэмпл, где в начале примерно на скунду идет тишина, то есть проигрывание прерывается после этого. а должен играть до конца.

так что кто разбирается - помогите :) а то в редакторе для дюны проигрыватель играет несколько обрезано, в случае когда дорожек в музыке больше 6 штук.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9390
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
нужна компиляция длл
« Ответ #1 : 23 Июль 2017, 14:53:56 »
кто шарит, гляньте одним глазом и подскажите как это дело собрать в dll?
если по расширению файлов не понятно - это С, проект старенький, для Visual Studio 6.0, хотя можно импортировать проект и в 2010. на более новых версиях VS сходу я думаю собираться уже не будет.

вообще всё это кусок МАМЕ, старенького, 6ти-7ми летней давности.

Оффлайн krocki

  • Пользователь
  • Сообщений: 1250
  • Пол: Мужской
  • ...:::Hacking_Craft:::...
    • Просмотр профиля
нужна компиляция длл
« Ответ #2 : 23 Июль 2017, 15:09:47 »
Цитата
на более новых версиях VS сходу я думаю собираться уже не будет.
Как говориться новое, не всегда лучше!

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1306
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
нужна компиляция длл
« Ответ #3 : 23 Июль 2017, 17:48:03 »
Компиляция ещё нужна?

Если что, то вот.
« Последнее редактирование: 23 Июль 2017, 18:05:05 от DrMefistO »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
нужна компиляция длл
« Ответ #4 : 24 Июль 2017, 00:29:00 »
нужна, но надо еще найти косяки :( а почему размер раздулся раз в десять с 36кб до 341? или оригинальная еще была дополнительно пожата?

Добавлено позже:
я вроде на рутрекере нашел эту 6.0. поставлю на закачку.

Добавлено позже:
вроде установилось и что-то там даже собирает и размер 36кб. но:
Цитата
opn_dll.c(270) : warning C4761: integral size mismatch in argument; conversion supplied
угу... и чото сломал. создавать дллку перестало.  :blush:

Добавлено позже:
хотя что-то раздупляю... там надо выбирать дебуг или релиз. мне видимо надо релиз.
« Последнее редактирование: 24 Июль 2017, 02:19:30 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
нужна компиляция длл
« Ответ #5 : 25 Июль 2017, 16:02:13 »
с отрубанием вроде получилось, хотя я не уверен насколько правильно это решение.

в коде функции:
void FillBuffer(WAVE_16BS* Buffer, UINT32 BufferSize)
я закомментировал строчки. то есть получается проигрывание не тормозится... но насколько правильно это решение по отношению к экономии ресурсов - не знаю. как повесить дебаг в этом визуал студио я не в курсе :) так бы посмотреть как часто оно обращается к этому участку. я подозреваю что один раз запустил звук - он будет "играть" тишину до закрытия программы. а мне надо чтоб играл тишину до окончания сэмпла. но вроде диспетчер задач не показывает загрузку приложения. хотя все равно по моему это не совсем верно.
if (NullSamples >= SampleRate)
{
//NullSamples = 0xFFFFFFFF;
//PauseStream(true); // stop the stream if chip isn't used
}

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1306
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
нужна компиляция длл
« Ответ #6 : 27 Июль 2017, 10:22:31 »
Ты релиз или дебаг смотрел?
Плюс, я выставил сборку в статик режиме, чтобы не было зависимостей от рантаймов.
Я собирал 17-й студией.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
нужна компиляция длл
« Ответ #7 : 27 Июль 2017, 11:59:13 »
релиз. дебаг так и вовсе 800 килобайт :) насчет зависимостей ничего не понял... так как быть со вторым чипом то? где-бы в коде это поправить, чтоб небыло того завышения звука?

вроде если поставить 88200 вместо 44100 в опциях по тону вроде бы звук становится правильным, но по моему громче и вылетает инвалид мемори аксесс при проигрывании.

потом подумал может можно оставить 1 чип, просто увеличить каналы с 6 до 12 - но не понял как ядро команды разбирает.

Добавлено позже:
то есть включение звука для канала там происходит через регистр $28 - ему шлешь параметр кейон %хххх0000 + номер канала. вот тут я не понял как ядро разбирает эту команду, чтоб раздуплить какой канал играть. ведь если я количество каналов увеличу - нужно и этот момент тоже написать.

не понятно блин. не понятно, но нужна эта опция... хочу чтоб играло солидно все каналы, а не мои нынешние огрызки :)
« Последнее редактирование: 27 Июль 2017, 12:05:57 от SeregaZ »