Scene phase что это
Категория:Сцены
Навигация
Персональные инструменты
Пространства имён
Варианты
Просмотры
Поиск
Статья не закончена!
Содержание
Обзор
Сцены обрабатывают поведение множества NPC в разговорах а также различные «катсцены»(cut scenes). Сцены включают в себя диалоги, таймеры, и пакеты. Сцены могут варьироваться от простого разговора между 2 случайными NPC до сложной, детально спланированной сцены для квеста.
Ознакомьтесь с вкладкой Scenes Tab чтобы узнать подробнее о редактировании сцен в Creation Kit.
Действующие лица
Актер может быть одновременно задействованным только в одной сцене. В общем, когда сцена начинается и один или несколько её актеров уже использованы в другой сцене, новая сцена будет приостановлена, пока все её актеры не станут доступными.
Однако сцена, которая помечена как «прерываемая»(Interruptible) (см. ниже) будет остановлена (НЕ приостановлена), когда другая сцена, использующая тех же актеров, предполагает запуститься. Это позволяет более важным сценам не ожидать менее важных (например, случайные разговоры).
Действия пакетов сцены переопределяют любые другие пакеты, которые могут быть у актера. Но если актеру сцены в настоящее время не назначается пакетов действий, этот актер будет выполнять любой пакет из тех, которые могут быть запущены (the highest valid package on their package stack).
Принцип работы
Запуск сцены
Сцена может быть запущена двумя способами:
Когда сцена начата, «Начальный» (Begin) фрагмент будет запущен и сцена начнется с проверки условия начала фазы 1(Begin Conditions on Phase 1).
Начало фазы
Сцена проверяет, запустить ли данную фазу проверяя Начальные условия(Start Conditions) этой фазы. Если проверка условии вернет истину, то фаза запустится. Если же Начальные условия не прошли проверки, фаза пропускается (на это фазе никогда не запустятся фрагменты скрипта по Началу(Start) или Завершению(Completion)).
Если фаза запущена, то фрагмент скрипта «Start» тоже будет запущен, затем действия, начинающиеся этой фазе, будут привязаны к соответствующим актерам.
Завершение фазы
Сцена остается в этой фазе, пока последняя не закончится, это может произойти двумя способами:
Действия будут завершены когда:
Учтите, что любые действия на мертвом или отключенном (disabled) актере сразу считаются завершенными. (Мертвый/отключенный актер не разговаривает и не запускает пакетов.)
Когда фаза завершается, то перед переходом к следующей фазе выполняется скриптовой фрагмент из блока Completion script fragment. Далее сцена продолжается, проверяя начальные условия следующей фазы и так далее.
Концовка сцены
Scenes can end in several ways:
No matter how the scene ends, the scene’s «End» script fragment is called.
Повторяющиеся сцены
Случайные разговоры
The game sends two types of events when actors try to initiate conversations with each other: Actor Hello Event and Actor Dialogue Event.
Quests placed in the appropriate node of the Story Manager are used to respond to these events. (This replaces the conversation system used in Fallout and Oblivion.)
As a way to streamline this process, scenes can be marked «Begin on quest start» (which initiates the scene automatically when the quest starts), and «End quest on scene end» (which stops the scene’s quest when the scene ends).
Actor Hello Event
This event is sent when a moving actor (when allowed by the «Random Conversations» flag) pass close enough to a non-moving actor.
Actor Dialogue Event
This event is sent when actors (when allowed by the «Random Conversations» flag on their package) find a valid conversation target.
If the event triggers a scene, the AI code controls both actors with «interrupt behavior»:
Управление случайными разговорами
Random NPC conversations are controlled by the following gamesettings:
Gamesetting | Value | Description |
---|---|---|
fAISocialRadiusToTriggerConversation | 2000 | Actors outside this radius will not try to initiate conversation with each other (exterior) |
fAISocialRadiusToTriggerConversationInterior | 1000 | Actors outside this radius will not try to initiate conversation with each other (interior) |
fAISocialchanceForConversation | 25 | Percent chance that the actor will choose to initiate a random conversation |
fAISocialchanceForConversationInterior | 25 | Percent chance that the actor will choose to initiate a random conversation (interior) |
fAItalktosameNPCTimer | 120 | How long until you can talk to the same actor again (seconds) |
fAISocialTimerForConversationsMin | 30 | Min value for timer for the next time this actor will look to start a random conversation |
fAISocialTimerForConversationsMax | 60 | Max value for timer for the next time this actor will look to start a random conversation |
iAISocialDistanceToTriggerEvent | 120 | How close actors want to get when initiating a random conversation |
fAISocialTimerToWaitForEvent | 0.5 | How long an actor will wait for the Scene Manager to return a random conversation scene after firing the Actor Dialogue Event |
Valid conversation targets:
Эта категория в данный момент пуста.
Chapter 5 — Converting the Game to Composer
⟨ Previous | Next ⟩
Scene Structure
As you learned in the previous chapter, there are dedicated places in a Lua file to put different aspects of your program. In our original version of Star Explorer, we had the luxury of writing our code in a linear order, for example creating an object, positioning it on the screen, potentially adding a physical body, linking up event listeners, and then moving on to the next item.
Consider this concept like a movie scene: if the director is transitioning into a scene — fading in, panning the camera to a point, etc. — the actors in the scene usually won’t begin acting until the scene is «ready» and focused. The same approach applies to Composer scenes. For instance, we already added commands to spawn asteroids and put them in motion, but in this game.lua scene we’re about to create, those commands will only run once the scene is fully on screen.
Accessible Code
Let’s get started! The first point of attack is the area of the file.
Make a copy of the standard file, included with this chapter’s source files.
Rename this copy to game.lua and place it within your StarExplorer project folder.
Physics Setup
Image Sheet
Next we’ll need the image sheet configuration. Let’s paste that just below the physics commands:
Initial Variables
Following the image sheet setup, paste in the following localized variables from main_original.lua :
Display Groups
In the last chapter, you learned how to insert scene objects into the scene’s view group ( sceneGroup ). Now, an important concept to understand is that display groups can actually be inserted into other display groups! As such, we can maintain the three display groups from the original game and instill them into the scene’s view group.
To facilitate this, we will defer the actual creation of our three groups until we create the scene. However, we still need to define the variables now using the forward declaration method that you learned about earlier. So, instead of associating each variable with a display.newGroup(), just leave them undefined for the moment:
In our original version, we created the background, ship, lives text, and score text immediately following initialization of the display groups. Now, because we’re only creating local references for the display groups, we must defer these actions until later, inside the scene:create() function.
Game Functions
First, copy over the updateText() function:
Follow this with the createAsteroid() function:
Now observe the line directly following the fireLaser() function in main_original.lua :
As you copy/paste in the next few functions, skip the commands which immediately follow them. Specifically, omit the following lines when you’re copying over code from main_original.lua to game.lua :
Essentially, the remainder of your space should be populated as follows:
Great job! We now have all of the code copied over. In the next few sections, we’ll illustrate how the Composer scene: functions tie our game together.
Creating the Scene
Let’s start with physics. Inside the scene:create() function, add the command physics.pause() as follows:
What is the purpose of this command at this point in the scene’s life cycle? Remember that our game scene isn’t truly on screen at this point and, because we don’t want the game to start quite yet, we’ll immediately pause the physics engine. This allows us to create objects, assign their physical bodies, and position them, but they won’t be affected physically until we the physics engine.
Next we need to create the three display groups for which we previously just defined forward references. Add the following highlighted lines:
As you recall, most Corona display object APIs accept a valid display group variable as a convenient inline shortcut for inserting the object into that group. However, display.newGroup() is one of the exceptions to this shortcut — you can’t simply supply an inline group reference to insert the new display group into an existing group. Instead, you must use the object:insert() command.
With the groups in place, let’s create the background:
Now let’s create the ship and both text objects:
Essentially, you can create a forward reference in the area, assign an actual object to that reference inside a scene: function, and then other functions will associate the reference with the new object.
Moving onward — remember how we deferred adding the ship’s «tap» and «touch» event listeners in the section because ship didn’t yet exist as an actual object? Now that the ship does exist, let’s add its event listeners:
Showing the Scene
Transition Effects
While we didn’t utilize one for the menu scene, the composer.gotoScene() command allows you to specify a transition effect such as fading in, sliding in from a screen edge, from the previous scene, etc. Naturally, there is a time duration associated with the start and finish of scene transitions, and this is where scene phases come into play.
Scene Phases
Notice that the scene template already contains a conditional statement to check for each phase of scene:show() :
Essentially, these commands accomplish the following:
Let’s check the result of our code! Save your modified game.lua file and then relaunch the Simulator. As expected, you’ll be presented with the menu screen, but now we can actually proceed. Tap/click the Play button and, assuming you did everything up to this point correctly, Composer should proceed to the game.lua scene which plays identically to our original version of the game.
Hiding the Scene
At this point there’s a significant flaw in the game. When the player runs out of lives, the asteroids will continue to build up and there is no way to restart the game. This means that we need to adapt our game.lua code so that Composer exits the scene when the player runs out of lives.
When we intend to exit the game scene, remember that the gameLoopTimer timer will still be running, spawning asteroids and removing asteroids. In addition, the physics engine will still be moving asteroids about. All of these things should be stopped inside the scene:hide() function.
These commands essentially reverse what we did in the scene:show() function:
Event Link-Up
Our scene:hide() function is now complete, but we need to take a few final steps to make sure it actually gets called. Logically, a scene will never be hidden unless you intentionally cause it to hide, and this occurs when you tell Composer to go to a different scene ( composer.gotoScene() ).
In our game, we want to return to the menu — or eventually go to the high scores scene — when the player dies and has no remaining lives. This condition has already been accounted for partially in our previous code, so all we need to add is an additional command in the same place.
Now, directly below the command, add the following highlighted command:
The timer.performWithDelay() command is nothing new — this instance simply calls a function endGame() after 2000 milliseconds (2 seconds). Of course, we haven’t actually written the endGame() function yet, so let’s write it now. Directly above your onCollision() function, add this new function:
For now, this function simply returns to the menu by calling composer.gotoScene().
Scene Cleanup
Hopefully players will want to play the game again! By default, Composer caches scenes in memory to save processing power when the scene is revisited. So, even though it’s hidden at this point, your game scene remains basically as you left it. If you play the game again, the scene comes back into view and new asteroids begin spawning. Unfortunately, there are some problems:
Essentially, this command removes and destroys the game.lua scene as if it never existed. By doing so, you lose the caching benefit mentioned above, but for most scenes it’s not worth the effort to programmatically reset each aspect individually.
With this simplified approach, let’s modify our scene:hide() function:
Time to test our changes! Save your modified game.lua file and then relaunch the Simulator. Now you should be able to play the game repeatedly and get a clean reset each time.
Extra Credit
Earlier in this chapter, you learned about scene transition effects. We already applied one to the composer.gotoScene() command within the endGame() function, so now let’s apply one when the game scene comes into view.
If you recall, the game scene is only accessed via the Play button in the menu scene, so we’ll modify that file:
Open the menu.lua file within your StarExplorer folder.
Find the gotoGame() function and add a «crossFade» effect with a duration of 800 milliseconds to the composer.gotoScene() command:
Great! Now the game scene — and the high scores scene, once we create it — will transition in/out with a nice effect.
Chapter Concepts
Here’s a summary of the concepts we covered in this chapter:
Command/Property | Description |
---|---|
physics.pause() | Pauses the physics engine. |
object:insert() | Inserts an object into a group. |
timer.cancel() | Cancels a timer operation initiated with timer.performWithDelay(). |
object:removeEventListener() | Removes an event listener from an object. |
composer.removeScene() | Removes a specific Composer scene. |
© 2021 Solar2D All Rights Reserved.
Help us help you! If you notice a problem with this page, please report it.
Четвёртая фаза киновселенной Marvel: что показали в финале «Локи»
Как финалы «ВандаВижен» и «Локи» подготовили нас к мультивселенной в Marvel и что покажут в будущих фильмах.
Несмотря на большой перерыв в выходе фильмов и бесконечные переносы премьер Marvel продолжают выпускать вполне успешные по просмотрам сериалы, которые подготавливают зрителей к новой фазе. А финалы «ВандаВижен» и «Локи» дают нам много пищи для размышления на тему того, что будет дальше.
Диалоги и философские рассуждения Локи практически дали ответ на волнующий всех вопрос о мультивселенной. Теперь она официально запущена. Нас ждут разные таймлайны, разные варианты персонажей и совершенно непредсказуемый курс на будущее.
Финал «Локи»
Прежде чем переходить к небольшим деталям того, как события «Локи» и «ВандаВижен» повлияли на кинематографическую вселенную Marvel, давайте ещё раз вспомним финал и обсудим будущее самого Локи.
Второй сезон, скорее всего, будет намного динамичнее и более насыщен событиями. Прежде всего, Локи надо будет выяснить, в каком из таймлайнов он находится и что здесь за версия TVA. Ему надо будет вновь завоевать доверие Мобиуса во вселенной, где Канг совершенно по-другому переписал историю. И Кангов мы ожидаем больше. Ведь есть бесконечное множество путешествующих во времени злодеев, с которыми нужно сразиться. А ещё Локи и Сильвии придётся разобраться в своих отношениях.
Канг и его будущее в MCU
А ведь нас предупреждали, что именно «Локи» окажет самое большое влияние на будущее MCU. И вместо того, чтобы дать нам полноценного злодея в финале, фанатам представили версию Канга Завоевателя изрядно уставшего от управления временем. Этакий харизматичный могущественный социопат с нотками безумия. И представим, какие же у него будут варианты в более злобных версиях. Но сделал ли финал «Локи» Канга новым Таносом? Ведь по началу в фильмах и Танос действовал со стороны, не представляя реальной угрозы. Увидим ли мы его сразу в нескольких фильмах? Увидим ли мы сразу несколько версий Канга, которые соберутся вместе? Есть бесконечные возможности того, как этот злодей проявит себя в четвёртой фазе.
Что, если…?
После введения мультивселенной Marvel могут делать всё, что заблагорассудится, в том числе вполне логично объяснить сериал «Что, если…?», который может быть не просто фантазией, а вполне себе существующими реальностями. Теперь в MCU спокойно и без каких-либо вопросов можно вводить и Тома Харди с его Веномом, и Людей Икс, и Фантастическую четверку, и вообще кого угодно. Даже оживлять персонажей. Увидим мы разные версии героев из разных таймлайнов уже 11 августа.
Человек-Паук: Нет Пути Домой
Похоже, что именно «Человек-Паук» станет первым фильмом Marvel, где мы столкнёмся с последствиями финала сериала «Локи». Да, все мы ждём появление трёх пауков, о которых нам не перестают говорить в сети. Но более реальным остаётся вариант того, что из разных вселенных герой Тома Холланда встретит именно злодеев. Их появление из других таймлайнов подтверждают слова актёров, которые обтекаемо отвечают на вопросы о персонажах. А может быть Мистерио и не полностью солгал Питеру о других вселенных?! Остаётся ждать первый трейлер, а также сам фильм, который всё ещё намечен на декабрь этого года.
Доктор Стрэндж: В мультивселенной безумия
Итак, начнём с того, что сам Стрэндж появится сначала в фильме про Человека-Паука, пока не известно с каким количеством сцен, но события «Паучка» точно повлияют на сиквел самого Доктора. В сольнике у Стрэнджа ожидается серьёзный противник, ведь сам маг уже достаточно силён. А подтвержденное присутствие Алой Ведьмы и самого Локи может намекать на то, с чем именно мы будем иметь дело.
Сцена после титров сериала «ВандаВижен» показала, что Ванда далеко не просто так отдыхает в горах вдали от цивилизации. Её астральная проекция Алой Ведьмы или альтер-эго (или как это правильно назвать) почитывает занимательную тёмную книгу, которая точно прокачает её магические способности. На фоне можно услышать крики детей Ванды, которые зовут на помощь. Хотя считалось, что Билли и Томми были лишь проявлением её собственной магии. Значит ли это, что уже в «ВандаВижен» нам показали последствия появления мультивселенной.
Скорее всего, в «Мультивселенной безумия» Алая Ведьма будет искать своих детей по другим вселенным. И пока все ждали появления Мефисто, возможно это именно Канг был наблюдателем со стороны, влияющим на события. Выход фильма запланировал на март 2022 года.
Человек-муравей и Оса: Квантомания
Что ж, мы уже познакомились с одной из версий Канга Завоевателя и вполне логично, что в будущем фильме нам представят ещё один вариант. Есть одна деталь, на которую стоит обратить внимание: в предыдущем фильме, когда Хэнк Пим спасается из квантового мира, нам показывают целую цивилизацию внутри. Мог ли там застрять один из Кангов? Возможно, он освободится и будет мстить. Ждём фильм примерно в феврале 2023 года.
Scene
Aesthetics Wiki Disclaimer: We do not endorse musical acts like Blood On The Dance Floor, which was created by a known and outed pedophile and sexual predator in Dahvie Vanity.
Scene
Other names
Decade of origin
Key colours
Related aesthetics
Contents
Fashion
Scene fashion changed through the years and will continue to depending on what’s popular at the moment. In the mid-2000s scene kids would wear clothing that wasn’t popular at the time, and as scene became more mainstream, the fashion became more exaggerated. Scene boys would wear clothing that was considered feminine, such as tight clothing and eyeliner, and girls would wear clothing that was not seen as popular at the time.
Popular items among scene kids include:
Music
Like the fashion, scene music changed through the years as well. In the early 2000s to around 2005, scene kids would listen to pop-punk and emo-pop, while in 2005 to 2007 scene kids listened to hardcore, metalcore, deathcore and post-hardcore. In 2008, electronic music became popular within the subculture and a genre called crunkcore increased in popularity.
Popular bands within Scene include:
Along with other acts that were incredibly popular in the MySpace era of social media.
Resources
External links to help get a better understanding of this aesthetic.
ЦАП и цифровой фильтр. Чую звон да не знаю, где он.
Закрыть Показать Категории
Команда Era in Ear
Эксперт по Hi-Fi и High-End направлению
ЦАП и цифровой фильтр. Чую звон да не знаю, где он.
ВСТУПЛЕНИЕ
Сегодня мы коснемся довольно обширной темы. И важной с точки зрения преобразования цифрового звука в аналоговый сигнал. Когда мы говорили про цифро-аналоговые преобразователи, то коснулись темы фильтрации. Фильтр низких частот в ЦАП служит для выделения определенных частот, несущих полезный сигнал. И дальнейшего подавления “лишней” частоты, которые содержат шумы квантования, ошибки передискретизации и прочие артефакты. Такие как алиазы. Что это за фантастические твари и где они обитают? Алиазами называют паразитные “клоны” основного сигнала, копирующие его амплитуду, но “живущие” в диапазоне частот, существенно превышающих полезную. То есть за пределами нашей слышимости. Цифровая фильтрация, как и аналоговая, помогает надежно спрятать от наших глаз и ушей этих фантастических тварей.
“Если шумы находятся за пределами нашей слышимости, то зачем нужен фильтр?” — спросите вы и будете правы. Отчасти. Человеческое ухо — это пример простого и эффективного аналогового фильтра. Но если мы не слышим цифровую грязь записи, то это не значит, что ее нет, верно? Поэтому одними ушами отделаться нельзя. Нужно придать исходный сигнал фильтрации. Причем, иногда этот процесс бывает сложным. К тому же разнообразным. Существует немало вариантов цифровой фильтрации при обработке сигнала. Вы наверняка с ними сталкивались, если ковырялись в настройках плеера или имели дело со стационарными ЦАП для стереосистем. Сегодня я постараюсь простыми словами объяснить отличия между разными типами фильтров. А также поговорим о том, как они влияют на восприятие звука. Или не влияют.
АНАЛОГОВАЯ И ЦИФРОВАЯ ФИЛЬТРАЦИЯ
Вернемся немного назад. Цифровое аудио живет “по закону” теоремы Котельникова и частоты Найтквиста. Это говорит о том, что любой аналоговый сигнал может быть точно воспроизведен, если ширина его полосы менее половины частоты дискретизации сигнала. Проще говоря, частота выборки ЦАП должна быть не менее, чем вдвое больше частоты сигнала.
Например, формат CD. Как вы помните, частота дискретизации CD-проигрывателя 44,1 кГц. Это значит, что ЦАП “учитывает” сигнал до 22,05 кГц. То есть это стандартные 20 кГц плюс 2,05 кГц в качестве “буферной зоны”.
АНАЛОГОВЫЙ ФИЛЬТР
Помните, как изображается сигнал в формате PCM? В виде “лесенки” ступенек, описывающих синусоиду оригинального сигнала.
На деле сигнал не воспроизводится ступенчато. Аналоговый фильтр выступает в качестве интерполятора. Он, проще говоря, соединяет опорные точки на ступенчатой кривой цифрового сигнала. Так формируется восстановленная синусоида аналогового сигнала.
В идеальных условиях мы имеем срез частот выше ½ частоты дискретизации. Но реальность не терпит идеала, поэтому зачастую мы сталкиваемся c алиазами. Алиазы — понятие из области статистики и аудио, оно означает наложение, повторение и неразличимость непрерывных сигналов при их дискретизации. В аудио это проявляется как наложение на низкочастотный “полезный” сигнал его четных и нечетных гармоник высокого порядка.
На рисунке выше отображено 4 положения сигнала. Первое — сигнал без фильтрации, наполненный алиазами. Второй — наложение фильтра. Фильтр отображен в виде красной зоны спектра. Третий — идеальный пример работы фильтра, отсекающий алиазы. И четвертый — реальность. В которой алиазы, лежащие за пределами ½ частоты дискретизации, создают шумы уже в “нижней” половине частоты. То есть теоретически слышимые человеческих ухом.
Тут самое время ознакомиться с составляющими фильтра. Условно он делится на три полосы: пропускная полоса, переходная полоса и полоса заграждения. В пропускной полосе фильтрация не производится, сигнал идет “как есть”. Далее в полосе заграждения работает фильтрация и отсекает ненужные частоты. А между ними находится “серая зона” переходной полосы. То есть в ней и происходит “срез” сигнала, его частичное подавление. Угол среза и ширина полосы определяет восприятие слышимого сигнала. При этом условная граница полос пропускания и заграждения определяется коэффициентом усиления (гейном) фильтра. Он регулирует соотношение входного и выходного уровней на заданных диапазонах частот.
Аналоговый фильтр не может обеспечить резкий переход между полосами пропускания и заграждения. Как следствие, это отражается на том, насколько эффективно работает фильтрация. В результате побочным эффектом интермодуляции при восстановлении аналогового сигнала становится остаточный ультразвук, проникающий в область полезного сигнала. С одной стороны человеческое ухо невосприимчиво к ультразвуку. Но с другой несовершенство аппаратуры приводит к линейным и нелинейным искажениям, накладывающимся на эти артефакты. И синергия искажений и алиазов может сказаться более ощутимо, нежели условный ультразвук.
ЦИФРОВОЙ ФИЛЬТР
Вот тут мы приходим к ставшему уже родным понятию оверсемплинга (передискретизации) и цифровой фильтрации. Многократное увеличение частоты дискретизации позволяет сдвинуть зону пропускной полосы дальше от полезного сигнала. Тем самым уменьшив влияние на него.
Но самое важное тут — применение цифровой фильтрации. Как уже говорилось, аналоговый фильтр работает более плавно и не дает резкой отсечки при фильтрации. Цифровой фильтр, применяемый при оверсемплинге, имеет не только более узкую переходную полосу, но и более крутой срез частоты, позволяющий буквально “отрубить” частотку выше ½ частоты дискретизации. В отличии от аналогового, делающего это более мягко и плавно.
На последнем рисунке видно, как цифровая фильтрация уменьшает негативное влияние алиаз на полезный сигнал по сравнению с аналоговым фильтром.
ЦИФРОВОЙ ФИЛЬТР: ВИДЫ И ОТЛИЧИЯ
Вы наверняка сталкивались с разнообразием цифровых фильтров в своих плеерах. Если раньше выбор лежал буквально между fast roll-off и slow roll-off, то сегодня он стал значительно шире. Например, мой плеер дает мне альтернативу в виде семи разных фильтров. Другой вопрос, что они не имеют решающего влияния на звук. Однако, все же есть один вариант, который по каким-то необъяснимым причинам нравится больше остальных. Сталкиваясь с аппаратурой во время обзоров, тоже находишь оптимальный для себя вариант и останавливаешься на нем. Главное — помнить, что нет правильных и неправильных цифровых фильтров. Они все делают свою работу. По-разному.
Когда говорят о цифровой фильтрации, то часто применяют понятия фаза, затухание и звон. Начнем с последнего. Звон — это артефактные колебания звука, которые могут как предшествовать, так и следовать за входным импульсным сигналом. Его поведение определяется работой цифрового фильтра.
Дискретный импульсный сигнал имеет максимальную амплитуду и минимальную длительность. Грубо говоря, один семпл с максимальной амплитудой. Но влияние цепочки преобразований и обработки приводит к тому, что восстановленный сигнал воспроизводится не идеально. Если обратиться к тексту про ЦАПы, к разделу о том, почему раньше ругали дельта-сигма ЦАПы. И там можно найти три рисунка с изображением меандра и примером того, как фильтрация влияет на образование предварительного “подзвона” при воспроизведении тестового сигнала.
На рисунке выше показан тестовый сигнал в разделе частоты и в разрезе времени. Поданный дискретный сигнал во временном домене не будет дискретен. В данном случае фильтр “обеспечивает” ему две фазы затухающих или нарастающих колебаний. То есть того самого звона, послезвучия. Почему это происходит? Чтобы ответить на этот вопрос, нужно объяснить, как работает цифровой фильтр с точки зрения вычислений.
ЛИНЕЙНО-ФАЗОВЫЙ ФИЛЬТР
Цифровой фильтр “разбивает” звуковой сигнал на несколько семплов. Несколько — не три-четыре, а достаточно большое количество, чтобы можно было оперировать порядком применения гейна фильтра. Далее к каждому семплу применяется определенное усиление (гейн). В данном случае наивысший гейн был применен к среднему семплу (медиане), далее каждый последующий от медианы (нулевого семпла) семпл получил свое усиление, ниже чем получает медиана. На выходе фильтр производит суммирование полученных произведений. Вот это и есть итоговый аналоговый сигнал после оверсемплинга и фильтрации.
Но неидеальность аппаратуры и ограниченность частотного диапазона приводит к возможной слышимости пре- и пост-эха — того самого подзвона. Следовательно, от порядка применения гейна фильтра зависит также и восприятие звука, его характер, ощущение в пространстве.
В предыдущем рисунке был изображен принцип работы с сигналом фильтра с линейной фазой. При такой фильтрации предшествующий и следующий за основным сигналом звон получает отзеркаленный гейн. В результате мы имеем не только послезвучие, звенящее затухание, но и предшествующее пре-эхо. То есть еще до возникновения сигнала существует паразитный сигнал.
ФИЛЬТР С МИНИМАЛЬНОЙ ФАЗОЙ
Для того, чтобы решить эту проблему, был применен фильтр с минимальной фазой. Он работает по тому же принципу распределения гейнов и суммирования результатов усиления каждого семпла выборки. Но нулевой семпл, получающий максимальное усиление, смещен из медианы (середины) выборки в ее начало. В результате наблюдается отсутствие пре-эха, но пост-эхо, подзвон, получает большее усиление. Так как в рассмотренном ранее фильтре с линейной фазой гейн более низкого порядка делился поровну между предшествующими нулевому семплу (минус-первый, минус-второй…) и следующими за ним (первый, второй…). то влияние каждого из них было уравновешено. В случае с минимальной фазой мы видим отсутствие предварительного звона. В свою очередь более сильно выражено послезвучие.
Кроме чистых линейно- и минимально-фазовых фильтров применяются еще и модифицированные аподизирующие фильтры. Аподизация — это метод фильтрации, использующийся в частности для обработки аудио сигнала. Он применяется для снижения влияния пре- и пост-эха как в линейно-фазовых, так и в минимально-фазовых фильтрах.
ИМПУЛЬСНЫЕ ПЕРЕХОДНЫЕ ПРОЦЕССЫ
Разобравшись с основными типами цифровых фильтров, перейдем к частным случаям. Теперь речь пойдет о работе с импульсными переходными процессами (или импульсными характеристиками), а именно, как те самые fast/slow/super slow roll-off влияют на звучание системы.
Если линейный или минимальный фазовый фильтр по-разному работают с фазами сигнала и звона, то частные случаи фильтров определяют работу с переходными процессами. Так, если super slow roll-off обеспечивает практически полное отсутствие переходных процессов (звона), то fast roll-off переходные процессы не подавляет. Они могут как предшествовать сигналу, так и следовать после него, что характерным образом отражается на звучании.
Иллюстрация разницы в работе фильтров fast roll-off и slow roll-off показана на рисунке выше. Кроме того, что фильтры отличаются по кривой АЧХ (спад на ВЧ на slow начинается раньше, чем на fast), есть отличия и в их импульсной характеристике. При медленном спаде импульсная характеристика минимальна, но при применении фильтра с быстрым спадом и более ровной АЧХ в области ВЧ мы получаем более выраженную и насыщенную импульсную характеристику. В зависимости от фазового типа фильтра это может быть пост-звон или пре- и пост-звон. Не забываем, что единственного правильного фильтра попросту не существует. Таким образом, фильтр нужно подбирать как под ту или иную музыку и аппаратуру, так и руководствуясь личными предпочтениям. И не забываем про помещение!
ФИЛЬТР И ЕГО ВЛИЯНИЕ НА ЗВУК
А теперь “вы ступаете на очень тонкий лед, мои друзья Педигрипал”. Можно бесконечно спорить о том, насколько заметна разница в фильтрации на итоговом звучании и заметна ли она вообще. Я склоняюсь к тому, что отдельные фильтры могут быть более выражены в своей работе, нежели другие. А также отдельные устройства (даже от одного и того же производителя!) могут иметь разную степень влияния типа фильтрации на то, что доходит до нашего уха. Это настолько сложная и многофакторная система, что рассматривать один лишь фильтр — не совсем правильно. Но что если мы говорим про влияние в отдельной конкретно взятой замкнутой системе?
Я здесь приведу те характеристики, которыми наделяют сам производитель те или иные фильтры. Уж им то виднее! Информация взята на официальном сайте ESS Technology. Далее бережно мною переведена (включаем режим моего тезки “Гоблина” Пучкова). А затем брутально дополнена.
Linear-phase fast roll-off filter или линейно-фазовый фильтр с быстрым спадом. “Фильтр по умолчанию”. Звучание ясное, нацеленное на выделение области верхних частот. Хорошо подходит для записей инструментов, богатыми обертонами. Характер звучания мощный, чуть напористый и несколько агрессивный.
Linear-phase slow roll-off filter или линейно-фазовый фильтр с медленным спадом. Импульсные характеристики также симметричны, но выражены куда менее. Звучание менее напористое и более расслабленное на верхних частотах. Низкие частоты обладают большим “панчем”. Саунд ближе к естественному, нейтральный и комфортный. Детали менее навязчивы.
Minimum-phase fast roll-off filter или минимально-фазовый фильтр с быстрым спадом. Звучание располагает к лучшим визуализации и построению сцены. Переходные процессы следуют за основным сигналом, а не предшествуют ему. Что дает более насыщенные низкие частоты, а также чистые высокие.
Minimum phase slow roll-off filter или минимально-фазовый фильтр с медленным спадом. Фильтр с минимальным пре- и пост-эхом. Как следствие, насыщенные НЧ и хорошо артикулированные атаки.
Linear-phase apodizing fast roll-off filter или аподизирующй линейно-фазовый фильтр с быстрым спадом. Вид линейно-фазового фильтра с улучшенным пост- и пре-эхом. Нейтральное, уравновешенное и чуть менее насыщенное звучание.
Minimum-phase apodizing fast roll-off filter или минимально-фазовый фильтр с быстрым спадом. То же самое, но с учетом отсутствия пре-эха. Звучание несколько акцентирует НЧ и атаки в низкочастотной области.
Hybrid fast roll-off filter или гибридный фильтр с быстрым спадом. Интересный вариант, объединяющий как минимально-фазовый, так и линейно-фазовый фильтр. Нулевой семпл смещен в сторону крайнего в выборке. Звучание объединяет в себе ударные НЧ с подчеркнутыми атаками и ясные прозрачные ВЧ. Мой предпочтительный фильтр на Aune X8.
Остается не забывать, что фильтр — это не способ радикальной подстройки звука, как, например, эквализация. Они лишь корректируют процесс, который произойдет так или иначе. А именно фильтрацию частот выше частоты полезного сигнала. Так что пробуем, слушаем. Во всяком случае теперь вы понимаете, что во время прослушивания музыки фильтр производит сотни тысяч вычислений, интерполируя сигнал, а вы только задаете порядок этих вычислений.
NON-OVERSAMPLING (NOS) ЦАП
Недавно я делал обзор на замечательную новинку — плеер iBasso DX300. Там я случайно обнаружил среди стандартного набора фильтров ЦАП режим NOS. То есть режим работы без передискретизации. Если о матричной структуре ЦАП в DX300 производитель позаботился оповестить общественность, то про наличие режима NOS — нет. И поделом. Ведь интересная и полезная фишка плеера попросту могла быть проигнорирована не особо любопытными аудиофилами.
Так вот, что такое NOS ЦАП мы немного поговорили в этом обзоре. Возможно, именно тогда, когда писался этот раздел, и пришла мысль о серии статей “о сложном простыми словами”. Так вот, повторюсь: NOS ЦАП — это ЦАП, который работает без оверсемплинга (передискретизации). А иногда и без цифрового и/или аналогового фильтра. Бывают и такие. Конечно, реализации ЦАП вовсе без фильтра требует ряда манипуляций, чтобы не засорить воспроизведение шумами. Например, предварительный или потоковый апсемплинг.
Ключевая задача, которую ставят разработчики, создавая NOS ЦАП, — это избавиться от импульсных переходных характеристик, по пятам преследующих процесс фильтрации. Убрать звон — это хорошо. Но тогда в “распоряжении” ЦАП остается только аналоговый фильтр, обладающий некоторыми недостатками, о которых мы уже поговорили. Более того, аналоговый фильтр, выполненный на дискретных элементах, может привносить и свои фазовые и нелинейные искажения.
РИСУНОК СИГНАЛ NOS
Как вы помните, аналоговый фильтр выполняет интерполяцию аналогового сигнала по опорным точкам ступенчатой кривой. Без аналогового фильтра это будет невозможно. Мы столкнемся с нашими фантастическими тварями — алиазами — которые будут гулять без контроля и присмотра. Так ли это страшно для нас как слушателей? С одной стороны — нет. Алиазы будут находиться за порогом слышимого диапазона. Если половина частоты дискретизации выше 20 кГц, то алиазный спектр будет лежать за отметкой ½ частоты дискретизации и “отзеркаливать” спектр полезного сигнала, являя собой ультразвук. С другой — ализы “скушают” часть полезного динамического диапазона. Таким образом, отказ от аналоговой фильтрации мы избавляемся от искажений фильтра, но получаем интермодуляционные искажения и теряем часть динамического диапазона.
АПСЕМЛПИНГ И NOS ЦАП
В отдельных случаях можно получить чистый сигнал и без фильтрации. В каких? Если изначальная запись (именно исходный файл) делался на частоте дискретизации, выше 44,1 кГц. На сегодня общепринятым форматом цифровой студийной записи является 24 бит 88 кГц, реже 96 кГц. Почему-то считается, что с 88 кГц работать проще. Не суть. То есть такую запись можно без зазрения совести крутить на NOS ЦАП и не бояться получить значимые искажения.
NOS ЦАП — это не приговор и не панацея. Это лишь другой вариант, другой подход. Который позволяет чуть иначе реализовать схему ЦАП. С одной стороны, такая схема будет проще и менее взыскательна к аналоговой фильтрации. Но это также потребует апсемплинга файлов для качественной реализации. Однако, отказ от оверсемплинга и цифровой фильтрации может дать наиболее натуральный саунд. У iBasso получилось — режим NOS на мой слух показался наиболее приятным. На том стою.
ЗАКЛЮЧЕНИЕ
Какой фильтр все-таки лучше? Боюсь, ответа на этот вопрос нет и быть не может. “Быстрые” фильтры имеют лучший вид на измерительных приборах. В свою очередь “медленные” могут показаться приятнее на слух. А могут и не показаться. В то же время супер медленный фильтр на осциллографе вообще ужасен и неприемлем. Но в нем практически подавлен пост-звон.
При этом ситуация с нашими предпочтениями по части цифровой фильтрации может развернуться в корне и за счет частоты дискретизации исходного файла. “Супермедленный” фильтр на частоте дискретизации 44,1 кГц и 96 кГц дает другую картину даже на осциллографе.
Тут так же как с ЦАПами и усилителями. То есть не столь важна принципиальная схема, сколько качество и добросовестность реализации. Усилитель не будет лучше только из-за принадлежности к классу A, ЦАП не запоет краше из-за наличия в нем 20-битной R-2R матрицы и отсутствия оверсемплинга с цифровой фильтрацией. Надеюсь, функции и принцип работы цифрового фильтра в ЦАП вам стали понятнее и логичнее.