Сообщения без ответов | Активные темы Текущее время: 27 апр 2024, 22:48



Ответить на тему  [ Сообщений: 17 ] 
 Скорость воспроизведения NSF - PAL (50) 
Автор Сообщение
Сообщение 06 июл 2010, 15:18
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
I.
Считается, что самый лучший на сегодня НСФ-плеер - это NSFplug (winamp) или NSFplay (тот же nsfplug, только с оболочкой, standalone). Плеер точный, с качественным алгоритмом передискретизации (в отличие от НотСоФатсо), и множеством настроек. Потербляет 500~1000 Мгц CPU, в зависимости от выбранного качества ресемплинга. Но он не умеет ограничивать скорость NTSC NSF-ок до 50 FPS, как это делает НотСоФатсо. Принудительно PAL в нём тоже не сделаешь, хотя, если в NSF-ке стоит флаг PAL-режима, плеер её играет на скорости 50. Это я проверил с помощью фамитрекера (там галка есть, при экспорте проекта в NSF - set PAL flag in NSF header).

Чтобы вручную выставить PAL флаг в заголовке, решил изучить документы:
http://kevtris.org/nes/nsfspec.txt
Код:

Here's an overview of the header:

offset  # of bytes   Function
----------------------------
007a    1   BYTE    PAL/NTSC bits:
                 bit 0: if clear, this is an NTSC tune
                 bit 0: if set, this is a PAL tune
                 bit 1: if set, this is a dual PAL/NTSC tune
                 bits 2-7: not used. they *must* be 0


Флаг менял следующим образом:
Изображение
0000 0000 = 00Н = NTSC
0000 0001 = 01H = PAL
0000 0010 = 02H = NTSC/PAL

GManiac и человек с форума nesdev.com подтвердили, что метод правильный, ошибки нет.

Преимущества этого метода
- абсолютное большинство эмуляторов и плееров определяют PAL-флаг, и играют NSF на скорости 50 FPS.
Это полезно для тех плееров/плагинов, где PAL невозможно выставить принудительно. (nsfplug/nsfplay, nezplug++ и т.д.)

Недостатки этого метода
- почти все эмуляторы и некоторые плагины (notsofatso, nezplug++) играют PAL правильно: т.е. высота тона основных каналов понижена, а высота тона DPCM аналогична NTSC => слышен неприятный дисбаланс.
Хотя, к счастью, nsfplay/nsfplug лишен этого недостатка. Плагин просто запускает PAL-NSF-ки на скорости 50FPS.
Высота тона всех каналов соответствует NTSC. Эта формальная неточность плагина играет нам на руку.

II.
HardWareMan дал мне свою бета-программку, которая превращает NTSC NSF-ки в PAL.
(upd 13.07.10 сейчас утилита "доводится до ума", скоро будет доступна для свободного скачивания)

Эта программа не меняет флаг, в ней используется другой метод (какой именно, я не уточнил).
Это позволяет запускать НСФ-ки на скорости 50 в плеерах, где PAL вообще не предусмотрен и флаги игнорятся.
Но это работает не всегда, хотя nsfplay/nsfplug и in_nintendulator.dll понимают НСФки, хакнутые этой прогой.

Главное достоинство метода - если плеер/эмулятор корректно воспринимает такую NSF-ку,
дисбаланса по высоте тона гарантированно не будет.
Файл либо не воспринимается, и играется на скорости 60, либо воспринимается и играется замедленно на 50,
при NTSC-шной высоте тона всех каналов. Это наиболее "похожий на денди" вариант.

Это можно проверить на плагине NEZplug++, который "некрасиво" играет NSF-ки с PAL-флагом (хакнутые первым методом)


Вложения:
Комментарий к файлу: В приложении находятся 3 NSF-файла Journey to Silius:
- оригинальный NTSC (00h)
- сделанный из него PAL, путём выставления PAL-флага (01h)
- оригинальный NTSC, хакнутый программой HardWareMan'a

Journey_to_Silius.7z [11.25 КБ]
Скачиваний: 454

_________________
Nestopia 1.37/1.40 Fixed


Последний раз редактировалось EvGS 13 июл 2010, 22:50, всего редактировалось 8 раз(а).

Сообщение 06 июл 2010, 16:18
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Цитата:
Потербляет 500~1000 Мгц CPU, в зависимости от выбранного качества ресемплинга.

Вот честное слово, не верю я в эти сказки о причинах сверх-тормознутости. Ладно, если эмулятор всей приставки или даже обрезанный вариант - NSF-плеер - CPU + APU. Но алгоритм ресемплирования - никак.
Самый лучший (можно сказать, идельаный) алгоритм основывается на ДПФ. Я проводил простые расчёты: выборку в 32768 семплов библиотека fftw в Матлабе обрабатывала что ли за 3 мс. Возьмём тяжёлый вариант: берётся выборка за всю секунду и ресемплируется. Даже если перевести это на выборку в 100к семплов (увеличение в 3 раза, домножение на разницу в логарифмах, плюс плохая факторизация числа) и ресемплирование до 44100 (то же самое, но влияет меньше, т.к. число меньше), умножить на 2 канала, получится... ну пусть 50 мс. Это 5% от мощности компа.
В реальности надо ресемплировать небольшими окнами размером по 4096 семплов (разницы относительно 32768 не будет), и вычислений получается раза в 2 меньше. Итого 2.5% мощности компа.

-- 06 июл 2010, 15:20 --

Это при том, что этот алгоритм - пальба из пушки по воробьям, он тяжёлый и изначально не для ресемплирования сделан. В плеерах используются более примитивные и более лёгкие алгоритмы (но качество не сильно страдает)... тогда откуда тормоза?

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 06 июл 2010, 16:28
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
На официальной странице указаны именно такие требования. В реальности же, я тестировал Lagrange Point (с VRC7)
при максимально возможном качестве передискретизации для всех эмулируемых чипов на Pentium III (tualatin) 1.13 ГГц.

Загрузка процессора ~30%, изредка до 50% подскакивает.

А вообще, почему тогда качественные плагины программной передискретизации такие прожорливые (например SRC (libsamplerate) и SSRC)?

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 06 июл 2010, 16:53
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
По второй ссылке упоминается использование ДПФ (FFT). Не знаю, насколько они прожорливые, не проверял. Почему - возможно, потому что используют самописные алгоритмы преобразования, и тот факт, что пропорции для преобразования плохо факторизуются и тем более не являются степенью двойки, играет огромную роль. А fftw - одна из мощнейших бесплатных либ в этом деле.
К примеру, Audition быстро и хорошо всё конвертит, правда, зачем-то применяет пост-фильтрацию. И да, Audition использует fftw.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 06 июл 2010, 17:02
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
SSRC (по второй ссылке) считается вообще одним из самых прожорливых конвертеров.
Но в тоже время, пока он и самый качественный. Видимо, поэтому:
Код:
This program converts the sampling rate of a PCM wav file. 44.1kHz sampling rate is used for a CD, and 48kHz is used for a DVD. However, converting between these frequencies is hard, because the ratio beteen these two frequencies is 147:160, which are not small numbers. Accordingly, we need a very long FIR filter in order not to degrade the sound quality during conversion. This program utilizes FFT to apply the FIR filter, and thus it does not need so much computation.

Писал его Naoki Shibata (PhD, Computer Science, 1993—2001)

SSRC загружает PIII-1.13 минимум на 60%, я заметно тормоза чувствую при использовании.

И, кстати: Страница Бульбы.
Цитата:
Автор формата VTX Роман Щербаков является одним из первых программистов, добившимся почти 100%-ного соответствия звучания эмулируемой и реальной микросхемы AY или YM. В этом могли убедиться пользователи его хорошо известного плагина для Winamp'а для проигрывания VTX...
...версия 4.0 не прошла широкого публичного тестирования, однако использованный в ней новый алоритм передискретизации (от naoki shibata), а также то, что сам автор пользуется именно ей, делает её небезынтересной для поклонников этого плагина...

_________________
Nestopia 1.37/1.40 Fixed


Последний раз редактировалось EvGS 06 июл 2010, 17:09, всего редактировалось 2 раз(а).



Сообщение 06 июл 2010, 17:07
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Простой пример: возьми проф. аудио редактор, открой файл длиной в несколько минут и сконвертируй его из 44100 в 48000. Посчитай, сколько времени это займёт и раздели на длину трека - это и будет процент прожорливости редактора.

-- 06 июл 2010, 16:10 --

Щас взял Аудишн, трек в 5 минут и апсемплил до 48000. Апсемплинг занял ~12... вру, 8 секунд, пост-фильтрация - 5 секунды. Используется Dual-Core 2 ГГц.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 06 июл 2010, 17:19
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
На моей машине 4-х минутный трек ресемплировался до 48000 Гц за ~3.5 мин. Сейчас точно посчитаю...
Изображение
может, с качеством переборщил.
CoolEditPro 2.1
-----------------------------------------
upd. ресемплинг закончился в 3:43, пост-фильтрация в 4:15. Итого 4.15

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 06 июл 2010, 17:35
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Вообще-то я пользовался всегда авторесемплингом при копировании куска из одного файла в другой. Видимо, там по умолчанию качество низкое выставлено... не знаю, но качество всегда было нормальным.
Можно привести пример теста: я строил кривую АЧХ при временнОм разделении каналов, когда один канал в фазе, другой в противофазе. В зависимости от семплов. Это делалось просто чтобы посмотреть, сильно ли меняется конечный сигнал при временнОм смешивании вместо суммирования. Потом опишу, как делается тест.

Щас открыл это окно в Аудишне. На максимальном качестве 5-минутный трек обрабатывается 35 секунд.
Как он измеряет качество, не знаю, может, размером выборки? При максимальном качестве, наверно, выборка гигантская, поэтому так долго.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 06 июл 2010, 17:39
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Цитата:
На максимальном качестве 5-минутный трек обрабатывается 35 секунд.

core2duo 2.0 и P3 1.13 это небо и земля. Плюс ко всему - SSE2, SSE3, SSSE3 всякие... их нет у меня

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 06 июл 2010, 17:47
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Если кому интересно, хотя мы уже отошли от темы, как делался мой тест с временным смешиванием.
Создаём 2-хканальный трек, генерируем свип частоты от 1 до max (т.е. скользящая частота), затем второй канал инвертируем.
Сохраняем файл как двухканальный и открываем как одноканальный (можно в хекс-редакторе в заголовке трека прописать ручками, что он одноканальный - там, где написано 0200, надо вписать 0100). Это простой способ сымитировать временное смешивание каналов.
В спектрограмме мы увидим скользящую частоту вверх и её отражение сверху - всё верно. Даунсемплим трек ровно в 2 раза. Как я и рассчитывал по матрицам и векторам в ДПФ, на низких и высоких частотах противофазные каналы имеют совсем разный эффект. Если каналы ставить в синфазе, всё наоборот.

Тот же пример я ресемплировал в SoundForge 9 простым копированием. На моё удивление противофазные каналы "съели" друг друга и получилась тишина. Хотя все расчёты показывают, что это неверно.

Цитата:
core2duo 2.0 и P3 1.13 это небо и земля.

Dual-Core вообще-то. Хотя он несильно слабее. Я же не знал, что за зверь-машина у тебя :)

-- 06 июл 2010, 16:49 --

На картинке видно, что на низких частотах (слева) противоположные семплы почти нейтрализуют друг друга. Чем выше частота, тем нейтрализация меньше.
Если каналы синфазные, т.е. тупо идёт два одинаковых семпла подряд, картинка будет другой - слева большая амплитуда, справа маленькая.


Вложения:
protiv.png
protiv.png [ 5.66 КБ | Просмотров: 17476 ]

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Сообщение 09 июл 2010, 20:12
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Возвращаясь к теме передискретизации, раз уж пошло: есть такой знаменитый плеер трекерных форматов - xmplay 3.5.1.
Мне очень нравится SID-плагин для этого плеера. Ознакомиться можно здесь. Звук у него действительно очень приятный.

Так вот, при использовании наилучшего метода "resampling with interpolation"
Изображение
тормоза и заикания ощущаются на P4 2.7 ГГц (если стоит stereo-режим), я не шучу.
О чём, собственно и написано на скриншоте.
Я прикрепил последнюю версию xmp-sid плагина: rev26 (31.01.2010). На официальном сайте старая лежит.

Аналогичная ситуация и с MilkyTracker. Если вы хотите перевести *.xm или другой модуль в *.wav
используя при этом максимально возможное качество ресемплинга, ждать придётся очень дооолго:
Изображение
Крупным модулям даже на мощных машинах по полчаса требуется.


Вложения:
xmp-sid-rev26.zip [169.66 КБ]
Скачиваний: 457

_________________
Nestopia 1.37/1.40 Fixed


Последний раз редактировалось EvGS 12 июл 2010, 22:29, всего редактировалось 1 раз.

Сообщение 11 июл 2010, 20:55
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Раз так, решился я и откопал свои наработки по ресемплеру (они всегда сырые были, т.к. слиьно ими я не занимался).
Для примера беру трек Regurgitate - Vulva Fermentation 2002-го года, 44100 Гц, имеющийся у меня в лосслессе. В треке всё забито до упора и после ресемплинга возможен клиппинг, поэтому амплитуду я уменьшил в 1.25 раза. И работал только с левым каналом для простоты и чтобы на скринах было видно больше информации.
На всех скринах показаны первые 10 секунд треков. Настройки спектрограммы в Audition:
Windowing Function - "Blackamn-Harris"
Resolution - 1024 для 22050-герцовых треков и 2048 для 44100-герцовых.
Decibel Range - 160 dB.
Диапазон дБ влияет на яркость спектрограммы.
Почему используется разное разрешние для разных треков? В оригинальных (44100) пусть будет 2048 полос, тогда толщина полосы = 22050 / 2048 = 10.76... Длина окна = 4096 семплов = 0.093 секунды.
В даунсемплированном треке частота меньше в 2 раза (22050), поэтому полос должно быть в 2 раза меньше. Тогда их толщина = 11025 / 1024 = 10.76... И длина окна тоже будет совпадать.
По скринам вы поймёте, что всё сделано правильно, т.к. на них картины спектрограммы для треков разной частоты совпадают. А если оставлять Resolution одинаковые, картины бы не совпадали.

Скрины советую скачать и сверять их в просмотрщике с Zoom Lock и/или Pan Lock. Различия видны в верхней части спектрограммы.

Итак, вот картина с оригинального файла во весь рост (0-22050 Гц):
http://www.fileden.com/files/2009/4/23/ ... g_full.jp2
А вот нижняя половина спектрограммы (т.е. частоты от 0 до 11025). Именно такую картину мы должны увидеть в 22050-герцовом файле (но это будет уже не половина, а вся спектрограмма) после идеального даунсемплинга в 2 раза.
http://www.fileden.com/files/2009/4/23/ ... ig_1_2.jp2
Даунсемплим оригинал в Аудишне в 2 раза с качеством 30:
http://www.fileden.com/files/2009/4/23/ ... vu_030.jp2
С качеством 150:
http://www.fileden.com/files/2009/4/23/ ... vu_150.jp2
С качеством 999 (лучшее):
http://www.fileden.com/files/2009/4/23/ ... vu_999.jp2
Как видно, 30 и 150 отличаются несильно, 999 выглядит уже лучше. Видно также, что по мере увеличения качества картина приближается к оригиналу (нижняя половина частот), в основном на верхних частотах. Но даже 999-е качество немного не дотягивает до оригинала.
А теперь мой ресемплер:
http://www.fileden.com/files/2009/4/23/ ... /vu_my.jp2
Картина полностью совпадает с оригиналом, только в левом верхнем углу небольшая вертикальная фиолетовая полоска, но это мелочь.
Также заметно, что у моего трека другая длина - это потому что я ресемплил один кусок, а не весь трек.

Выводы: мой метод работает. Вычисления скорости выше. Кстати, я никогда не читал о ресемплинге, а этот метод придумал сам путём простых рассуждений.
А если у других всё так медленно, я не виноват. Просто у них другие методы, выходит, не самые лучшие.

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

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 10 авг 2010, 13:27
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
В таком случае, я думаю, надо не бросать этот проект "в стол", а попытаться применить его куда-нибудь с пользой.

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 22 сен 2010, 22:53
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Я залил полную GAME NSF-коллекцию, пропатченную HWM'овской утилитой.
Теперь вы можете использовать NSFplug/NSFplay в роли "истинного денди-плеера".

Обнаружил наконец, как избавиться от неприятных щелчков DPCM.
Также можно немного убрать бас HiPass фильтром, это уж на любителя.
Я например, без такой эквализации слушать NSF не могу - бас треугольника уши режет. И не во всяком эмуляторе ведь HiPass реализован.
Ползунок "Sample Rate Conversion" желательно выставить в BEST для каждого чипа.


Вложения:
Комментарий к файлу: NSFplay & NSFplug settings
4011reg.PNG
4011reg.PNG [ 65.59 КБ | Просмотров: 17387 ]

_________________
Nestopia 1.37/1.40 Fixed


Последний раз редактировалось EvGS 22 сен 2012, 14:15, всего редактировалось 1 раз.

Сообщение 04 окт 2010, 00:59
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Опять возвращусь к теме ресемплинга. Vortex AY-3-8910/YM2149F плагин v.4.0 от Романа Щербакова
использует **общепризнанный лучшим на сегодня** SSRC ресемплер, за авторством Naoki Shibata.
Бульба пишет, что это самый качественный AY-плеер (по крайней мере, по части передискретизации он превосходит AY_Emul).

Загруженность Pentium 1133 Мгц на абсолютно чистой системе: 90-95%

Интересует правильная настройка этих примочек:
dithering: 1) none; 2) no noise shaping; 3) triangular spectral shape;
noise distribution: 1) rectangular; 2) triangular; 3) gaussian;

Какие параметры выбрать для получения максимального качества при разрядности 16 бит и ч.д. 44100 Гц?


Вложения:
V_Soft_Vortex_AY-YM_Emulator_4.0.PNG
V_Soft_Vortex_AY-YM_Emulator_4.0.PNG [ 77.38 КБ | Просмотров: 17370 ]

_________________
Nestopia 1.37/1.40 Fixed
Сообщение 30 май 2012, 00:29
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Rainwarrior взялся за доработку заброшенного nsfplay/nsfplug:
http://rainwarrior.thenoos.net/projects ... index.html
Напильником поработал прилично, см. changelog

Наконец-то добавлено панорамирование каналов:
Изображение

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 16 июл 2013, 11:51
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
NSFPlay 2.3
Изображение
Больше не нужно "патчить" NSF-ки. Текущая версия поддерживает денди-режим.

Это единственный NSF-плеер на сегодня, поддерживающий денди.
А ещё он умеет менять скважность square-каналов 25% <-> 50%

_________________
Nestopia 1.37/1.40 Fixed


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 17 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 64


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB