Показать сообщение отдельно
Старый 27.12.2017, 17:58   #1
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию Visual Studio 6.0 и звук

совершенно забыл спрашивал ли я тут на форуме или нет. пересоздам тему - мало ли вдруг кто подскажет

не разбирается ли кто в Visual Studio 6.0? есть исходники одной библиотеки, которая худо бедно эмулирует звуковой чип - FM - для приставки Sega Mega Drive 2. использовал в своем проекте (другой язык программирования) и был щаслив по самые помидоры... НО! в этой библиотеке есть пару маленьких недочетов.

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

2. главная проблема. использую эту библиотеку для проигрывания треков аудиодрайвера GEMS для игр приставки. этот драйвер с теми или иными модификациями использовался на множестве игр. краткое объяснение: FM каналов на чипе 6 штук. причем один из них - 3 - может работать как обычный, но может и уходить в специальный режим проигрывания. некий Ch3Mode - не объясню что делает, да и не важно. кароче звук там звучит по иному. например противный звук соник танка в игре Dune Battle For Arrakis. так-же 6 канал тоже с прибабахом - может быть как стандартный FM синтезированный звук, а может проигрывать аудио сэмпл. то есть или или. ну кароче 6 дорожек. плюс еще 4 (хотя правильней было бы наверное 3) - шумовых канала PSG. где 3 канала тон, а 1 канал шумовой - шипение, или там скажем тыц тыц тыц от тарелки на барабанах. или короткий шум, который можно воспринять как рабочий барабан. ну не суть... проблема заключается в том, что всего получается 10 каналов в сумме, но по факту дорожек в GEMS может быть 16. просто играются они по приоритету. у кого выше приоритет того и тапки. и там нет порядка, что типа 5 каналов у песни: 1, 2, 5 это FM каналы, а 3 и 4 это PSG. кароче динамическое перераспределение каналов. воспроизвести такую динамическую фигню я не смог. точнее для PSG как-то смог родить. куча грязного кода, и я не представляю сейчас по прошествии года что я там наваял. но работает и довольно таки близко к оригиналу. оооочень грязный код для FM все гораздо хуже и родить подобную динамическую фигню я не смогу.

вот тут-то и помогла бы эта библиотека, а именно тот момент, что в ней можно задействовать 2 чипа FM. то есть я смог бы переназначить каналы, идущие в песни четко по их номерам и использовать в двух разных чипах. типа 1,2,3,4,5,6 будут играть соответственно в 1,2,3,4,5,6 канале первого FM. а 7-12 треки в песне в 1-6 канале второго чипа. то есть если скажем в 3 дорожке песни идет на самом деле PSG а не FM - то просто не использовать 3 канал первого чипа. это могло бы поднять мою полифонию до 12 каналов. вместо нынешних 6. то есть сейчас я играю только 6 дорожек из песни. конечно 12 это не все 16 - но 16 трековых песен мне практически не попадалось. так что 12 хватило бы за глаза.

вот это все была преамбула. затык библиотеки в том, что когда там включаешь это самое второе ядро - происходит какая-то неведомая херня и оба ядра начинают играть так, как будто там происходит удвоение частоты работы процессора. звук разительно завышен. в архиве два ехе файла 1 chip.exe и 2 chips.exe. следует собрать дллку в Visual Studio, чтобы она лежала рядом с этими ехешками и запустить эти ехешки. в 1 чиповом при нажатии плей играет солидно, как оно должно звучать. звук выстрела гранатомета из Alien 3. в 2 chips.exe этот звук завышен. там точно те-же параметры, что и в первом - просто включено 2 ядро. всего одна функция разницы и трындец. весь эффект испорчен. если включать 3 ядро - звук еще выше по частоте. и так по нарастающей. как бы исправить это умножение частоты так сказать? нужно чтоб была возможность использовать 2 ядра, и чтоб они работали верно, то есть проигрывали солидно - как полагается.
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием