Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Sharpnull

Страницы: Назад 1 ... 93 94 95 96 [97] 98 99 100 101 ... 151 Далее
2882
Обновил github и сборку: https://github.com/infval/GEMSPlay/releases.
* Применил исправления от Valley Bell за исключением второй проверки на GEMS 2.8.
* Добавил функцию void gemsplay_set_gems28mode(int enabled);, чтобы включать GEMS 2.8 режим. Нужно вызывать перед gemsplay_play(), если передать 1 (или != 0 значение) - включение 2.8, если 0 - отключение. Но, так как я оставил вторую проверку, если программа определить режим как 2.8, то установка 0 или первое определение в gemsplay_init() не повлияют. По-хорошему нужно убрать вторую проверку, чтобы точно форсировать нужный режим, тогда придётся и в GEMSPlay плеер добавить такую команду.
* Добавил два "грязных" исправления с Comix Zone и Nightmare Circus (до этого в код не добавлял на github). Обернул их в макрос препроцессора #ifndef DISABLE_GEMSPLAY_DIRTY_FIXES, чтобы выделить и можно отключить во время компиляции, если добавить в настройки проекта.
Когда пытался разобраться в писке/шуме после конца трека, то попробовал передавать тишину после окончания трека, потому что там постоянно вызывается эмуляция YM2612, даже после завершения трека. Оказалось, что в треках только с DAC сэмплами, а точнее в какой-то игре NBA где только голос человека, определение остановки срабатывает раньше, при этом трек играет и пауза работает после неправильного определения конца, это влияет на автоматическое переключение треков (вкл. - клавиша 'A'). В принципе, если добавить ещё проверки, то можно определять конец точнее. Для вашей программы это не важно, так как вам не нужно знать конец.

2883
Общий / Анонсирована Streets of Rage 4
« : 08 Апрель 2020, 23:52:38 »
блин, странновато смотрятся пиксели с фонами высокого разрешения... зачем это они?..
Это же дополнительные персонажи как бонус, не будут же они всё перерисовывать ради них, а если персонажей перерисовать, то получится не как было.
сварганили скучную игру и решили выехать на ностальгии?
Странное предположение. Никто не будет покупать скучную игру ради доп. персонажей из старых игр.

2884
может создал, но на первое время было приватным?
Скорее локально (на компьютере) сделал коммит, push на github 7 апреля (https://api.github.com/repos/ValleyBell/GEMSPlay - pushed_at: "2020-04-07T21:48:08Z", это по UTC).
на том сайте с документацией по ym2612 указано что 7 бит в любом случае illegal
Дело в том, как железо реагирует, а не что формально.
Если всё нормально до шума, и нужно просто его обрезать, то возможно дело в остановке трека, которого не происходит из-за этого бита.

2885
SeregaZ, проблема осталась как и со 2-м грязным фиксом - снятием 7-го бита. Я проверил, скомпилировав его код с github'а, на всякий случай.
Интересно, что код там лежит с нормализованным переносом (LF, а не CRLF как в Windows), из-за этого я не смог сделать апгрейд проекта с VC++6 до VS2019. Это если скачивать с github, а если клонировать проект, то преобразование идёт до CRLF.
Интересно, что новые коммиты теперь датируются не 7 апреля, а 4 апреля. Получается он ещё тогда исправил, но на github добавил только вчера.

2886
я так понимаю мне второй вариант из архива нужен?
Да.
Забыл сказать, что это исправление с битами тоже "неправильное". Если движок GEMS пропускает 0xFF в железо, в нашем случае в эмуляцию звука, то так и должно быть и значит ошибка где-то ещё.

Добавлено позже:
а нет, чото он правил. смотрю на гитхабе какие-то обновки.
Да... Теперь нет второй проверки на Gems 2.8, но изменилась первая. Число 0x200000 теперь стало 0x80000 как в ASM. Jump для VGM.
Сэмплы исправил, увеличил размеры переменных, но не добавил смещение указателя DstAddr из-за которого был треск.
Исправил UINT16 ChnMask; о котором я говорил, но он всё равно не влиял.
И ещё есть новые фиксы.

Придётся проверять.

Добавлено позже:
Так. Он наверно не исправил, потому сам не проверил.
* DstAddr += SmplLeft; не добавил, без которого треск, мы "арию" в Nightmare Circus - The Jester отдельно слышали.
* UINT8 LoopID = 0; из loader.c не исправлен (для VGM).
* Зря он убрал вторую проверку:
DoGems28 = Gems28Mode;
if (stseqx[0] > 1) // [extra code to detect GEMS 2.8]
{
if (stseqx[3] <= 1 && stseqx[6] <= 1)
DoGems28 = 0x01;
}
В кривом (наверно) банке Nightmare Circus теперь все треки неправильные, потому что первая проверка срабатывает один раз и она не сработала, но дополнение к ней помогло определить в вырезанной дорожке 020, о которой говорил недавно.
* Сэмплы (DAC), которые не останавливались из-за CLIPLOOP(), не исправил, хотя там по ASM-коду понятно.

2887
модуляция по сути заглушка там 00 00 00. следовательно модуляция никак не должна влиять на звук - ведь там нули... но если её отрубить, то звук кардинально меняется. это для меня разрыв шаблона
Про это не знаю.
нельзя ли чтоб dll отсекала 7 бит?
Снимаю 7-й бит здесь:
//noteonfm3:
ChnPat = CHPATPTR + 1; // patch pointer + 1 (past type byte)
if (noteon.voice == 2) // channel 3 ?
{
ChnPat[1] &= 0x7F; // <<< Добавил >>>
Ch3ModeReg = ChnPat[1] | 0x15; // yes - add CH3 mode bits to DACME's reset cmd
FMWrgl(0x27, ChnPat[1] | 0x05); // KEEP TIMER A ENABLED AND RUNNING, but not reset
}
Там есть другие места где используется этот байт, вроде бы бит там не должен влиять, но если найти загрузку patch буфера, то можно всегда снимать 7-й бит. Интересно, что в эмуляции YM2612 похоже проверяются оба бита, как-то странно там.

Про Gems 2.8. В этих двух треках 019 и 020 не определяется как 3 байта совсем, на слух это не заметно. Значит не всегда срабатывает, возможно позже добавлю флаг в gemsplay_init(). Добавил сборку в которой, если не получилось определить в первой проверке, то ставится режим 2.8. Для теста.

Оставил деление на 4.4 для Comix Zone, но на GitHub я так и не добавил это исправление.

2888
Запустите игру сами до заставки "Match Race" и слушайте. Если проблема не будет слышна, значит комп у меня такой.
У меня нормально в Final Lap. Посмотрите потребление CPU в диспетчере задач, у меня в начале трека 8% из 25% (4 ядра), после 11 секунд уже 15%. Это я ещё без фильтров, вместе с HQ 4x в пике около 35%, значит уже 2 ядра под нагрузкой, но тормозов звука всё равно нет. У FCEUX на протяжении трека 6%. Если у вас слабый процессор, а у меня он старый, то тормоза вполне возможны. Стоить проверить не процент, а что одно из ядер процессора загружено полностью. Если подтвердится, то репорт нет смысла писать.
По тональности звук будет различаться, ибо Месен поддерживает длинные сэмплы в Namco 106/163, а FCEUX - нет.
Смешно, что баг в FCEUX известен как минимум с 2016 года, причём нашли как исправить, но не сообщили скорее всего. Я скомпилировал и проверил, тональность (или как это называется) действительно изменилась. Скачал исходный код https://github.com/TASVideos/fceux, запустил в VS2019, в файле src\boards\n160.cpp изменил строчку LengthCache[w] = (8 - ((V >> 2) & 7)) << 2; на:LengthCache[w] = (64 - ((V >> 2) & 63)) << 2;Или просто:
LengthCache[w] = 256 - (V & 0xFC);Как у Mesen и здесь: https://wiki.nesdev.com/w/index.php/Namco_163_audio.
Я напишу CaH4e3 в ЛС.

2889
Оригинальный DVD + madVR с лёгкими улучшениями дают картинку лучше, чем попытки сделать апскейл высокого разрешения. Линии разного размера, где-то чёткие детали, а где-то мутные, мелкие артефакты. Обычно достаточно апскейла до 720p. Пока что алгоритмы лажовые, в будущем ещё можно улучшить, потому что аниме предсказуемо, но все детали всё равно не восстановить и если на BD больше деталей, то можно в теории сделать гибрид.

2890
Golk, sbs_extractor.c компилируется с помощью MinGW или Visual Studio. При обработке ваших файлов ошибка:
saving ambience/0x20C4C363.snu
sample count mismatch (got 4937582, expected 541808494)failed: 10
Придётся поискать другой извлекатель.
Вот sbs_extractor.exe, если что.
--------
Похоже https://github.com/losnoco/vgmstream поддерживает: https://github.com/losnoco/vgmstream/blob/master/src/meta/ea_eaac.c. Только я не умею им пользоваться.
--------
Разобрался немного. Отсюда качать test.zip.
Если запустить так:
test.exe -i -o file.wav ambience.sbrТо будет длиной 1:51:
sample rate: 44100 Hz
channels: 4
looping: disabled
loop start: 0 samples (0:00.000 seconds)
loop end: 4937582 samples (1:51.963 seconds)
stream total samples: 4937582 (1:51.963 seconds)
encoding: Electronic Arts EA-XAS 4-bit ADPCM v1
layout: blocked (EA SNS)
metadata from: Electronic Arts SNR+SNS header
bitrate: 841 kbps
stream count: 6
stream index: 1
samples to play: 4937582 (1:51.963 seconds)
Если просто test.exe -o file.wav ambience.sbr, то будет в 2 раза длиннее, повтор идёт, а -i как раз предотвращает looping.
--------
Там 6 треков (видно по stream count: 6), так что нужно для каждого вызывать:
test.exe -i -s 1 -o file1.wav ambience.sbr
...
test.exe -i -s 6 -o file6.wav ambience.sbr
Или использовать bat-файл, как там и показано: https://github.com/losnoco/vgmstream#components.
--------
Можно установить их плагин для foobar2000 https://www.foobar2000.org/components/view/foo_input_vgmstream, тогда после добавления ambience.sbr отобразятся все 6 треков, их можно послушать или сконвертировать. Только они отображаются с повтором (2 раза длиннее).
--------
Кстати, sbs_extractor похоже распаковал правильно, но только один трек. При использовании ToWav Music Converter для SNU -> WAV, программа разделяет 4 канала на два файла, а vgmstream все 4 канала пишет в один WAV-файл, это стоит учитывать.
--------
Если в sbs_extractor убрать несоответствие как ошибку, то все треки извлекутся:
if (numsamples != (shead.samples & ~0x40000000U))
{
printf("sample count mismatch (got %u, expected %u)", numsamples, (shead.samples & ~0x40000000U));
//r = 10;
//goto error;
}
Добавил эту версию (sbs_extractor_ignore_mismatch.7z).

2891
А он кнопкой по дефолту сброшен? Может настройка какая трещащая затисалась.
При любых настройках.

Я вообще не пользуюсь ePSXe и не знаю зачем им пользоваться под виндой: заброшен, без исходного кода, неудобен и видео не записать (со стандартным плагином), такой же мусор как Kega Fusion. Вот под Android обновляется и работает быстрее RetroArch. Под виндой лучше Mednafen и его порты (RetroArch, BizHawk).

2892
SeregaZ, да, но сейчас посмотрел внимательнее, всё хитрее. Сначала попытка определить и в глобальную Gems28Mode записывает значение (пишется Warning, если не получилось), которое используется в VGM дампе. Но в STARTSEQ есть дополнительная проверка:
UINT8 stseqx[49]; // [0BBD] 33 byte scratch area for starting a sequence
...
DoGems28 = Gems28Mode;
if (stseqx[0] > 1) // [extra code to detect GEMS 2.8]
{
if (stseqx[3] <= 1 && stseqx[6] <= 1)
DoGems28 = 0x01;
}
Т. е. если даже определить не получилось как 2.8, есть возможность определить 2.8. Например, вырезанный Comix Zone определился как 2.8. Если бы эта проверка не сработала, то вообще была бы чушь и "Invalid command 126 found on Channel 10!".
По-хорошему, нужно было бы это значение записывать в глобальную Gems28Mode, чтобы VGM не ломался. Проверка DetectSeqType() запускается один раз на весь банк, если определился как 2 байтов, а встретил песню с 3 байтами (2.8), то ошибки не будет, наоборот уже не будет (банк 3 байта, а песня 2 байт). Не знаю, всегда ли будет срабатывать код в STARTSEQ, если всегда, то проблем быть не должно.

Стоит ли добавлять в библиотеку опцию с форсированием - даже не знаю.

2893
Касательно родного плагина - треска в нём нету?
В главном меню нет треска в Doom и Final Doom.
то бишь, я так понял, что надо брать оригинальные образы а не всякие сборники 2in1 с переведённым текстом на примере Doom Classic Complete?
Пираты могли вырезать что-то или как-то криво сделать, что на оригинальной консоле будет незаметно, а 100% точной эмуляции PSX не существует пока.
Возможно зависит от чего-то ещё, почему, например, у меня треск в "Ethernal SPU Plugin 1.41".

2894
возможно GEMSPlay не может определить какие именно там используются и скажем они были 3 байтные, а он пытается 2 байтами прочитать и посему сыплется.
Да, проверил. Он не смог определить в ваших вырезках, поэтому там и пишется Warning! GEMS Version Autodetection failed! (режим 2.8 не срабатывает и версия с 2 байтами по умолчанию), а когда запускаешь полный рип от того чувака, то ошибок нет в Comix Zone. Вот в Nightmare Circus (Beta) определить не получилось из того архива, но даже когда я установил режим 2.8, VGM хоть и без ошибок, но loop сэмплов остаётся неправильным.
---------
Определение в DetectSeqType() из loader.c.

2895
TheRoadWarrior, стоило обновить комментарий, что речь о Doom и Final Doom.
Может образ плохой, брал redump Doom (USA).zip.
В 2.0.5 музыка и звуки в меню есть без проблем со стандартным плагином. С плагином spuEternal141 тоже есть музыка и звук, но треск.

2896
Попробуйте точно правильно пропатченный отсюда: https://www.emu-land.net/consoles/n64/roms?act=showonly&id=382 (Wonder Project J2 - Koruro no Mori no Jozet (J) [T+Eng1.0 Ryu (18.02.2016)].7z).

Добавлено позже:
Проверил в Project64 2.3.2.202, после неба комната девочки появилась. В Mupen64Plus (retroarch) тоже работает.
Наверно патчер плохо у вас, нужно было сравнить контрольную сумму CRC32 после применения.

2897
SeregaZ, про VGM запись. Нужно создать папку dumps рядом с GEMSPlay.exe. Воспроизводится нормально. Но в консоли написало один раз в треке Comix Zone:
Unknown event 75 on track 1
Unknown event 7C on track 4
Unknown event 7F on track 7
Unknown event 7D on track A
--------
Кстати, VB нужно ещё написать про UINT8 LoopID = 0; в void PreparseGemsSeq(UINT8 SongNo). Переменная LoopID не инициализируется, но используется.
--------
В PreparseGemsSeq() из loader.c как раз и выводится "Unknown event", обработки этих команд просто нет.
--------
В Nightmare Circus - The Jester много ошибок и loop у сэмплов неправильный.

2898
то есть дело в ядре, а не самом коде драйвера?
Не знаю, код эмуляции YM2612 выглядит очень похожим на тот, что в MAME, а он нормально эмулирует и собственно поддержка overflow есть, но вот переписанный драйвер (GEMSPlay) наверно что-то не учёл.
Протестировал Ariel - The Little Mermaid, первый трек (Level 1, The Reef) там тоже исправился.
каким образом можно начать vgm логирование?
Не знаю, может оно не работает. Там, кстати, есть код записи в wav, но нужно перекомпилировать.
и я там смотрел гитхаб ВаллейБела - он два дня назад что-то правил
Жаль, что он раньше не добавил репозиторий (https://github.com/ValleyBell/GEMSPlay/), иначе сделал бы форк. Он только 4 апреля добавил (https://api.github.com/repos/ValleyBell/GEMSPlay - created_at), но коммиты старые остались. Он поправил описание, его фиксы у меня есть, кроме INI, нужно будет сравнить. Исправления сэмплов у него нет. Я делал исправления для устранения предупреждений современного компилятора и некоторые другие, переносил файлы. Теперь можно запутаться.
Напишите ему, чтобы посмотрел этот коммит: https://github.com/infval/GEMSPlay/commit/5666573abce770956b3a7a804a69d221d1276598, для исправления. Мне лень делать pull request.
И можете написать про phase overflow и что я исправил некрасиво так в fm2612.c:
OPN->fn_max = (UINT32)( (double)0x20000 * freqbase * (1<<(FREQ_SH-10)) / 4.4);

2899
Нашёл такие заметки: https://github.com/ekeeke/Genesis-Plus-GX/blob/master/HISTORY.txt
Цитата
Genesis Plus GX release 080301 (Eke-Eke)
* added preliminary support of undocumented YM2612 bug: fixes soundtracks of Shaq Fu, Spiderman, Comix Zone, Ariel and some others
Genesis Plus GX release 080716 (Eke-Eke)
* improved YM2612 emulation (credits to Nemesis for his tests on real hardware):
  .implemented phase overflow emulation: improved fix for special music instrument used in Comix Zone, Flashback, Ariel, Shaq Fu...
И в fm2612.c написано:
Цитата
**  - implemented Detune overflow (Ariel, Comix Zone, Shaq Fu, Spiderman & many other games using GEMS sound engine)
В fm2612.c переменная fn_max используется при "phase overflow" (наверно "Detune overflow" тоже самое), если частота отрицательная, то прибавляется fn_max.
Задаётся она так:
OPN->fn_max = (UINT32)( (double)0x20000 * freqbase * (1<<(FREQ_SH-10)) );Я смог подобрать делитель fn_max, чтобы звучало похоже (число между 4.0 и 4.7), я остановился на 4.4:
OPN->fn_max = (UINT32)( (double)0x20000 * freqbase * (1<<(FREQ_SH-10)) / 4.4);freqbase - зависит от rate и clock и её нельзя изменить, чтобы всё не испортить. Код достаточно похож на последний код у MAME (https://github.com/mamedev/mame/blob/master/src/devices/sound/fm2612.cpp), так что можно сделать вывод, что именно в GemsPlay.c этого overflow не происходит.

Прикрепил сборку с грязным фиксом, описанном выше.

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

2901
А зачем вообще существуют частные коллекции, которые никто не может увидеть?
Некоторые коллекционеры такие, они могут показывать фото, как byuu, и не делать дампы. Типа "у меня есть, а у вас нет". А потом пожар/утеря или коллекционер умер и всё теряется.

2902
Разное / Ваше творчество
« : 05 Апрель 2020, 00:52:37 »
Стало интересно как будут выглядеть цифры, как на электронных часах, на окружности. Написал простенький код.
В сети есть шрифт с буквами на окружности, но там больше сегментов используется.
220477-0

2903
Разное / Какие сериалы Вы смотрите
« : 05 Апрель 2020, 00:23:36 »
Ozark / Озарк S03 - всё также круто. Моя замена Breaking Bad. Снова клиффхэнгер.
Locke & Key / Ключи Локков S01 - могло быть лучше. Самая идея неплохая. Клиффхэнгер.
I Am Not Okay with This / Мне это не нравится S01 - про девочку со способностями. Короткий сезон, проявления способностей не так много, больше про проблемы подростка, наверно поэтому невысокий рейтинг, но мне понравилось, там ещё милашка София Лиллис. Клиффхэнгер.
Kidding / Шучу S01-S02 - лучше, чем ожидал.
The Outsider / Чужак S01 - сначала было неплохо, потом так себе.
The New Pope / Новый Папа S01 (продолжение Молодой Папа) - хорошо. Я не религиозный, не знаю в чём секрет, но смотреть интересно.
Shin Seiki Evangerion / Евангелион (1995-1996) - разочарование как было с бредовым Twin Peaks 90-х годов (сначала неплохо, потом полная чушь). С трудом досмотрел. Не переношу религиозные аллюзии (или как это называется), особенно приправленные глубокомысленным бредом.
Пришлось смотреть в таком порядке 1-24, 21'-24' (режиссёрские), 25-26, 25'-26' (Конец Евангелиона). 21'-24' - совсем небольшие изменения, показали соски. 25-26 - наркоманский дешёвый трип, когда закончился бюджет. 25'-26' - в начале хороший экшен, но под конец опять свелось к самокопанию и бессмысленным диалогам, что были во второй половине всего аниме, которые я не понимаю и больше всего раздражают.
Кроме внешности 3 главных героинь и неплохой графики на то время, ничего хорошего не могу выделить. В 26' влагалище во лбу и кадры реальных людей - "гениально".
Простите, что не в тему с аниме.

2904
100-150 килобайт на песню - многовато
"17 - The Jester.vgm" - 1,95 МБ, который я скачал :)
переключение треков не нужно
Так и подумал, просто для информации.

Обновил на github код и добавил сборку.

2905
На счёт переключения треков.
В gemsplay_play() я ставлю PreparseGemsSeq(0); PlaySong(0);, т. е. SongNo = 0. Я оставил значение по умолчанию у FollowTrack = true (Follow Sequences), думал, что автоматическое переключение треков, но это только влияет на номер выбранного трека в консоли. Когда трек хочет переключиться, то переключается.
AutoProgress = false по умолчанию, отвечает за переключение Song, симуляция переключения курсора и запуска воспроизведения, как если бы нажимал человек. Конец трека определяется как раз по CheckForSongEnd(), которую я изменил.
В этой функции ещё неверный код установки битов: UINT8 ChnMask, но биты ставятся от 0 до 16, но это похоже совсем не важно.
согласно инструкциям - громкость достигла ноля.
Дело в том, что мы вручную нажимаем/вызываем стоп и здесь происходит запись в FIFO cmdstopall (0x16), но движок ничего не делает с envelope, кроме отключения канала. А CheckForSongEnd() для GEMSPlay, пытается в нескольких местах определить, что конец трека. Поэтому такая проверка необходима. Если тишина, это ещё не значит, что трек закончился. Я даже не знаю когда GEMS треки останавливаются, наверно только от своих команд.

Ещё интересно, что The Jester у VGM версии имеет продолжительность 5:09, но в GEMPlay не остановилось. Наверно без явной команды будет бесконечный повтор.

2906
а как можно в gemsplay номер трека указать?
В консольной стрелки вверх и вниз.

Исправил остановку. В ASM было правильно, а здесь в CLIPLOOP() сначала снимались флаги VTblPtr[VTBLFLAGS], а уже после проверялось на "fm - digital mode? [BIT #5]". В ASM в регистр сохранялось оригинальное значение флагов.
Заметил баг, который был в оригинале. Если играет сэмпл (который мы тестировали здесь) в полном треке The Jester, то остановка не останавливает счётчик времени, но звука нет. Это уже баг GEMSPlay, а не драйвера GEMS. В CheckForSongEnd():
for (CurChn = 0; CurChn < 4; CurChn ++)
{
if (pdata.psgenv[CurChn])
ChnMask ++;
}
Здесь проверяется регистр UINT8 psgenv[4]; ([0021] 24 envelope mode 0 = off, 1 = attack, 2 = decay, 3 = sustain, 4) и он почему-то равен 2 в последнем канале, что не даёт остановку (ChnMask должен быть = 0).
В CLIPLOOP() psgcom устанавливается в 4 ([0009]  0 command 1 = key on, 2 = key off, 4 = stop snd), как я понял, это значит что канал отключен(?). Если дополнить проверку - if (pdata.psgenv[CurChn] && pdata.psgcom[CurChn] != 4), то будет останавливаться, потому что после ручной остановки у каналов стоит 4 благодаря CLIPLOOP().
Я только предполагаю, что это не должно что-то испортить (автоматическое переключение трека, например). Пожалуй оставлю.
Протестируйте остановку и я, наконец, сделаю коммит. :)

2907
(20 мин еще надо для скачивания)
Если качать в несколько поток через менеджер закачек, то быстрее. Firefox качает в один поток (подключение), поэтому медленно, у других не знаю. Также там есть торрент, да и образ этот есть на rutracker.org.

2908
По коду: SKIP один раз добавляется к указателю PTR, также один раз используется FIRST (SAMPLECTR = SAMP.FIRST;, где SAMPLECTR - количество байт для вывода, после чего может произойти LOOP back, тогда SAMPLECTR = SAMP.LOOP). Остальные ваши формулы я не понимаю, там скорее FIRST - LOOP и SKIP + FIRST - LOOP. В любом случае вроде всё правильно, кроме END.
у меня вопрос по поводу буфера - он точно один на 128 байт размером?
// FILLDACFIFO - gets the next 128 bytes of sample from the 68000 into the DACFIFO
static void FILLDACFIFO(UINT8 ForceFill)
:) Там DACFIFO на 256 байт, эти 128 байт записываются попеременно. Так что можно сказать два по 128.
gemsplay_stop по всей видимости не стопарит проигрывание такого сэмпла в loop :))))
Ну да, я же копировал реализацию из команд с клавиатуры. Можно очистить память вместо этого и снова инициализировать.
я там вырезал вобще все для тестов и остался только сэмпл, чтоб слушать как он склеивает.
В архиве одинаковые файлы в двух папках. Я тестировал на вашем прошлом forum.zip, там несколько раз повторяется этот кусок, так вот между ними есть "щелчок", но не те, которые между LOOP. В этих я тоже не слышу.

2909
Евгений Вадимович, оригинальные образы без перевода работают? Например Chrono Cross (USA) (Disc 1).zip отсюда: https://archive.org/download/redumpSonyPlaystationAmericaGames08Feburary2020.
Распаковали CUE и BIN и перетаскиваете CUE файл?

2910
Похоже исправил. Данные сэмплов переносятся в Z80 (функция XFER68K) по 128 байт, когда счётчик подходит к 0, то сначала записываются оставшиеся, а после ещё до 128 байтов от начала LOOP, если есть. Для 2-й записи нужно было сместить указатель (DstAddr += SmplLeft;) куда записывать, иначе начало LOOP записывалось поверх записанного конца. Отсюда и "щелчки" - оставшийся мусор из DACFIFO, который равен 256 байтам.
Остался "щелчок" после проигрывания куска. Что делать с END непонятно.
Протестируйте и я залью код.
еще момент - а могли появится эти щелчки из-за модификации кода под PAL?
Я не добавлял ничего связанного с PAL. Это было только в сборке GEMSPlayLibrary_50Hz для теста, мне показалось, что вам это не нужно.

Страницы: Назад 1 ... 93 94 95 96 [97] 98 99 100 101 ... 151 Далее