Показать сообщение отдельно
Dobermann
The Real RocknRolla
Аватар для Dobermann
Сообщения: 9,586
Регистрация: 31.12.2007
Откуда: KievOneLove
Старый пост, нажмите что бы добавить к себе блог 18 января 2013, 01:23
  #175 (ПС)
Помниться, как-то мы общались с Лопи на эту тему, сегодня случайно попалась вот такая вот статейка:

Звук, центральный процессор компьютера и DSP

А теперь рассмотрим не сказку, а реальность.

Итак, бедный наш центральный процессор… Сейчас он уже со многими ядрами, а иногда даже с напарником. Идеологи нативных решений самозабвенно поют дифирамбы современным ЦПУ как самым мощным DSP в мире. Мол, классические DSP мрачно устарели, ужасно слабы по мощности и гуляют лесом. При этом, почему-то, не упоминается, что в профессиональном железе, где используются эти несчастные слабые DSP (будь то синтезатор, семплер, конвертор, цифровая обработка или портастудия), операционная система — примерно как старый DOS, простая и маленькая. А главное — она не выполняет никаких задач, кроме своих основных, и процессору, как минимум, не мешает. А сколько весят и жрут ресурсов современные операционные системы — мы прекрасно знаем. Но вот чем они занимаются — представляем уже не так хорошо, мы ж не продвинутые программисты, а музыканты…

Так вот, получает ЦПУ очередную порцию нулей и единиц музыкального проекта, чтобы переслать их нам дальше. Побыстрее, разумеется. А Windows ему и говорит: «слушай, пропусти-ка вперед вот этих пару циферок, этот процесс нам важнее, чем твоя музыка, человек все равно ничего не заметит, а мы сейчас грохнемся оба, если не пропустишь!». ЦПУ с ОС всегда договариваются — для нашей же пользы, мы должны вроде как радоваться…

Но помимо этих есть еще и другие задержки, более страшные — от чрезмерного потока данных. Причем они не чрезмерны для самих ЦПУ, памяти или винчестера, но чрезмерны именно для нашей главной задачи — проигрывания в реальном времени мультитрека. А ведь самым важным для нас является микширование, то есть суммирования всех отдельных дорожек в один файл, в микс. Чрезмерность потока заключается в том, что ЦПУ может его пропустить через себя, но не одномоментно, как нам это требуется, а распределением циферок в очередь.

Так вот, допустим, операционная система видит команду стартовать трек — один WAV-файл, который на временной сетке проекта (условно) стоит на 0.00.00. И говорит процессору: «Трогай!» — ЦПУ погнал цифры. Тут оказывается, что по времени на 0.10.00 надо запустить еще два трека — вступают бас и гитара. «Значит так, — говорит она, — главная у нас я, я тебе формирую очередь, поскольку ты всё сразу не способен прогнать, дохляк ущербный. На 0.10.00 ты сыграй, значит, микросекундный кусочек, вот эти восемь бит первого трека. Далее, на 0.10.05 запусти бас, пропусти его ровно вот такой же кусочек, а на 0.10.10 давай гитару. Но тоже только 8 бит. Потом снова возвращаешься к первому, и по .05 по кругу играешь все три трека, пока наш гениальный композитор еще синтезатор не врубил или не запел. Не знаю, что он там насочинял еще, пока давай так, а если появятся еще треки — я по ходу разберусь и скомандую, как тебе и что крутить, не боись, короче! Ты у нас пацан хоть и линейный, но мощный. Я барышня тоже сообразительная, разрулим так, что этот глухой дятел все равно ничего не услышит!».

Вот так они и работают. Естественно, все цифры — художественная аллегория, просто для наглядности. Компьютер и операционная система постоянно «разруливают» поток данных, который всё увеличивается по мере того как аранжировка насыщается новыми треками, обрастает обработкой и эффектами. Всё это цифры, которые безостановочно прут на ЦПУ и все хотят вместе, в одну единицу времени проскочить в эту узкую дверь. Потому что в проекте, например, четко указано: ровно в 1.45.00, в начале 30-го такта, нужно бахнуть бочкой, рыкнуть басом ноту «соль», воспроизвести, как вокалист заорет «Да-а!» (вернее его «да» только стартует в этот момент). Гитара сыграет «дрынь», пэды будут что-то продолжать стонать. Плюс на бочке воооооооот такой компрессор, на вокал нужно повесить ревербератор, чтоб красиво хвостом аж на следующий такт тянулось. На гитаре висит комбоэмулятор и тоже именно в этот момент посылает свои 5 копеек в виде дисторшна… А бедные Windows и ЦПУ режут на мельчайшие кусочки каждый трек, жонглируют ими с немыслимой скоростью, изо всех сил стараясь, чтобы мы этот процесс не заметили и ничего странного не услышали.

И мы этого и не слышим (практически). Есть, правда, люди, которые даже в бардовской песне, где всего две моно-дорожки, голос с гитарой, на слух сразу распознают, в нативную систему «карта-комп» это записано или на железо. Чем больше треков сделано в нативной среде, тем слышнее общий рассинхрон во времени, который в народе называют «мыльным звуком».

Причинам, по которым запись в нативную систему хуже записи в ресурсонезависимую среду, можно посвятить отдельный рассказ. Конечно, если речь идет о записи звука на компьютер извне, то тут значение этого пресловутого рассинхрона не так критично. Операционная система, оперативная память, кэш процессора, звукозаписывающая программа и другие факторы так или иначе «сгладят» тайминг и уложат звук на винчестер в виде цифровых файлов ровно там, где эти файлы должны в итоге лежать. Ведь мы не слышим, с какой скоростью файлы ложатся на диск, мы доверяем системе как «черному ящику», а достоверность этой «укладки» проверяем путем воспроизведения — считывания этих файлов. Воспроизведению мы и уделим главное внимание — ведь нас сейчас интересуют виртуальные синтезаторы и виртуальная обработка!

Когда цифры идут с винчестера на выход карты, когда осуществляется самый важный для нас процесс — сведение — вот тут нас подстерегает самая главная засада. Компьютер не может проиграть все треки корректно, чтобы из них в реальном времени сформировать (еще лишняя нагрузка для ЦПУ) мастер-трек. Многие знают, что лучше всего писать сумму на внешнее устройство, хотя бы даже на другой компьютер. Но это избавляет нас лишь от дополнительной нагрузки — записи еще одного стерео трека, т.е. от лишнего рассинхрона… Иногда это ощутимо сказывается на результате, но если сам проект содержит слишком много дорожек с «наворотами» — разница невелика, от мыла в пределах одного компьютера при проигрывании в реальном времени все равно никуда не денешься…

Многие здесь захотят возразить, что существует такая штука, как буфер, что именно он и обеспечивает корректность проигрывания мультитрека . Он, конечно, существует, но значение его в нашем вопросе несколько преувеличено. Буфер обеспечивает лишь непрерывность и ровность звукового потока — на тот случай, когда случаются небольшие организационные задержки с выводом звука у процессора. Иными словами, буфер проигрывает звук для обычного пользователя и не более того! Музыка, кино, игры… как уже говорилось, «нативный компьютер» создавался для массового, в том числе мультимедийного пользования. И изначально не предполагалось нашествие VST-шников, желающих превратить ПК в мультитрек-рекордер и в нафаршированный до предела обработкой «безлимитно-канальный» микшер. Буфер, выводит то, что ему «насчитал» ЦПУ, сведя цифры в финальный поток, и следит за тем, чтобы подавать эти цифры на карту четко одна за другой, без задержек, позволяя процессору отвлекаться на вычисления, задержки-ошибки, обработку посторонних процессов и т.п. То есть, буфер никак не способен влиять на тайминг между треками, он обеспечивает линейность, но не параллельность звука!

Разумеется, миксдаун (mixdown) или баунс (bounce) мы не рассматриваем — все знают, почему (или не знают?). Все это касается воспроизведения программного мультитрека на компьютере в нативной среде и его же сведения в реальном времени.

offline
Ответить с цитированием