BGforgeNet / ipsdoc

Interplay sound doctor
https://forums.bgforge.net/viewforum.php?f=22
4 stars 1 forks source link

Как это работает? #1

Closed FakelsHub closed 3 years ago

FakelsHub commented 3 years ago

Питон ужасно сложный язык для понимания простого программиста) Что делает этот скрипт, он конвертирует звук в асм?

burner1024 commented 3 years ago

Замечательно, ещебы переписать encoder до acm lossless и можно забить на другие форматы. Думаю вполне реально сделать lossless acm или хотябы свести шакалистость к минимуму.

Мне что-то эта идея не очень. Нафига нужны эти франкенштейны. 20 лет прошло, сейчас есть нормальные лослесс форматы, есть библиотеки для них. От ужасного наследия по возможности лучше избавляться, а не тащить за собой. Там еще в самом формате всего 2 байта на частоту, так что она ограничена 65К.

На всех системах это одинаково работает, тут главный вопрос как это в питоне сделано, в других я зыках входной параметр args -это массив аргуметов, в даном случае список файлов

Каких всех системах? Exe же только в Windows. Питон тут вообще нипричем.

Что-то ты там наделал теперь это не работает просит какую-то dll из windows перекомпилируй по старому а то эта теперь на 2 мб меньше.

Ну показывай, что просит-то. Скриншот или лог, что там есть.

FakelsHub commented 3 years ago

Каких всех системах? Exe же только в Windows. Питон тут вообще нипричем.

имелось ввиду как питон получает аргументы командной строки, когда их много.

Ну показывай, что просит-то. Скриншот или лог, что там есть.

да хз какой-то api-ms-win-core-path-l1-1-0.dll просто перекомпилируй по старому, явно в exe не все библы вошли, что требуется для запуска.

burner1024 commented 3 years ago

Windows 7 у тебя?

FakelsHub commented 3 years ago

да.

burner1024 commented 3 years ago

Microsoft закончил поддержку Win 7, и Python 3 поэтому дропнул его в версии 3.9. Я поставил 3.8.6 для компиляции, должно работать.

Насчет парсинга списка, проблема в поддержке разных вариантов инвокаций. Сейчас это ipsdoc 1.wav или ipsdoc 1.wav 1.acm, т.е. имя acm можно задать явно. В твоем случае надо будет ipsdoc 1.wav 2.wav 3.wav .... Само по себе просто, но для совмещения вариантов в стандартной библиотеке удобного способа нет.

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

FakelsHub commented 3 years ago

Чето ты куда-то не туда рулишь. :-)

Нужно будет тебе еще сделать тоже самое и с количеством каналов stereo/mono. Потому, что в движке моно тоже жестко прописано для не музыкальных файлов. Т.е они всегда в моно.

burner1024 commented 3 years ago

Добавил фикс каналов.

burner1024 commented 3 years ago

@FakelsHub кстати раз уж ты разобрался, может и для BG поддержку запилишь?

egornovivan commented 3 years ago

это по факту LQ

Ок, переименую. NovaRain говорит с версии 4.2.9 будет поддержка 44khz acm

egornovivan commented 3 years ago

@burner1024 @FakelsHub Сконвертировал музыку https://github.com/egornovivan/Fallout-1-2-HQ-music Забирайте.

FakelsHub commented 3 years ago

Добавил фикс каналов.

Чето ты поторопился, это может багнуть звуки. новые/старые звуки всегда имеют значение 2 в заголовке, но фактически имеют одну дорожку, как это отразится при воиспроизведение звука ”один канал на два канала” я еще не проверил.

Хотя это мешать не будет, если не получится сделать на уровне движка.

FakelsHub commented 3 years ago

@FakelsHub кстати раз уж ты разобрался, может и для BG поддержку запилишь?

Нет, то совсем другой проект, и движек.

egornovivan commented 3 years ago

новые/старые звуки всегда имеют значение 2 в заголовке, но фактически имеют одну дорожку

У меня такой вопрос, а wind1.acm wind2.acm это звуки или музыка? Они моно или стерео? Просто если эти файлы замедлить в 2 раза, то они звучат лучше и логичнее.


Блин, они реально в моно, а я их сконвертировал в wav как стерео. Дурдом, в хедере 2 канала стоит.


@FakelsHub Сделай принудительно проигрывание wind1.acm wind2.acm как моно. Эти файлы по идее должны были лежать в каталоге sfx, но ктото из Interplay засунул их в music и они похоже уже 20 лет проигрываются неправильно.

FakelsHub commented 3 years ago

wind1.acm wind2.acm - все правильно он лежат, их вообще ненужно конвертировать во что-то. включаются они между загрузками карт. раньше компы были тормознутыми, и локации грузились по несколько десятков секунд, и мы могли наслаждаться шумами ветра)).

egornovivan commented 3 years ago

шумами ветра)).

Так если они будут проигрываться как стерео, то звучит как смерч(не правильно), а если как моно, то звучит как ветер.

Спектры в моно выглядят конечно не правильно, но звучит правильно изображение

Спектры в стерео выглядят правильно, но звучит как смерч изображение

Может эти файлы проигрываются както по особому? Вот послушайте разницу testwind.zip

FakelsHub commented 3 years ago

Может эти файлы проигрываются както по особому

файлы для движка должны быть в моно. wind1.acm - похоже не используется движком.

FakelsHub commented 3 years ago

в архиве те что в папке стерео звучат правильно как и должны быть в оригинале.

egornovivan commented 3 years ago

те что в папке стерео звучат правильно

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

egornovivan commented 3 years ago

овые/старые звуки всегда имеют значение 2 в заголовке, но фактически имеют одну дорожку,

Так получается все sfx звуки обязательно в моно будут? Можно немножко свелосипедить, значение каналов из хедера 1 и 2 оставить под моно, а для стерео возьмем цифру 3. Как тебе такой вариант? @FakelsHub Разумеется это только для sfx, а для музыки сделать как положено 1 моно 2 стерео


Можно еще по другому свелосипедить. Если движок игры игнорирует ACM-signature2 хедера, то можно вместо 1 прописывать конвертором 2 и тогда sfall должен считывать количество каналов как положено 1 моно 2 стерео, а если sfall считает из ACM-signature2 цифру 1, то sfx обязательно воспроизводится в моно

egornovivan commented 3 years ago

При запуске игры можно ведь в массив загрузить полные имена файлов и просеять на дублирующиеся имена с приоритетом на расширения wav > wma > flac > wv > mp3 > ogg > acm

А тут можно без дополнительного массива реализовать, при запуске/загрузке игры смотрим каталог, составляем список/массив расширений файлов и передаем в "хоровод" static const wchar_t *SoundExtensions[] = { L"mp3", L"wma", L"wav" };

FakelsHub commented 3 years ago

при запуске/загрузке игры смотрим каталог,

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

egornovivan commented 3 years ago

@burner1024 изображение вроде еще с буквой "a" проявляется баг


И где тут ошибка то? ofile = ifile.lower().rstrip(".wav") + ".acm"

Может надо .rstrip("\.wav").join(".acm") ?

egornovivan commented 3 years ago

плохая идея просматривать каталоги.

Ну тогда остается самый простой вариант, отдельным параметром через ini файл.

egornovivan commented 3 years ago

позже будет добавлена поддержка других форматов

Не очень хорошая идея. В snd2acm нужно подавать wav 16bit без метадаты, а еще нужен правильный уровень громкости который можно получить только в полноценном аудио редакторе. Можно попробовать ffmpeg, но там нормализация громкости очень отвратная, она изменяет длительность аудио и не работает на файлах длительностью в несколько секунд, а еще там отвратный ресемплер который вносит искажения на верхнем диапазоне частот. Надо смотреть в сторону sox, возможно там есть чем поправить громкость, но я сомневаюсь что там есть поддержка стандартов EBU R128, BS.1770-3

burner1024 commented 3 years ago

Чето ты поторопился, это может багнуть звуки. новые/старые звуки всегда имеют значение 2 в заголовке, но фактически имеют одну дорожку, как это отразится при воиспроизведение звука ”один канал на два канала” я еще не проверил.

Как ты верно заметил, старые звуки и так уже багнутые. Так что если будут проблемы, чинить придется в движке все равно.

Не очень хорошая идея. В snd2acm нужно подавать wav 16bit без метадаты, а еще нужен правильный уровень громкости который можно получить только в полноценном аудио редакторе.

Редактирование и конвертирование это 2 разных задачи, и смешивать их незачем. В любом случае, пока что это все только на уровне идеи, и возможно так и останется.

FakelsHub commented 3 years ago

Чето ты поторопился, это может багнуть звуки. новые/старые звуки всегда имеют значение 2 в заголовке, но фактически имеют одну дорожку, как это отразится при воиспроизведение звука ”один канал на два канала” я еще не проверил.

Как ты верно заметил, старые звуки и так уже багнутые. Так что если будут проблемы, чинить придется в движке все равно.

Непонял твоей мысли, на счет уже багнуты. Движком не используется поле channels, вместо этого каналы жестко заданы, моно для звуков стерео для музыки. Я пока не проверял четам будет, если моно в стерео буфере проигрывать. Наверное ничего страшного не произойдет. Думается :-)

burner1024 commented 3 years ago

Я имею ввиду, что фактически старые звуки моно, хотя в заголовке 2 канала прописано.

egornovivan commented 3 years ago

Я пока не проверял четам будет, если моно в стерео буфере проигрывать.

Подозреваю что просто в 2 раза быстрее проиграется, а если стерео в моно буфере проиграть, то замедлится в 2 раза. Есть где dev/nightly билд для тестирования? Хотя можно наверное и без sfall такое протестировать.


для sfx-звуков, имеется задержка в ~150ms,

Надо протестировать формат xwm xwma из directx sdk, возможно у него нету задержки, но это надо тестировать без "хоровода" xWMAEncode.zip

FakelsHub commented 3 years ago

Да задержка не из за формата, а из-за самого DS, не предназначен он для целей быстро вывода звука.

Подозреваю что просто в 2 раза быстрее проиграется

Нефакт.

Есть где dev/nightly билд для тестирования?

Где-то есть ночные сборки. Но Никаких изменений для каналов еще нет, тестировать нечего. Занят пока другим.

FakelsHub commented 3 years ago

@burner1024 А в wine/lunix тоже есть задержка? Там вроде как есть аналог directshow, может он менее тормозной. Проверить можно сконвертировать звук в wav от любой кнопки в игре, и поклацать по кнопке можно ощутить задержку.

egornovivan commented 3 years ago

Да задержка не из за формата, а из-за самого DS,

хм, а какже тогда игры современные работают? или они используют другую технологию directx?

burner1024 commented 3 years ago

А в wine/lunix тоже есть задержка? Там вроде как есть аналог directshow, может он менее тормозной. Проверить можно сконвертировать звук в wav от любой кнопки в игре, и поклацать по кнопке можно ощутить задержку.

А какая разница? Все равно же на windows никуда DS не денется. Какой конкретно звук можно сконвертировать? По названиям я не знаю.

FakelsHub commented 3 years ago

Да задержка не из за формата, а из-за самого DS,

хм, а какже тогда игры современные работают? или они используют другую технологию directx?

Да directsound, xaudio,идругие кроссплатформенные мультимединные фреймворки. DShow это в основном для программ рассчитано.

FakelsHub commented 3 years ago

Ставь в поле channels значение 3 для стерео. так как моновские (со значением 2 в заголовке) воспроизводятся в 2 раза быстрее :) если эта обертка нигде не будет больше использоваться кроме как для звуков движка фола то и делать дополнительных манипуляций со значением 3 не требуется.

Какой конкретно звук можно сконвертировать?

NMSELEC0.wav.zip без zip кнопки главного меню

egornovivan commented 3 years ago

Ставь в поле channels значение 3 для стерео.

Может всетаки лучше через ACM-signature2 свелосипедить? Если ACM-signature2 == 1 то музыку воспроизводим в стерео, а sfx в моно Если ACM-signature2 == 2 то музыку и sfx воспроизводим в соответствии со значениямим хедере

ACM-signature2 Выступает в роли версии acm файла, движку можно отдавать всегда значение 1 если он его считывает


Если использовать значение 3, то у нас получается такая картина. sfx 1, 2 моно 3 стерео. музыка 1 моно 2, 3 стерео. Сам не запутаешься? Вообще похоже хрень получается с двойкой.


По хорошему надо смотреть как эту коллизию решили в gemrb, FOnline, libacm

FakelsHub commented 3 years ago

signature - нельзя использовать. музыка в моно не бывает. че там путаться, зачем туда вообще смотреть, это нужно только для движка, а acm2wav все равно значение игнорит.

egornovivan commented 3 years ago

музыка в моно не бывает.

Ну так она и трехканальной не бывает. Можно поступить еще проще Если header_samplerate <= 22050 то музыку воспроизводим в стерео, а sfx в моно Если header_samplerate > 22050 то музыку и sfx воспроизводим в соответствии со значениями в хедере

FakelsHub commented 3 years ago

какая тебе разница? что записано в поле channels только лишний гемморой с определением выдумываешь.

сейчас: music всегда в стерео, независимо что записано в channels. sfx/speech - всегда в моно, channels == 3 стерео режим. проще некуда.

egornovivan commented 3 years ago

какая тебе разница? что записано в поле channels

Да без разницы, но лучше не плодить acm с сомнительными значениями(оно уже и без этого с проблемами для sfx), а то потом можно будет столкнуться с проблемами при переносе на другие движки.

channels == 3 стерео режим.

Оно какбы тоже неплохо, сразу показывает где проблема.

FakelsHub commented 3 years ago

проблемами при переносе на другие движки

не выдумывай проблем. FOnline - вообще по барабану что написано в заголовке, и действует также как двиг фола + без поддержки 44кгц.

egornovivan commented 3 years ago

и действует также как двиг фола

Ну вот логичней и оставить в покое acm 22050hz, а весь новый функционал(нормальная работа с каналами) накручивать уже на acm 44100hz

FakelsHub commented 3 years ago

ок, я тут посмотрел подумал, что значение 3 это как-то хреново для движка, в некоторых случаях значение 3 остается в некоторых структурах данных, (не знаю как это влияет, скорее ни как), но само расхождение с принятой нормой меня кто-то напрягает.

Оставляем как есть. просто сделаю условие, которое запретит изменение каналов через значение в заголовке для всех звуковых файлов, которые не имеют частоту 44100.

burner1024 commented 3 years ago

NMSELEC0.wav.zip без zip кнопки главного меню

А вроде же только для музыки альтернативные форматы? Для sfx всегда acm, тогда откуда там задержка возьмется? Ну поклацал, задержки нет, лог такой

Loading background sound file 07desert.ACM... finding background sound by copy  playing succeeded.
Loading sound file nmselec0.ACM...succeeded.
Loading sound file nmselec0.ACM...succeeded.
Loading sound file nmselec0.ACM...succeeded.

Да без разницы, но лучше не плодить acm с сомнительными значениями(оно уже и без этого с проблемами для sfx), а то потом можно будет столкнуться с проблемами при переносе на другие движки.

просто сделаю условие, которое запретит изменение каналов через значение в заголовке для всех звуковых файлов, которые не имеют частоту 44100.

Я думаю, что чинить надо в первую очередь там где сломано. Если в файле написано стерео, а он моно, то по сути это баг. А баги чинятся патчами. Так что в следующий релиз UPU, RPU пропишу всем sfx 1 канал, и 2 для музыки.

egornovivan commented 3 years ago

Ну поклацал, задержки нет nmselec0.ACM

Так у acm и не будет, или это лог неправильный?

чинить надо в первую очередь там где сломано.

Решили в sfall ничего не чинить, а оставить работу с acm 22050hz как в оригинале и FOnline, а вот в acm 44100hz можно и поправить работу с каналами.

Так что в следующий релиз UPU, RPU пропишу всем sfx 1 канал

Это не сильно поможет, sfx/speech с двумя каналами уже расползлись по многим модам. Тут надо чтото вроде sfx/speech library в которой будут содержаться sfx/speech со всех модов в пропатченом виде.

egornovivan commented 3 years ago

Там вроде как есть аналог directshow, может он менее тормозной.

Называется GStreamer, он есть под windows и вроде чемто похож на klite, протестирую и расскажу через недельку.

FakelsHub commented 3 years ago

Ну поклацал, задержки нет, лог такой

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

FakelsHub commented 3 years ago

А вроде же только для музыки альтернативные форматы?

Для любого acm.

egornovivan commented 3 years ago

У себя под вин10 LTSB намерял 40-50мс при переходе между acm и wav, а при переходе между двумя wav 110мс. Поставил Fallout 2 (Fixed Edition), сделал 2 wav music.zip и побегал немного на входе храма испытаний с записью звука в Audacity. gstreamer вообще никак себя не проявляет.

burner1024 commented 3 years ago

А, я положил в sound/sfx, надо было data/sound/sfx. Теперь Loading sound file nmselec0.ACM...failed. Наверное опять каких-то библиотек не хватает.

egornovivan commented 3 years ago

directshow годится только для музыки, а для sfx надо чтото другое.