31

дежурный сказал:

А еще этот унреал не пишет:
            Тс музыку, Фм музыку,Гс музыку,Моонсад,Саа.

У меня таких девайсов нету, поэтому пох
видео мунсаунд

youtube.com/watch?v=lJx61Aon-WY

32

dr.Titus сказал:

Моник-то держит 50Гц, а вот эмули, нормально умеющие синхрониться с кадровой разверткой видюхи все так же отсутствуют.
Кроме моего эксперементального, да и он пока то не катит)

Ну ведь гонишь же, унриал давным давно умеет делать синхронизацию по обратному ходу луча, если на CRT мониторе выставлена развертка 50гц, то все скролеры в унриале идеально плавные.

SyncMode=SOUND ; video synchronization method: sound, tsc, video

режим video - делает синхронизацию по обратному луча (совместно с опцией VSync=1 и режимом вывода driver=d3d), ну и естественно только на full screen'е.

P.S. Специально в сорец посмотрел, в режиме SyncMode=video, даже VSync=1 не нужен (делается автоматически).Отредактировано deathsoft (2016-10-22 13:03:23)

33

Ваши старания бессмысленны. Например некий Риндекс дает мне последнюю версию нарезалки видео и говорит она ахуенна, там два экрана и все такое. В процессе эксплуатации мы выясняем, что черный цвет там пишется неверно, вместо 0,0,0 - 05,05,05, что дает серовато черный. Блекло!

Во вторых я режу видео. обычный скролл и нихуя прочесть нельзя. Время потеряно! Да нахуй мне нужен этот НОСЛик, я буду резать как раньше без него, зато изображение будет черное и скролл читаем.

Вот пример того как плохо:
youtube.com/watch?v=nhtG8kPZsFc

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

Вот единственный нормальный эмулятор для просмотра дем:
http://zxaaa.net/EMUL/unrealfix.zip

Как сделали при Сталине так я на нем и работаю, остальное все испорчено.

Новое м е г ААА д е м о готово на 14%

34

deathsoft сказал:

В процессе эксплуатации мы выясняем, что черный цвет там пишется неверно, вместо 0,0,0 - 05,05,05, что дает серовато черный. Блекло!

Видимо там палитра выставлена непойми какая в настройках (в .ini файле). Палитру еще алоний выставлял, я палитру вообще не трогал, но знаю, что в ини файле их несколько.

35

deathsoft сказал:

Видимо там палитра выставлена непойми какая в настройках (в .ini файле). Палитру еще алоний выставлял, я палитру вообще не трогал, но знаю, что в ини файле их несколько.

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

Новое м е г ААА д е м о готово на 14%

36

deathsoft сказал:

Ну ведь гонишь же, унриал давным давно умеет делать синхронизацию по обратному ходу луча, если на CRT мониторе выставлена развертка 50гц, то все скролеры в унриале идеально плавные.

    SyncMode=SOUND ; video synchronization method: sound, tsc, video

режим video - делает синхронизацию по обратному луча (совместно с опцией VSync=1 и режимом вывода driver=d3d), ну и естественно только на full screen'е.


Фулскрином я не пользуюсь, т.к. смотрю в окошке.

Кроме того, извечно поднимаемая проблема о точной синхронизации звука, когда используется синхронизация по VBlank - как решена?
(ибо времязадающие генераторы у видюхи, от которой идет 50Гц, и у звуковухи - разные).

37

dr.Titus сказал:

Фулскрином я не пользуюсь, т.к. смотрю в окошке.

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

dr.Titus сказал:

Кроме того, извечно поднимаемая проблема о точной синхронизации звука, когда используется синхронизация по VBlank - как решена?
(ибо времязадающие генераторы у видюхи, от которой идет 50Гц, и у звуковухи - разные).

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

38

Самая точная эмуляция всего и звука и изображения происходит в Z80
http://z80.emu-russia.net/

Вот не знаю как но смотря демы в ентом эмуле я ощущаю именно реал.

Новое м е г ААА д е м о готово на 14%

39

deathsoft сказал:

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


Очень даже можно) Посмотри мой EmuStudio, который работает всегда с VBlank и в окошечке.

deathsoft сказал:

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


Проблема решаемая, и на хорошей видюхе мне удавалось сделать так, чтобы не разьезжалось, т.к. шла постоянная микроскопическая корректировка. Но универсальный способ, чтобы работал на 99% тачек пока что не сделал. И опять же, не потому что принципиально невозможно, а потому что руки не дошли и трудоемко. Тем более, начиная с висты информация о текущей позиции в буфере воспрозведения стала очень грубой. Но и с ней можно работать.

40

dr.Titus сказал:

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

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

41

Более того, частота vblank не ровно 50гц, а зависит от разрешения, и может быть 49.99Гц, или 50.01Гц или еще какие то числа, для расчета развертки используются формулы GTF и CVT и куча параметров видео сигнала, драйвер видяхи после расчета пишет реальную частоту, которая получилась.

42

deathsoft сказал:

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


Вовсе нет.
Корректировка у меня была такова, что за кадр проигрывалось, допусим, не 480 семплов, а 480.0001. При этом дробная часть все время корректировалась. И никогда не выкидывался ни кадр изображения, ни даже один отсчет семпла.
Таким образом, фактически текущий проигрываемый за кадр звуковой фрагмент был похож на гармошку, меха которой колебались между, допустим, 480 отсчетами и 480.001. Столь микроскопическое колебание на слух заметить невозможно, но зато возможно каждый кадр делать новую подгонку под кадровую частоту.

43

deathsoft сказал:

Более того, частота vblank не ровно 50гц, а зависит от разрешения, и может быть 49.99Гц, или 50.01Гц или еще какие то числа, для расчета развертки используются формулы GTF и CVT и куча параметров видео сигнала, драйвер видяхи после расчета пишет реальную частоту, которая получилась.

Разумеется. Поэтому синхронизация идет по кадровой частоте, какой бы она не была, а звук уже подтягивается под нее. Если кадровая на 0.01 процент выше, то и звук будет играть на 0.01 процент быстрее, что на слух не заметно.

44

Приведу другой пример, например звуковая карта потребляет вместо 480 сэмплов за кадр 481 сэмпл, откуда взять этот лишний сэмпл? Подать вместо него 0, копию предыдущего, нечто среднее? Сразу же будут посторонние гармоники в сигнале.

45

deathsoft сказал:

Приведу другой пример, например звуковая карта потребляет вместо 480 сэмплов за кадр 481 сэмпл, откуда взять этот лишний сэмпл? Подать вместо него 0, копию предыдущего, нечто среднее? Сразу же будут посторонние гармоники в сигнале.


Если звуковая карта проигрывает за кадр не 480 семплов, а 481, значит частота вывода звука не 48000Гц, а 48100Гц. В моем алгоритме это совершенно штатная ситуация, означающая лишь то, что алгоритм вычисляемый сходимость кадровой частоты и частоты семплов это определит, и будет делать корректировку исходя из реалий, а не паспортных данных.

Обьясню иначе. Мы привязываемся к кадровой частоте. Мы не знаем какая она в точности, но примерно по данным от видюхи знаем, что 50Гц. Но на деле она может быть и 49, и 51.
Так же мы не знаем точную частоту семплов, но опять же считаем, что допустим 48000Гц, но плюс минус может отличаться.
Каждый кадр алгоритм считает сколько же реально было проиграно семплов за кадр. И делает корректировку именно относительно того, сколько семплов в кадре. Но реальная их частота его не интересует. Только относительная - одна относительно другой.

46

dr.Titus сказал:

Очень даже можно) Посмотри мой EmuStudio, который работает всегда с VBlank и в окошечке.

Исходники? Алгоритм есть?

47

dr.Titus сказал:

Так же мы не знаем точную частоту семплов, но опять же считаем, что допустим 48000Гц, но плюс минус может отличаться.
Каждый кадр алгоритм считает сколько же реально было проиграно семплов за кадр. И делает корректировку именно относительно того, сколько семплов в кадре. Но реальная их частота его не интересует. Только относительная - одна относительно другой.

Поясню по другому, допустим видеокарта работает с точной частотой 50Гц, за эти 20мс звуковая карта потребляет например всегда не 480сэмплов, а 481сэмпл, а эмулятор производит только 480 сэплов (что соответствует 50гц) (все числа условные), так вот откуда взять по 1 лишнему сэмплу на каждый кадр? На втором кадре потребуется уже 2 лишних сэмпла, на третьем уже 3 и т.д. Эмулятор не может нагенерировать аудио сэмплов больше чем на 20мс, т.к. при этом будут генерироваться и лишние видеостроки (от следующего кадра).

Двигающиеся меха гармошки хороши только тогда, когда частота плавает около 50гц, но если она принципиально отличается и не плавает, то никакие "гармошки" не сделать.

Значение 50гц - чистая условность, можно обозначить частоту видяхи f1, а звука f2. Так вот, если f2 > f1 или f2 < f1 (всегда),  то сходимости не будет.Отредактировано deathsoft (2016-10-22 14:13:22)

48

deathsoft сказал:

Исходники? Алгоритм есть?


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

Кроме того, как я уже упоминал, начиная с висты виндовс огрубила указатель текущей позиции в буфере воспроизведения, что заставило меня начать пересматривать концепцию. Я даже делал тесты в какой-то теме на zx.pk.ru, посвященный этим исследованиям. Но до конца не доделал)

49

deathsoft сказал:

Поясню по другому, допустим видеокарта работает с точной частотой 50Гц, за эти 20мс звуковая карта потребляет например всегда не 480сэмплов, а 481сэмпл, а эмулятор производит только 480 сэплов (что соответствует 50гц) (все числа условные), так вот откуда взять по 1 лишнему сэмплу на каждый кадр? На втором кадре потребуется уже 2 лишних сэмпла, на третьем уже 3 и т.д. Эмулятор не может нагенерировать аудио сэмплов больше чем на 20мс, т.к. при этом будут генерироваться и лишние видеостроки (от следующего кадра).


Эмулятор будет производить столько семплов, сколько нужно. Если ему алгоритм говорит - давай в этот кадр мне натяни звук на 480.001 семпл, он это сделает. В следующий кадр натяни звук на 480.0012 семплов. И т.д.

50

dr.Titus сказал:

Я даже делал тесты в какой-то теме на zx.pk.ru, посвященный этим исследованиям.

Тесты с kernel streaming? Так это я тебе сорцы передавал через савелия.

51

deathsoft сказал:

Значение 50гц - чистая условность, можно обозначить частоту видяхи f1, а звука f2. Так вот, если f2 > f1 или f2 < f1 (всегда),  то сходимости не будет.

Сходимость будет всегда, потому что эмулятор будет натягивать звук на то число семплов, которое по текущим подсчетам играется за кадр. 480.0001 ли это семплов, или же 479.999 - не важно.

52

deathsoft сказал:

Тесты с kernel streaming? Так это я тебе сорцы передавал через савелия.


Нет, тот путь я решил пока не рассматривать, т.к. его попросту не удалось оживить на моей тогдашней XP)

Делал сам тесты строго под систему и обычный вывод звука, стандартный через DirectSound.

53

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

54

И вообще, не могу найти на zx.pk.ru каких-то своих старых тем. Они что теряются и трутся? Или поиск мне не подвластен?

55

dr.Titus сказал:

И вообще, не могу найти на zx.pk.ru каких-то своих старых тем. Они что теряются и трутся?

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

56

deathsoft сказал:

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


Эмулируемая система, например, Спектрум, дает за 20мс, допустим, 1000 отсчетов звука. Мне все равно на какой буфер я их натяну. На 480, на 481, на 479. На что угодно натяну. Это же простой пересчет.

57

В принципе, если точно установить частоту дескритизации звуковухи, то можно сделать динамический ресемплер звука, который будет сэмплировать звук не на 48000, а на реальной частоте звуковухи, и тогда разбегания частот не будет, т.к. за 20мс будет выводиться ровно столько сэмплов сколько должно.

58

dr.Titus сказал:

На 480, на 481, на 479. На что угодно натяну. Это же простой пересчет.

Далеко не простой, если сделать просто - тутже появятся гармоники посторонние, чтобы этого не было нужно применять нетривиальный алгоритм ресемплинга на дробную частоту дискретизации (алгоритм floating point), мы с Barmaley_m в свое время экспериментировали в этом направлении. Просто так произвольно менять чатсоту дискретизации без фильтрации нельзя, в спектре сигнала тутже мусорные гармоники появятся.

P.S. текущая реализация звука в унриале  говно и фильтр там сделан безграмотно и передискретизация/суммирование разных источников тоже.

59

deathsoft сказал:

В принципе, если точно установить частоту дескритизации звуковухи, то можно сделать динамический ресемплер звука, который будет сэмплировать звук не на 48000, а на реальной частоте звуковухи, и тогда разбегания частот не будет, т.к. за 20мс будет выводиться ровно столько сэмплов сколько должно.


Так я про то и говорю)

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

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

60

deathsoft сказал:

Далеко не простой, если сделать просто - тутже появятся гармоники посторонние, чтобы этого не было нужно применять нетривиальный алгоритм ресемплинга на дробную частоту дискретизации (алгоритм floating point), мы с Barmaley_m в свое время экспериментировали в этом направлении. Просто так произвольно менять чатсоту дискретизации без фильтрации нельзя, в спектре сигнала тутже мусорные гармоники появятся.


Да нет, все это не так уж сложно. Я деал, звучало шикарно)