Closed FakelsHub closed 3 years ago
Это просто обертка над snd2acm, который всю работу и делает внутри. А питоном потом просто битрейт поправляется в заголовке acm получившегося.
Что делает этот скрипт, он конвертирует звук в асм?
Тут более детальнее https://github.com/gemrb/gemrb/issues/633
Что делает этот скрипт, он конвертирует звук в асм?
Тут более детальнее gemrb/gemrb#633
Как раз таки там ничего непонятно. Где кодек который кодирует acm в 44кгц??? вы же просто меняете битрейт с 22 на 44. или snd2acm позволяет закодировать acm с частатой 44, вы уверены в этом? исходников то к snd2acm нет.
Если snd2acm честно кодирует в 44 то движок (его DirectSound) можно переделать на 44 Я планировал сделать воспроизведение wav через DirectSound, но для acm вроде как легче будет сделать поддержку формата 44кгц, так как ненужно будет писать код для потокового чтение wav файла.
ну если ускоренный в 2 раза играется нормально, значит все сэмплы там, нет?
честно кодирует в 44
Да, все честно кодирует. У acm и движка игры только одна проблема, движок просто игнорирует значение сэмплрейта в хедере acm и воспроизводит со скоростью 22 050 сэмпла в секунду в независимости от значения в хедере.
сделать воспроизведение wav
До недавнего времени был сторонником wav, но размер файлов слишком уж большой, особенно у 24bit wav, поэтому и перевел все в wma lossless
честно кодирует в 44
Да, все честно кодирует. У acm и движка игры только одна проблема, движок просто игнорирует значение сэмплрейта в хедере acm и воспроизводит со скоростью 22 050 сэмпла в секунду в независимости от значения в хедере.
У движка нет поддержки для 44, все его звуковые буфера создаются в 22кгц. Wav нужны в первую очередь для sfx звуков, а не для вашей uhd музыки.
У меня что-то большие сомнения что конвертер правильно кодирует.
Я не понимаю, что такое "правильно". Частота это количество сэмплов в секунду. Пихаем 2 секунды 22 кГц в одну - получаем 44.
Вы тесты делали?, например взять два файла один в 22 второй в 44 сконвертировать их. и деконвертировать обратно в вав и посмотреть в редакторе на звуковую составлющую у второго она должна быть она лучше. Ну или на слух, чем вы прослушивали 44 асм?
Вот упомянутый мод для Baldur's Gate, который использует 44 acm. Его я лично слушал ушами в игре.
Я не понимаю, что такое "правильно". Частота это количество сэмплов в секунду. Пихаем 2 секунды 22 кГц в одну - получаем 44.
Правильно - это значит конвертер не трогает pcm данные wav файла т.е не видоизменяет их к 22кгц а просто конвертирует в формат файла acm. Частота дискретизации это не только скорость воиспроизведения.
Но если бы он их видоизменял, то асм/22 полученный из wav/44 проигрывался бы нормально а не замедленно в два раза, разве нет?
Вообще конечно хорошо бы уже взять и с нуля переписать конвертор, но я каждый раз как начинаю читать описание формата, уши вянут.
По идеи да.
Там просто плохо описанный формат.
Вот тут код snd2acm, или весьма приближенный к нему. Мне тяжело разобраться, но вроде никакого ресэмплинга нет. Так что я думаю создание буфера на 44 должно позволить нормально проигрывать. Что собственно, в моде для BG и делается, только там тупой патч ехе, поэтому им приходится вообще все acm перекодировать на 44, вместо того чтобы правильно считать заголовок и проиграть звук соответственно.
Вы тесты делали?, например взять два файла один в 22 второй в 44 сконвертировать их. и деконвертировать обратно в вав и посмотреть в редакторе на звуковую составлющую у второго она должна быть она лучше.
все как положено быть, только хедер нужно выправлять у 44 wav
а вот оригинал для сравнения.
видно что конвертирование в acm и обратно немного съедает качество
все как положено быть
Почему отличается?
а вот оригинал для сравнения.
нужно брать исходник в 44, а не "оригинал" который уже в 22 был до этого конвертирован. исходник wav 44 > конвертируем snd2acm (с правкой хеадера по видимому) исходник wav 44 > ресемпл в 22 > конвертируем сравниваем.
а вот оригинал для сравнения.
нужно брать исходник в 44, а не "оригинал" который уже в 22 был конвертирован.
Оригинал и есть lossless исходник. Взял лосслесс и из него сделал wav 22050 16 bit и 44100 16bit, потом эти wav сконвертировал в acm и обратно. 22050 и 44100 это кстате НЕ khz как ошибчно многие думают, это количество сэмплов в секунду, а у меня на скрине реальные khz на шкале.
И то и другое меряется в герцах. Герц это 1/сек, так что все правильно. Отличается потому что шкала на первом скрине половинная. Выше там ничего нет, отрезано.
так что все правильно.
Минута цифровой тишины 0 hz/khz, но сэмплов у нас 44100х60. Несколько разные единицы измерения, но связанны друг с другом.
Герцы это одни и те же единицы. В одном случае ими меряется частота сэмплирования, в другом частота звука. Связаны они между собой теоремой Найквиста, которая примерно говорит, что если хочешь получить что-то похожее на оригинал (аналог), то надо сэмплировать в 2 раза чаще максимальной частоты оригинала. Если сигнал 0, то, конечно, неважно с какой частотой его сэмплировать, обратного я не утверждаю.
так как ненужно будет писать код для потокового чтение wav файла.
Кстати, а почемубы в sfall не реализовать хак из фаргуса? я так понимаю они не стали возиться с acm и просто поправили exe так чтобы он смог читать wav с хедером acm
они просто тупо заблокировали функцию декодирования для голосовых файлов. как это работает.
Если честно то это хреновый способ, и он не подходит.
Я даже не знаю, что лучше сделать поддержку .acm 44 или .wav wav уже есть через DirectShow, но это не подходит для sfx-звуков, имеется задержка в ~150ms, и не работает уменьшение громкости при определении удаленности источника звука от ГГ игрока на карте.
Лучше, конечно, и то и другое (и еще flac/ogg). А в ближайшей перспективе лучше хоть что-нибудь, чем ничего. Так что для начала я бы брался за то, что проще/быстрее.
проще acm. прикрепите сюда хоть какой-нибудь acm 44 и тот же в 22 для тестов (желательно музыку но не фоллатовскую)
(и еще flac/ogg)
не спасибо. но flac (может и ogg) и так работает через DirectShow если сменить его расширение на wma и установить кодеки [действительно ли это для wine мне неизвестно]
bgtheme.zip Вот тема BG. (оба хедера 22)
А flac надо тогда попробовать для HQ/UHQ музыки.
flac/ogg
Советую посмотреть в сторону WavPack. Умеет в lossless и lossy(hybrid), есть поддержка pcm s32le/f32le, есть рабочие инсталяторы с фильтрами/кодеками для DirectShow. Единственное что нужно добавить в sfall это обнаружение файлов с расширениями .wv .flac .ogg
Ну и зачем этот хоровод? Я вообще хотел wma убрать, но раз он умеет в лосслесс то пусть живет.
Ну и зачем этот хоровод?
а хз, там ведь просто поправить одну строчку, а всей остальной работой со звуком займется система и ее кодеки. Никтож не просит прикрутить полноценную поддержку кодеков в обход DirectShow, хотя было бы класнно иметь полную поддержку WavPack.
Попробовал только что UHQ flac переименованный в wma - работает без проблем под wine. А чего молчали-то, что так можно? Надо тогда музыку перегнать, раза в два меньше будет занимать. С буфером на 44 вообще конфетка будет. Насчет расширения, ну наверное правильнее сделать, чтобы искал и flac тогда тоже, но это не принципиально, главное что хоть как-то можно получить lossless.
хоть как-то можно получить lossless.
Существует wma lossless, но у него сжатие довольно слабое и просто конвертировать недостаточно, нужно еще и уровень громкости выправлять, а это в свою очередь требует 24bit на сэмпл. Вот тут отписался и оставил ссылки http://www.nuclear-city.com/index.php/topic/174-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D1%82%D1%80%D0%B5%D0%BA%D0%B8-fallout-1-2/#entry87941
А чего молчали-то, что так можно?
Проблема в том что под виндой flac не работает, точнее он работает если поставить кодеки соотвествующие.
Кому надо именно lossless, у того скорей всего уже кодеки есть. Ну а для тех, у кого еще нет, легко ссылку добавить в readme. В любом случае, главное улучшение это поддержка 44 кГц, ждем его.
легко ссылку добавить в readme.
У меня не получилось правильно установить эти кодеки https://www.xiph.org/dshow/downloads/ они похоже не совместимы с win10. klite https://codecguide.com/download_kl.htm установились и работают, но эти кодеки гарантируют проблемы со многими играми(вылеты, фризы, хрипения). Уже более 10лет эти проблемы донимают игроков x3 terran conflict, а еще когдато в fallout 3 такое наблюдал. wavpack http://www.wavpack.com/downloads.html установились и работают, только похоже надо ставить сразу обе версии x32 и x64
Реализовал поддержку для 44khz. Взял музыкальный файл с обильными высокими частотами, сконвертировал его в 22 и 44 acm файлы. Протестировал. Разницу сразу заметно даже для глухих, тот который 22 вообще крипит и искажается по сравнению с 44. 44 играет идеально.
В принципе можно пропатчить сам snd2acm.exe на то чтобы он записывал в заголовок всегда 44100. и будет отдельный snd2acmHQ.exe
а смысл, вот же эта репа и есть бинарник который все правильно пишет в обоих случаях.
сделай чтобы Drag&Drop-пом работало без всякой cmd хрени.
Gui ты имеешь ввиду? Так и оригинальный snd2acm только cmd же.
Нет. Кидаешь файл на твой exe, и он там сам должен сделать все. (если конечно умеешь)
а то Drag&Drop работает только если на батник кидать.
Если питон не установлен работает без него? у меня 2.7. на нем тоже работает.
Судя по этому, он просто исполняет ехе на файл. Должно быть легко сделать. Питон не нужен - свой встроен.
на .net легко. на пистоне не знаю (не учу его, ибо не перевариваю его синтаксис).
Ну и зачем этот хоровод?
а хз, там ведь просто поправить одну строчку, а всей остальной работой со звуком займется система и ее кодеки. Никтож не просит прикрутить полноценную поддержку кодеков в обход DirectShow, хотя было бы класнно иметь полную поддержку WavPack.
Каждый раз когда проигрывается звук всегда будет просматриваться этот хоровод из расширений., что влечет за собой небольшую задержку для [sfx] звуков. В общем добавить можно, но позже когда наведу порядок с sfx звуками.
Потом. Там через аргументы можно получать сразу несколько файлов, массивом, в общем через цикл можно обрабатывать их все, это чтобы кидать сразу пачку файлов а не по одному. :-) Хотя в твоем вариате наверное сразу будет открыто несколько окон а не последовательно.
Я не знаю просто как это в windows работает. Так что пробуй, если какие-то проблемы - объясняй, или ссылку какую-нибудь дай, где расписано как windows обрабатывает.
Каждый раз когда проигрывается звук всегда будет просматриваться этот хоровод из расширений.,
При запуске игры можно ведь в массив загрузить полные имена файлов и просеять на дублирующиеся имена с приоритетом на расширения wav > wma > flac > wv > mp3 > ogg > acm
Реализовал поддержку для 44khz.
Замечательно, ещебы переписать encoder до acm lossless и можно забить на другие форматы. Думаю вполне реально сделать lossless acm или хотябы свести шакалистость к минимуму.
snd2acmHQ.exe
Давайте чтоле договоренность какуюто сделаем по качеству? HQ(high quality) обычные acm с параметром -q0 AHQ(acm high quality/advanced high quality) 44100 acm UHQ(ultra high quality) вариации lossless и lossy
а то у меня уже конвертирована куча acm c HQ в именах каталогов и архивов. Могу и исправить имена, но это займет значительно времени.
Я не знаю просто как это в windows работает. Так что пробуй, если какие-то проблемы - объясняй, или ссылку какую-нибудь дай, где расписано как windows обрабатывает.
На всех системах это одинаково работает, тут главный вопрос как это в питоне сделано, в других я зыках входной параметр args -это массив аргуметов, в даном случае список файлов. Вот в терии на с++ https://coderoad.ru/4659105/%D0%9A%D0%B0%D0%BA-%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BF%D0%B5%D1%80%D0%B5%D1%82%D0%B0%D1%81%D0%BA%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%D0%BD%D0%B0-exe-%D0%B8-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B5%D0%B3%D0%BE-%D0%B2-%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0
Ладно если не можешь, то и фиг.
Что-то ты там наделал теперь это не работает просит какую-то dll из windows перекомпилируй по старому а то эта теперь на 2 мб меньше.
HQ(high quality) обычные acm с параметром -q0
это по факту LQ, не знаю где там HQ увидели.
Питон ужасно сложный язык для понимания простого программиста) Что делает этот скрипт, он конвертирует звук в асм?