PostMODism


I. Магические числа.

Рассказ свой я начну с цифр.

Лет 10, если не больше, трекерщики козыряли перед "мидишниками" командой sample offset, пока, наконец, она не появилась в некоторых софтварных сэмплерах. В трекерах оффсет измеряется отрезками по 256 байт (для 8-битных сэмплов). Максимальное значение оффсета - FF в 16-ричном виде, то есть 255. Умножаем на 256 байт и получаем 65280 (почти 64 килобайта) - это максимум, куда можно "дотянуться" оффсетом. Первые трекеры всё равно не поддерживали сэмплы размером больше 64 килобайт, из этих соображений и был выбран шаг в 256 байт.

Значение "256 байт" полезно помнить. Например, Вы пишете всякие сложные штуки с драмлупами. Наверняка Вам захочется с помощью оффсетов воспроизводить драмлуп с произвольного места (на этом как раз и строится большинство партий). Так вот хорошо было бы попадать оффсетом ровно в доли ритма, а не куда-нибудь между ними, иначе ритм получится размазанный. Для этого частота сэмпла должна быть кратна и значению BPM, и числу 256. То есть, я хочу сказать, забудьте про привычные sample rate = 44100 Hz. Самый простой способ рассчитать правильную частоту - умножить BPM на 256. Например, для 125 BPM получим 32000 Hz. Очень даже хорошая частота. Для 80 BPM получаем 20480 Hz. Мало? Ну, умножьте на 2 - получится 40960 Hz. Вот на такую частоту надо будет пересэмплировать Ваш драмлуп, а потом уже грузить его в трекер. Тогда точность оффсетов будет безупречна, и ритм останется крепким после любых выкрутасов.

Замечу, что в современных трекерах есть расширенные команды оффсета, позволяющие перешагнуть предел в 64 kb. В одних трекерах шаг всё так же кратен 256 байтам, в других - "подстраивается" под длину каждого сэмпла (80 - середина сэмпла, 40 - четверть и т.д.).

Есть ещё одно важное число, которое полезно помнить, если Вы пишете MODы. Наиболее правильные плееры трекерных форматов для Windows, Linux и Mac OS X строятся на библиотеке BASS. Но вот однажды на примере плеера XMPlay Tangerine заметил, что в его амижных MODах драмлупы немного спотыкаются. Это может происходить, если плеер неверно понимает темп и/или частоту воспроизведения сэмплов. Причём в XMPlay такая ошибка проявляется только на формате MOD. Другой плеер, ModPlug, не спотыкается, но у него есть свои неточности воспроизведения. С трекерами такая же проблема: Scream Tracker (а за ним и Impulse Tracker) тоже малость врёт темп... В итоге, написать правильный MOD можно только на ProTracker'e для Амиги. Но не у всех есть Amiga, а даже если и есть, то сейчас уже сложно заставить себя ломать глаза перед телевизором. В общем, я решил разобраться в этой проблеме - как написать на PC MOD с правильным темпом. И, желательно, в привычном (для меня) Impulse Tracker'e (точнее, Schism Tracker'e под Mac OS X).

Немного о различии ProTracker'a и Scream Tracker'a. В идеологии ProTracker'а и его последователей (в том числе Fast Tracker 2) нет понятия "частота дискретизации" для сэмпла. Вместо этого введено значение "base note". С точки зрения традиционного музыканта это, возможно, неплохо. Однако, если Вам принесли на дискете кучу звуков с сэмплера AKAI, которые хранятся там с частотой 32 KHz (к примеру), что Вы будете делать? Какое значение base note ставить таким сэмплам? Придётся подбирать на слух, а может быть даже подгонять более точно значение fine tune (в чём оно измеряется, никто не знает, зато известно, что шаг у него недостаточный для действительно точной настройки). В Scream Tracker'e нет значения base note, зато есть честное и внятное значение sample rate. Но и это не панацея - иногда ведь тоже приходится подбирать частоту на слух.

Плеер, сталкиваясь с форматом MOD, не знает с какой частотой играть сэмплы - такая информация нигде не хранится. Ничего удивительного, что разные плееры расчитывают эту частоту по-разному. Но какова же на самом деле связь между sample rate и base note?
Из практики: если Вам точно известно, что какой-то сэмпл записан с частотой 22050 Hz, и ,будучи проигранным на этой частоте, воспроизводит ноту ДО, то загрузите его в ProTraker-образный трекер и приготовьтесь к сюрпризу: для получения этой самой ноты ДО Вам придётся играть сэмпл на ноте ФА пятой октавы. Это происходит от того, что ProTracker не ожидает, что Вы подсунете ему сэмпл с какой-то неразумной частотой 22 KHz. Правильной (base note = ДО) частотой, с которой должны оцифровываться звуки, по мнению ProTracker'a, является частота 8260 Hz. Так уж повелось со времён Амиги. Если Вы готовите сэмплы в другой программе, позаботьтесь о том, чтобы они имели частоту дискретизации 8260 Hz или 16520 (ровно в 2 раза больше) или 33040 (в 4 раза). Знаете, откуда мне известно про значение 8260? Я не лазал в код ProTracker'a. Я просто расчитал значение частоты для ноты ДО исходя из того, что ФА = 22050 Hz, а соотношения частот двух ближайших полутонов равно корню 12-ой степени из двух. Честно говоря, получилось примерно 8259.41776 - не совсем целое число. Вряд ли ProTracker оперирует числами такой точности, поэтому, в случае загрузки сэмплов извне, вероятно, ДО у него получается не идеально точное, да и ФА тоже. А тут ещё кривоватый fine tune...

Но приготовьтесь к следующему сюрпризу! Возьмите Scream Tracker (Impulse Tracker, Schism Tracker и т.д.) и посмотрите, какая частота выбрана по умолчанию для сэмплов. Например, загрузите raw data - сэмпл без заголовка (да хоть любой txt, exe, com-файл). Ну и как Вам? 8363 Hz. Не знаю, что там намудрили Future Crew, возможно, они расчитали, что если за базовую частоту взять 8363, то все остальные полутона будут ближе к целым числам (по крайней мере, я проводил такое исследование, когда писал свой трекер на БК-0010). В итоге, если Вы пишете MOD в Scream Tracker'e, Вы почти наверняка не меняете частоту сэмплам и тем самым гарантируете, что на PC и Амиге они будут воспроизводиться с разной скоростью.

Вообще, как Scream Tracker конвертирует S3M в MOD - это ещё большой вопрос. Как расчитывает base note и fine tune? Даже если Вы поставите всем сэмплам частоту 8260, сохраните MOD а затем снова загрузите его, то обнаружите, что частоты магическим образом сменились с 8260 на 8280. Но это всё же ближе к истине, чем 8363, не правда ли? Возможно, искажение частот происходит при загрузке (игнорируются fine tune), а сохраняются они как надо. Так или иначе, после длительной проверки практикой я понял, что пугаться не надо: если за базовую частоту брать 8260, сэмплы звучат правильно (драмлупы не спотыкаются) и в Scream Tracker'e, и в ModPlug'e, и в XMPlay, и на Амиге. Это ведь то, что нам нужно? Тогда запомните это число - 8260 Hz.

С числами на сегодня всё, давайте уже перейдём к музыке и трекерной технике? ;)


II. Чудо техники.

Идея диска "PostMODism" состояла в том, чтобы создать MODы средствами, которые появились существенно позже эпохи MODов и использовать все хитрости и приёмы, накопленные за 15 с лишним лет существования этого формата. Посмотрев на название, Вы, наверняка, подумали о "постмодернизме"? Да, это такая шутка, только "модерн" тут не при чём. У нас - MODы. Поэтому "PostMODism". И пусть, услышав их, никто не догадается, что это всего лишь MODы!..
Начало же было заложено ещё в предыдущем диске - "MODest Disk" - композицией "Sad Child Song".

Но с какой стати MODы?..
Знаете, по большому счёту, в современных трекерах можно создать произведение любой сложности, привлечь эмуляторы синтезаторов, живые инструменты, пост-обработку... и всё это не выходя за форматы ModPlug, Skale и Renoise. Если немного изловчиться, то можно уложиться и в формат IT (да-да, там возможна встроенная постобработка с помощью DMO). Всё это становится немного скучно, особенно когда приходится тратить время на то, чтобы "соответствовать современным стандартам качества".
Когда же речь идёт о MODах, можно выкинуть все эти условности. Ожидаете "качества" от 8 бит? Ну, мы постараемся, но вы же сами понимаете... :)
Избавившись таким образом от шелухи, темой своих MODов я выбрал музыку, и ни что иное. Поэтому я взял старые мелодии, рифы и наигрыши, которые хранятся в моей голове уже много-много лет, и решил их, наконец, записать. Попытки предпринимались и раньше - S3Mы и IT-модули длительностью 1-2 паттерна, чтобы не забыть темы. Но закончить их всё время мешало это пресловутое "качество": надо поставить новые звукосниматели на гитару и переписать партию, купить новые микрофоны и чисто перезаписать фортепьяно, подождать новый качественный эмулятор Moog'a или какого-то гитарного эффекта, поехать на студию, чтобы свести всё на правильной акустике... Ужас! И только MODы могут предложить спасение! :)

Вот, например, "Piggie walking to the shop" сначала был написан (точнее, недописан) в 12 каналов (моё любимое число почему-то; у меня полно 12-канальных треков) - это был IT-модуль размером 1.6 Mb. Тем интересней было переделывать его в 4-канальный MOD. До этого я уже закончил 3 гитарных MODа для диска "PostMODism", и задача по адаптации (по возможности, без потерь) "Piggie walking to the shop" не показалась мне неразрешимой. Сложной, но решаемой. А главное - интересной.
Там много гитар, и все они, конечно, не умещались в предельный для MODа 1 мегабайт. Иногда приходилось поступать так (переходим к технической части):

Первая половина музыкальной фразы хранится с частотой 22 KHz, а вторая - 11 KHz, и обе они склеены в один сэмпл (зачем и почему - объясню ниже). Если играть такой сэмпл на одной ноте, то либо первая часть будет звучать в два раза ниже и медленней, либо вторая вдвое выше и быстрей. Для того, чтобы всё было как надо, в трекере пишется следующее (допустим, гитарная фраза - это сэмпл номер 7):
01 F-6 07 .. ...
02 ... .. .. ...
03 F-5 07 .. o56
04 ... .. .. ...
То есть вторая часть играется на октаву ниже, на неё указывает оффсет (в данном случае - o56).

Далее, пишем эхо от этой гитары. По идее, надо со смещением во времени написать всё то же самое на другом канале, но с меньшей громкостью.
Все знают, что в MODах нельзя записать две команды на ноту. Причём "громкость" - тоже команда. И как быть с нотой, где уже есть команда offset? А вот как:
04 F-6 07 16 ...
05 ... .. 14 ...
06 F-5 .. .. o56
Ставим нужную громкость (14) на предыдущей строке. Указываем нашу ноту без номера инструмента - он уже задан на пару строк выше и не изменится без прямого на то указания. Заданная громкость тоже сохранится (громкость сбрасывается в исходное значение только при указании номера инструмента). Вот, пожалуйста - всё работает. Старый трюк, конечно, но для дальнейшего рассказа напомнить надо.

Теперь приём, который я доселе не встречал (у меня он обильно используется в треке "This bamboo is longer"). Вы заметили, что в предыдущем примере ноте с оффсетом обязательно должна предшествовать нота тем же инструментом без оффсета. Иначе ничего не получится. Но ведь эта необходимая нота не всегда придётся кстати, верно? Есть у меня рецепт и на этот случай :) Добавьте в конец сэмпла тишины. Если цикл уже задействован, добавьте побольше - килобайт 8 после цикла, если же цикл свободен, можете ограничиться несколькими байтами и зациклить их. Допустим, тишина начинается с оффсетом, равным 80:
04 F-6 07 .. o80
05 ... .. 14 ...
06 F-5 .. .. o56
В этом случае прозвучит только нота на 6-ой позиции, до неё будет полная тишина, что нам и требовалось. Главное, чтобы сэмпл с тишиной не успел закончится к 6-ой позиции, иначе трекер "забудет" информацию о нём (поэтому и надо добавить побольше тишины или же зациклить её). Хитро?
Можно ещё хитрее. При интенсивном заполнении паттернов каждая строка на счету. Мы задействовали строки 4 и 5 только ради того, чтобы правильно прозвучала нота на 6-ой строке. Иногда это слишком расточительно (поверьте, в MODах из диска "PostMODism" постоянно не хватало места в паттернах). Поэтому я предлагаю альтернативный метод - тишина добавляется в начало сэмпла (только не надо её там зацикливать). Тогда наш пример будет выглядеть так:
05 F-6 07 14 ...
06 F-5 .. .. o76
Заметьте, оффсет увеличился на 20 (в 16-ричной системе, или, что то же самое, на 32 в десятичной), потому что к началу сэмпла мы добавили 8 килобайт тишины (8kb=32*256). В итоге мы имеем возможность каждый раз экономить одну строчку в паттерне.

Однако, при сверхплотном заполнении паттерна, скорее всего, не будет места даже для одной вспомогательной ноты. Тогда в окрестности нужной ноты можно сильно увеличить темп и раздвинуть паттерн - появятся дополнительные строки. В качестве иллюстрации могу предложить первый паттерн "This bamboo is longer".


Не правда ли, все эти приёмчики, расчёты оффсетов и частот сэмплов похожи на оптимизацию ассемблерного кода? Они не универсальны и помогают только в определённых случаях, причём необходимость их использования понимаешь уже ближе к завершению MODа, когда что-то "не умещается"... Мне кажется, что всё это как раз и делает трекерного музыканта демосценером.

Но вернёмся к случаю, когда первая половина музыкальной фразы хранится с частотой 22 KHz, а вторая - 11 KHz, и обе они склеены в один сэмпл. Зачем такие сложности? Почему бы просто не хранить всю партию в 22 KHz?
Дело даже не в том, что размер модуля увеличится. В MOD-формате сэмпл не может иметь размер больше 64 Kb, целиком гитарная фраза в это размер не вписывается. Но тогда почему бы не сделать 2 сэмпла? А сэмплов-то максимум 31 - каждый на счету (и они уже все заняты). Но тогда ведь можно всё хранить в 11 KHz?.. Нельзя!!! :) Мы пойдём на любые ухищрения ради улучшения качества звука, это концепция диска "PostMODism" :)

Ограничение в 31 сэмпл приводит к тому, что иной раз приходится в один сэмпл втискивать по 3-4 звука друг за дружкой и добираться до них оффсетами. При этом важно хорошо представлять себе всю партитуру - не придётся ли запрятанный в конец звук воспроизводить на разных громкостях (а трюк с одновременным заданием громкости и оффсета возможен далеко не всегда). Более того, объединённые в один сэмпл звуки имеют одно значение default volume на всех - об этом тоже надо помнить и не склеивать что попало.

Кстати, о default volume. Для MODов я стараюсь подготовить все сэмплы с максимальным уровнем громкости, нередко даже усиливаю их компрессором и максимайзером. И только после этого перевожу в 8 бит (так меньше заметен цифровой шум). Собственно, при подготовке 8-битных сэмплов я вижу смысл применять цифровой компрессор на цифровую запись (как привило, 16-битную). В нормальной ситуации компрессор (аналоговый) разумно применять именно ДО оцифровки. Иначе всё это весьма деструктивно... Да, ну так вот. Default volume. Поскольку все сэмплы, даже самые тихие, подняты по громкости на максимально возможное значение, нужно этим сэмплам задать адекватное значение default volume. И, как я уже говорил выше, если возникнет необходимость склеивать друг за другом несколько сэмплов в один, следует брать только сэмплы с одинаковым значением default volume. И, конечно, не пытаться объединить два зацикленных сэмпла :) Ведь регион цикла - всего один.

Стерео. В MOD'ах четыре канала распределяются так: лево, право, право, лево.
Ничто так не убивает стерео-картину, как драмлуп в левом (или правом) ухе. Иногда можно подготовить стерео-луп и занять под него два канала - для MOD'а это будет звучать классно (если, конечно, в модуль поместится ещё что-то кроме этого лупа).
Есть и другой метод. Если у Вас несколько разных сэмплов с барабанными лупами, приклейте к ним в конец (а лучше в начало, чтобы избежать команды sample offset) отдельные звуки барабанов: басовый, рабочий, хай-хэт и т.д. Тогда Вы сможете подловить момент, когда свободны (или частично свободны) два-три канала, и исполнить какую-нибудь интересную вставку на барабанах, в стерео. В модуле "To far away friend" так сделано вступление.

Вообще, о вступлениях. Мне кажется, что нехорошо сразу портить впечатление слушателю примитивным стерео или грязными сэмплами, надо постараться изо всех сил именно на вступлениях. "Вступлениях" в широком смысле, для каждой из партий. Пусть гитарная фраза вступит сэмплом на 22 KHz, а продолжается уж на 11 KHz. Пусть барабаны вступят в стерео, а уж потом переползут все в один канал (и лучше плавно). Не пожалейте во вступлении один канал на эхо, а там уж, когда добавятся другие инструменты, можно эхо постепенно убрать.


III. О гитарном звуке.

Для соло можно взять одну ноту, нарулить примочками красивый звук и добавить эхо по двум-трём каналам. Мне удалось сделать этим простым методом что-то более или менее симпатичное в 14-канальном IT-модуле "Save your sea" в 1999-ом году. Всякие там слайды, оффсеты, вибрато и нюансы громкости. Звучит похоже на целиком живую партию... В MOD'ах же такая соло-гитара прокатит только на вступлении или бридже - в остальных местах другим инструментам просто не хватит каналов (а без эха соло зазвучит совсем плоско). Ещё для натуральности полезно сделать несколько вспомогательных сэмплов с характерными кусочками партии: слайды, вибрато, подтяжки и т.п., и разнообразить ими одинокую гитарную струну.
Мне же на эхо было жалко каналов, и таким методом я в итоге сделал только бас-гитару (например, в "Song of peace"). Для баса - самое то, басу эхо не обязательно :)

Второй метод передачи гитарного звука нетрадиционный - пришлось изобретать его для модуля "From long distance". В предыдущем MODе - "Okey, let's track it" - ритм-гитара получилась довольно плоская (потому что сразу после вступления пришлось пожертвовать эхом), а сольная партия занимала слишком много места (целиком живая). Метод в "From distance" основан на том, что шесть аккордов гитарной партии перебираются всего на трёх струнах. Перебор струн в аккорде идёт то в одном порядке, то в другом (то есть повторяющихся частей нет), так что целиком живая запись заняла бы слишком много места. Можно было прописать этот перебор на трёх каналах (ведь одновременно звучит как раз три струны), но куда уместить остальные партии?
Итак, для начала удалось сократить количество аккордов с шести до пяти: один аккорд повторял второй, сдвинутый на полтона. Но это мелочи.
Секрет в приготовлении сэмплов. Они готовятся так: берётся гитарный аккорд, выжидается секунда-другая, чтобы аккорд немного затих и дальше на его фоне дёргается только одна струна. Она и пойдёт в дело, с аккордом в фоне. Так же сэмплируются две оставшиеся струны аккорда. Теперь эти три струны можно перебирать в любом порядке - звучать будет вполне живо. И хватит одного канала. А ведь можно и второй канал добавить для эха - вообще отлично получится. Ну и таким образом пишутся все аккорды. Получается по 3 сэмпла на аккорд, но ведь они короткие - можно в один сэмпл объединить и применять оффсеты. В дополнение к этому я записал отдельно особо вкусные переходы между аккордами.

Третий метод - самый очевидный: запись сольной партии целиком. К примеру, так всегда делал Slightly Magic (а ранние IT-плееры не справлялись с длинными сэмплами, от чего гитара вообще пропадала у большинства слушателей :). При таком подходе придётся, скорее всего, несколько упростить соло, чтобы в нём были повторяющиеся кусочки, которые можно будет хранить только в одном экземпляре. Оставшееся имеет смысл исполнить как можно более изобретательно по звуку, чтобы оправдать применение длинного сэмпла (например, использовать wah-wah или flanger) - тогда никто не скажет "ну и чего ради тут такие огромные сэмплы?". При этом всегда остаётся место для трюков с offset'ами: из готовой партии можно извлечь что-то совсем другое (для разнообразия). Обратите внимание на модуль "To far away friend": в 0:31 звучит фраза, которой Вы не найдёте среди сэмплов соло-гитары. Она набирается отдельными фрагментами из фразы, звучащей в 0:20. Техника с оффсетами используется и дальше, на протяжении всего модуля. Благодаря этому он уместился в 812 kb.


IV. Downloading...

Диск можно скачать на www.thesands.ru, но на момент выхода журнала, скорее всего, он ещё не будет готов. Нужно написать оболочку, нарисовать графику и написать какие-то интересные пояснительные тексты к каждому треку. Пока же композиции с диска PostMODism могут прозвучать на Big Beat Radio (www.bigbeats.ru) в передаче Oldskool Clinique. Кстати, кроме меня Вы услышите на диске известного мастера MODов - Tangerine ;)


Manwe/SandS
manwe@demoscene.ru
статья опубликована в журнале InCube#2
