Мною планируется провести ряд экспериментов с оболочкой rockbox с целью выяснения, почему меняется звучание от версии к версии и получения наиболее "правильного" звука.
Как показала практика, звучание рокбокса может меняться даже от изменения внутри штатных кодеков, которые в алексмоде вообще не используются. Посему предлагаю от этого абстрагироваться и изучать "эволюцию" рокбокса без привязки к штатному железу (только лишь его "цифровую" часть).
От желающих принять участие будет требоваться описание того, что они услышат. Важные решения будем принимать коллегиально.
Программистам, заинтересовавшихся данной темой, готов предоставлять любые наработанные материалы, включая патчи для системы контроля версий git.
Как только будут готовы первые материалы, начнем
Добавлено (06.02.2013, 18:07) --------------------------------------------- Долго думал как начать, и решил: сначала тест, а потом пояснения (так сказать для чистоты эксперемента).
В этом тесте я попытаюсь проверить "на вшивость" миф о влиянии модуля dsp рокбокса на его звук. Тестирующим предлагается отгадать номер версии рокбокса, предложенной в данном тесте, и уверяю вас, его вы все слышали.
Я лишь убрал все модули внутри dsp, стоящие на пути сигнала, оставив только цифровую регулеровку громкости.
Все тесты будут находиться в этой директории https://www.dropbox.com/sh/4ife1s2xn5vdkej/qmXDbng88m в соответствующих папках. Там же будут находится патчи для git.
Итак. test1 - какая версия прошивки?
Сообщение отредактировал gemzza - Среда, 06.02.2013, 18:16
№1 - самый мягкий, где-то мутноватый, гулковатый звук; №3 - самый противоположный для №1; №2 и 4 где-то между ними, разделить их сложно - наверное под-устал уже; № D - моя постоянная прошивка на 3.4 получилась ближе всего к №1.
Слушал на 0дБ Х5 с удалённой малой платкой со всеми её возможными тараканами и с установленным ASRC подключенным к усилителю, через Etymotic 4P.
Сходу №3 показалась самой интересной. Сейчас слушаю, и уже практически не различаю))).
Вторая прослушка. Слушал на -7 дБ через HD650.
Самым сбалансированным и комфортным звучанием показалась (превычная?) постоянная версия D; По прежнему считаю №1 самой мягкой и гулкой - эхо много - раздражает; №2, 3, 4 - объединяет холодность, напряжённость в звучании. №2 - в целом не плохо, на как-то суховато в плане ревербераций, наполнения + некоторая жёсткость, немного мягче, теплее чем №4; №3 - хуже локализация, как буд-то что-то с фазой или разделением - воспринимается утомляюще, присутствует некая синтетика в женском вокале; №4 - общая упрощённость в постороении пространства, некоторая жёсткость и холодность - отличается от №2, но в общем похоже на два разных подхода обработанных по одному рецепту.
В итоге могу сказать, что самое сложное, для меня это пытаться искать общее/отличное не зная категорий, все версии звучат по-разному это точно, но сформулировать в чём разница сложно. Пытался плясать от "эталона" - версии D, как если бы остальные были её вариантами с включением/отключением какого-то эффекта, получилось или нет - посмотрим.
svas35, не торопитесь, давайте пока выясним в чем "суть прогресса", т.е. в чем же камень преткновения в звучании различных версий рокбокса. И зачем убирать DSP обработку рокбокса? На что она влияет? Опишите, пожалуйста.
Разорваться и выполнять пожелания всех форумчан я к сожалению не могу: у меня банально нет времени на это. Поймите меня правильно. Как только будет найден какой-либо консенсус, не волнуйтесь, никто забыт не будет!
Добавлено (07.02.2013, 22:14) --------------------------------------------- AfArt, спасибо! Хочу сказать, вы удивитесь, когда я расскажу, что я делал
Сообщение отредактировал gemzza - Четверг, 07.02.2013, 22:15
Мне кажется что тест3 это сток без dsp, 4 и 2 не слушал, ибо не могу оторваться от тест3
Добавлено (08.02.2013, 01:26) --------------------------------------------- причем изменения произошли во всем спектре, низы плотные верхи детальные, и ничего не выперает
тест2 в сравнении с тест3, сразу чувствуется меньше вч, отсюда и меньше пространства в панораме, четкость, собранность условно выше на тест2 возможно изза меньшего количества вч ревербераций, еще создается ощущение что тест2 быстрее возможно изза большей собраности.
тест4 в сравнении с тест3, меньше пространства более собранней, верха больше чем в тест2
на данный момент выбираю между тест3 и тест4, тест2 слишком темная
Сообщение отредактировал Ear-End - Пятница, 08.02.2013, 13:40
Итак, начинаем потихоньку разбираться в dsp-модуле рокбокса.
Сначала я бы хотел привести немного исходного кода рокбокса и пояснить его (для скептиков и людей, не разбирающихся в языке программирования C).
Все операции dsp производятся внутри одной функции, называемой dsp_process. Весь ее текст приводить не имеет смысла, приведу лишь интересующий нас фрагмент (к слову сказать, от версии к версии он функционально не менялся, желающие могут сами в этом убедится, посмотрев историю в git репозитории проекта рокбокс).
Данные после декодирования программным кодеком (flac, wav, ...) поступающие в 16-и битном виде, трансформируются функцией dsp->input_samples в 32-bit noninterleaved (потом, если кому интересно, расскажу как). В этом месте находится первый подводный камень полного отключения работы dsp-модуля, т.к. данные с разных программных кодеков поступают в разных форматах: 16-bit interleaved, 16-bit noninterleaved, и просто транслировать их минуя dsp модуль не получится.
Затем начинается обработка. Обратите внимание, что все функции, отвечающие за обработку данных (tdspeed_doit, dsp->apply_gain, resample, dsp->apply_crossfeed, dsp->eq_process, eq_filter, dsp->channels_process, dsp->compressor_process), перед вызовом имеют условие if, и если данная опция в рокбоксе отключена пользователем, то и соответствующая обработка проводится не будет. По этому, выкидывай программно эту обработку, не выкидывай, изменений все-равно (при отключенных опциях) никаких не будет. Этот абзац я посвящаю скептикам, которые думают, что модуль dsp - их враг №1!
После обработки данные опять преобразуются функцией dsp->output_samples в выходной 16-ти битный формат (если кому интересно, то же расскажу как), после чего, как мне кажется (я это еще не успел просмотреть), поступают на штатный кодек (ЦАП) плеера.
Вывод. Модуль dsp (при всех отключенных опциях) никак не влияет на исходный сигнал и сделан, в этом смысле, достаточно честно. Единственный момент, это преобразование входных и обработанных данных, но и там особых косяков я не заметил.
Добавлено (08.02.2013, 08:07) --------------------------------------------- Приведу примеры преобразований данных на входе и выходе модуля dsp для самостоятельного изучения.
Преобразование входного потока 16-bit noninterleaved в 32-bit noninterleaved
dsp отключалось следующим образом: просто закоментарил всю обработку, кроме dsp->apply_gain (там происходит ЦРГ). Как видно из вышеописанного, это не на что не должно было повлиять.
Делаем выводы, обсуждаем.
Добавлено (08.02.2013, 08:21) --------------------------------------------- Вот еще интересная информация про precut и ДСП.
Вся регулировка громкости внутри dsp модуля рокбокса производится в функции set_gain Приведу ее для наглядности.
Код
/* Combine all gains to a global gain. */ static void set_gain(struct dsp_config *dsp) { /* gains are in S7.24 format */ dsp->data.gain = DEFAULT_GAIN;
/* Replay gain not relevant to voice */ if (dsp == &AUDIO_DSP && replaygain) { dsp->data.gain = replaygain; }
Как можно заметить, уровень громкости "сливается" в переменную dsp->data.gain. Изменение его сводится к умножению громкости "по умолчанию" на неких коэфициент. Но, и precut и ЦРГ работают по одному и тому же принципу, так что разницы в их использовании нет никакой (с точки зрения обработки звука).
Спасибо. Будем значит разбираться. Вопросы: 1. Как простому смертному определить формат записи с определённым выходом ( "с разных программных кодеков поступают в разных форматах: 16-bit interleaved, 16-bit noninterleaved")? Т.е. теоретически есть определённый формат для которого выход с кодека в фомате соответсвующем выходному с DSP, и тогда можно попробовать выбросить DSP даже с Gain-регулятором. 2. Где в файлах РБ задаётся конфигурация? Может-ли быть так, что пункты меню не соответсвуют параметрам в конфигураторе кода (сбой при перезагрузке, замене части файлов и проч.) В я X5 менял прошивку "на лету", путём переименования папки РБ и последующей перезагрузки, т.е. если сохранение параметров происходит не в ней, а в оперативной памяти, например, а в конфиг сохраняется только при выключении, или переключение значений происходит, не жёстко, а как тригер (повысить-понизить значение) - могут образовываться нестыковки. 3. Имея готовую прошивку можно-ли определить как в ней реализован ЦРГ? Как в ваших сборках реализовано регулировка громкости только до 0дБ, а не до +6дБ, как в родной например? Готов согласиться, что 2 и 4 похожи между собой и на мою 3.4 (от nezabor кажется) при этом, но вот 1 и 3 уж сильно различаются. Я конечно теперь ещё раз всё переслушаю, но пока вопросов больше, чем ответов. Ещё, я не отмечал, он в некоторых, или всех тестах активна функция фэйд-ин/аут - настройки как-то лень было проверять и выравнивать - или показалось?))).
Сообщение отредактировал AfArt - Пятница, 08.02.2013, 10:38
1. С ряда кодеков данные идут 16-bit interleaved, с ряда 16-bit noninterleaved. Какой формат данных в каком кодеке используется можно узнать, сделав поиск в папке rockbox/apps/codecs файлов с текстом STEREO_NONINTERLEAVED и STEREO_INTERLEAVED (эти параметры будут внутри функции инициализации кодека). Более того, попытался просто транслировать данные, поступающие на вход функции dsp_process в выходной буфер, как раз преследуя цель полного отключения dsp-модуля из обработки сигнала. Но в итоге получил нечто похожее на белый шум из наушников. С этим надо разбираться подробнее.
2. Как и что происходит при перезагрузке рокбокса, я не выяснял. Рекомендую делать перезагрузку отключением питания плеера. На сколько я понял, за работу прошивки отвечает файл rockbox.xxx, где xxx - модель устройсва: iaudio, iriver, ...
3. Дело в том, что TLV320 аппаратно реализует диапазон -73 - 6 dB. Поскольку работу ЦРГ я делал в диапазоне -73 - 0 dB , как и все до меня (хотя как мне кажется на самом деле он -72 - -1 dB), то и регулятор громкости сделал "визуально естественным". Поверьте это ни на что не повлияло. Послушайте сами: в диапазоне 0-6 dB никаких изменений громкости на прошивке с ЦРГ быть не должно. Если вы почитаете мои объяснения про ЦРГ, думаю вам станет понятен принцип его работы. Узнать как что-либо реализовано в готовой (бинарной) прошивке можно лишь дизассемблированием, что хлопотно, трудоемко, да и не надо, как мне кажется. Все видно из исходного кода, главное знать, куда смотреть.
4. фэйд-ин/аут - это не в dsp, соответственно наверное должно работать Это по моему как-то связано с crossfade, а операции с ним находятся в файле pcmbuf.c. Я же пока работал внутри файла dsp.c.
Сообщение отредактировал gemzza - Пятница, 08.02.2013, 11:34
Давайте подытожим результаты прослушек. - В случае 3.10 отключение DSP дало результат - все отметили разницу в подаче. - В случае 3.4 отключение результата не дало - различие не уверенное. - 3.10 и 3.4 даже с отключенным DSP звучат по-разному. Стало быть в 3.10 есть какой-то косяк с применением настроек DSP, т.е. что-то остаётся включенным не смотря на отключение в меню, или какой-то не управляемый параметр срабатывает. Различия в подаче прошивок кроются не только в DSP. Будем по-порядку работать))).
Сообщение отредактировал AfArt - Пятница, 08.02.2013, 12:31
как это не дало, т2 темная т4 более нейтральная, по поводу 3.10 и т3 я упорно слышу разницу в пользу 3, думаю даже вслепую смогу отличить, ну а гран при бы отдал т4 она в конце концов показалась более собраной, быстрая музыка ей удается лучше, хотя и панорама не такая как у т3
Есть подозрение, что те сборки что есть у нас собственные не ровны тем, что собрал gemzza. Я пользуюсь постоянно уже около года версией 3.4, но она не идентична Т2 и Т4 - есть подобие в построении пространства, но гораздо больше "наполнения" информацией. Я предлагаю на время откинуть наши привычные прошивки и попытаться определить закономерности между 4я тестами и тем, что мы знаем о них конкретно. Если вас смущает именно однозначность отрицания различий между Т2 и Т4 - давайте скажим, что различий меньше чем между Т1 и Т3. По идее разница должна быть одинаковой ведь?
Сообщение отредактировал AfArt - Пятница, 08.02.2013, 12:58
Как мне кажется (как программисту), что разницы в звучании T1 и T3, так же как между T2 и T4 быть не должно. Попытаюсь еще раз внимательно все пересобрать (если будет время) и сравнить бинарники. Как вариант, могу выложить в качестве test 5 уже собранную сборку и посмотреть, найдете ли вы отличия (это к вопросу субъективности восприятия). А вообще, модуль dsp - это действительно начало. Но теперь надо подумать, что делать дальше.
gemzza, а вы можете оставить DSP, но забить в него жёсткие входные параметры, переменные отвечающие за его функции? Тем самым мы отбросим гипотезу с не одинаковыми (не правильными) управляющими командами. Вдруг где-то ошибка и управляющее значение не соответствует заданному? Ну и оставив модули в коде, исключим вариант, что его какие-то промежуточные значения используются в других модулях обработки, если такое возможно конечно.
Сообщение отредактировал AfArt - Пятница, 08.02.2013, 14:29
AfArt, это сделано, допустим, в тестах 1 и 4 (где оставлено только изменение громкости). Если вы сомневаетесь, попробуйте в тесте только с ЦРГ включать и отключать параметры и смотреть на изменение звука. При отключенный параметрах должен быть такой же звук, как и без dsp (но с ЦРГ) (имеется ввиду для двух тестов с одной версией рокбокса).
Я кажется понял, что вы имели ввиду :). Дело в том, что я пока не знаю, где прописываются начальные настройки звука. Думаю, что проще самому вручную все запретить, и должно получится то, что описано в предыдущем абзаце.
Сообщение отредактировал gemzza - Пятница, 08.02.2013, 19:28
Если это не принципиально, то ладно - вам виднее. Я предполоил, что выбрасывание части кода, как у вас сделано, может быть не тем же самым, что и его строгая работа. Может быть к этим процедурам обращается еще что-то - озвучка меню, тех. сигналы и т.д. Не понятно то, что факт блокировки dsp проявился на 3.10. Вообще какие выводы вы сделали для себя? Что вы сами выслушали?