Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: Конвертация музыки Savage

  1. #1
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Конвертация музыки Savage

    Мне тут задавали вопросы, каким образом конвертируется музыка из Savage - расскажу немного.

    Плеер by J.C.Brooke обязан своим качественным и богатым звучанием главному своему "сердцу" - циклу генерации. В игре Savage 2 этот цикл расположен по адресу E2C5. Характеристики у него следующие:

    - 2 тональных канала
    - частота дискретизации по каждому каналу - ~28.2кГц
    - может генерировать прямоугольные сигналы
    - для сигналов может задаваться частота и скважность. именно скважность, отличная от 2, дает особую тембровую окраску звукам Savage, по сравнению с AY.
    - есть возможность плавного изменения частоты звука вниз (но не вверх)
    - для каждого канала есть режим спецэффекта, который дополнительно усложняет генерируемый звук. Для каждого канала спецэффект разный.

    Как известно, у бипера на спектруме имеется лишь один канал разрешением в один бит. Каким же образом генератор Savage смешивает два канала? Применяется простой принцип: однобитный сигнал генерируется независимо по каждому каналу, а на выход бипера оба сигнала подаются поочередно, через равные промежутки времени. То есть сигнал, подаваемый на бипер, имеет вид:

    s1 s2 s1 s2 s1 s2 s1 s2

    где s1 и s2 - отсчеты сигналов по каждому каналу.

    Несмотря на простоту, этот принцип имеет прекрасное теоретическое обоснование. Спектр сигнала бипера в диапазоне частот от 0 до 14.1кГц является суммой спектров s1 и s2 (с небольшим сдвигом по фазе), что и дает идеальное восприятие смеси двух звуков. Подробнее об этом можно почтитать по тематике Polyphase components.

    Параметры звука, которые генерирует описанный цикл, хранятся в регистрах Z80 во время его работы. Изменение этих параметров происходит по прерыванию. Таким образом, структура плеера Savage очень похожа на типичную структуру плеера на AY, с той разницей, что AY сам генерирует звук, а у Savage этим должен заниматься процессор в промежутках между прерываниями. Тут у Savage больше сходства с плеерами "цифровой" музыки на AY, такими как WTAW by ASC. В плеере Savage широко применяется индексная адресация, при этом в регистр IX помещается адрес структуры, в которой хранятся данные, относящиеся к одному из звуковых каналов, и вызывается подпрограмма, одинаковая для обоих каналов.

    Кроме того, подпрограмма обработки прерываний в Savage воспроизводит шумовые эффекты (звук ударников). На это время работа основного генератора приостанавливается. Поэтому, чтобы не искажать темп мелодии, звуки ударников должны быть короткими. Обработка канала ударников в плеере очень похожа на обработку данных по двум тональным каналам.

    Помимо высоты тона, скользящего тона, скважности и спецэффекта, которые реализует генераторный цикл, на уровне плеера каждая нота имеет еще и следующие параметры:

    - орнамент. действие аналогично орнаментам в AY-музыках;
    - вариация скважности. Действие этого механизма довольно сложное; я даже подозреваю, что автор плеера сам не до конца понимал, каким образом действует этот эффект. Не разобрался до конца и ASC, когда конвертировал музыку на AY в формат ASM.

    Структура данных нот тоже похожа на AY-плееры. Для каждого канала имеется список одноканальных паттернов переменной длины. Данные каждого паттерна содержат ноты, длительность нот, либо команды изменения параметров звука (скважность, вариация скважности, орнамент, скользящая тональность, спецэффект, транспозиция). С применением транспозиции записаны ноты первого (басового) канала, когда для разной тональности баса вызывается один и тот же паттерн с разной транспозицией.

    Вот так примерно... Относительно просто на первый взгляд. Каким именно образом моя программа конвертирует это все в многоканальные паттерны без транспозиции и с инструментами - расскажу в следующем выпуске

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member Аватар для Bigcrown
    Регистрация
    13.09.2007
    Адрес
    Чехов
    Сообщений
    70
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Как известно, у бипера на спектруме имеется лишь один канал разрешением в один бит. Каким же образом генератор Savage смешивает два канала? Применяется простой принцип: однобитный сигнал генерируется независимо по каждому каналу, а на выход бипера оба сигнала подаются поочередно, через равные промежутки времени. То есть сигнал, подаваемый на бипер, имеет вид:

    s1 s2 s1 s2 s1 s2 s1 s2

    где s1 и s2 - отсчеты сигналов по каждому каналу.

    Несмотря на простоту, этот принцип имеет прекрасное теоретическое обоснование. Спектр сигнала бипера в диапазоне частот от 0 до 14.1кГц является суммой спектров s1 и s2 (с небольшим сдвигом по фазе), что и дает идеальное восприятие смеси двух звуков. Подробнее об этом можно почтитать по тематике Polyphase components.
    Я догадывался о такой реализации звука. 2 канала можно смешать на бипере и звучание продолжает оставаться чистым. (К примеру муз. редактор Wham.) А вот когда 3 и более, звучание вроде бы начинает портиться.

    Мы в своё время прогоняли музыку с кассеты через бипер, используя модифицированный кассетный загрузчик. Вроде бы и узнаваемо звучало, но шумы сильно портили картину. Сорри, если отвлёк от темы..
    Требуется "ремастеринг" 5-канальных треков Follin'а без шумов. Цена - не вопрос!

  4. #3
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У бипера безграничные (имхо) возможности (смотрите подпись "Звук"). Вопрос как всегда в ЦП - он просто не успеет обработать несколько потоков, создавая адекватное звучание. Если частота микширования - 44 кгц, то на 1 микшированный сэмпл приходит около 160 тактов ЦП (с моей точки зрения ну очень мало). Считай на 2 канала, не считая собственно самого микширования надо будет давать по 80 тактов, а т.к. одна только операция чтения памяти минимум 7 (8 для М1) тактов, то предел то виден. Поэтому выход - либо микшировать мало каналов, либо микшировать на низкой частоте, но тогда все прелести этого микширования будут как на подносе...
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  5. #4
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, возможности у бипера действительно безграничные. Применяя технику вроде Noise Shaping, можно (теоретически) добиться на нем полного CD-качества и воспроизводить произвольные звуки. Кстати сказать, в современных CD-плеерах и звуковых карточках именно так и делается. Называют это "1-битный ЦАП".

    Но, конечно, это не для Z80. Для Noise Shaping нужно много вычислений, фильтры...

    А вот смешать больше, чем 2 канала методом, подобным Savage - это запросто. Теория ограничений не накладывает. Цикл генерации Savage можно оптимизировать, выкинуть оттуда ненужные спецэффекты. Плавное изменение тона, например, можно реализовать как в музыках AY, на уровне подпрограммы обработки прерываний. И добавить третий канал, не жертвуя качеством звука.
    Последний раз редактировалось Barmaley_m; 12.11.2007 в 12:12. Причина: ошибку исправил

  6. #5
    Member Аватар для Bigcrown
    Регистрация
    13.09.2007
    Адрес
    Чехов
    Сообщений
    70
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как Тим Фоллин делал своё уникальное звучание на бипере спекки

    Выкладываю сюда инфу, так как надеюсь на помощь автора темы Barmaley_m в разборе материала и в надежде на попытку дизассемблирования и конвертации хотя бы одного из треков. В числе страждущих не я один, а других методов, увы, не видно...

    Tim Follin was a game music programmer for the ZX Spectrum between 1985 and 1987. He “programmed a single channel phase-shift routine, a three channel routine, and a five channel routine”
    Тим Фоллин был программистом музыки для игр ZX Spectrum между 1985 и 1987. Он "написал одно канальную процедуру смещения фазы сигнала, трёх канальную и пяти канальную."

    The five channel routine is described by Tim Follin himself in an interview in a ZX spectrum magazine, and in more detail in a post on an internet newsgroup below.
    Пяти канальную процедуру описал сам Тим Фоллин в интервью журналу ZX spectrum и более детально в сообщениях новостной интернет группы ниже:

    “It worked by using five of the Z80’s operators (C, D, E, H, L) in a loop, which were all counting down to 0. When they hit 0, I’d make a click at a certain volume (governed by the delay between switching the speaker on and off) and reset the operator to it’s original value. Every so many cycles of the loop, I’d jump out to change notes and things. To keep the speed up, it used self-modifying code, which meant that the main loop could just have simple commands like ‘set H to 110’, while the code outside the main loop changed the code inside the main loop by writing over it with the new values. The only draw back was that it sounded like a vacuum cleaner with nails stuck in it.”
    (Comps.sys.sinclair newsgroup, 2000b)

    “The program consisted of a tight loop, set to play for about 1/30th of a second, before breaking out to alter the parameters within the loop (writing directly over the code within the loop, to speed it all up). In the break, it also checked for things such as the break key, and played the drum ‘samples’. In the loop, I had three – or as many channels as it played counters (registers b, c, d, e, etc) counting down continuously until they reached zero, at which point it would switch the speaker on and off; the delay between the on and off controled the volume. This obviously meant that the delay between clicks had to be balanced by another delay loop, to keep the overall time the same, which obviously slowed the whole loop down quite a bit. But there you go! It worked... Sort of.”
    (Comp.sys.sinclair newsgroup, 2000a)

    Завтра попробую перевести всё остальное, а может кто-нибудь здесь более знаком с терминологией - давайте попробуем вместе.
    Требуется "ремастеринг" 5-канальных треков Follin'а без шумов. Цена - не вопрос!

  7. #6
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо. Мне, в принципе, все понятно. Детали можно будет посмотреть уже в самом коде. К сожалению, понимание основных принципов - это не самая трудная задача, которую нужно решить для полной конвертации музыки. Но - все равно полезно. Если найду время - буду конвертировать! Фоллин - классный мужик.

  8. #7
    Member Аватар для Bigcrown
    Регистрация
    13.09.2007
    Адрес
    Чехов
    Сообщений
    70
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как и обещал, выкладываю перевод информации Тима Фоллина о кодировании 5-канальной музыки. Информация была проверена и подтверждена в ходе дизассемблирования плеера "Future Games". Итак,

    Программа работает с испозованием 5 регистров Z80 (C, D, E, H, L) в цикле генерации, в течение которого все они уменьшаются до 0. Когда они обнуляются, я делаю щелчок на определенной громкости (которая зависит от задержки между моментом включения и моментом выключения спикера) и загружаю в регистры их изначальные значения. Через каждые 256 повторений цикла, я перехожу за его пределы, чтобы изменить ноты и эффекты. Чтобы добиться максимальной скорости, я использую модификацию кода в цикле генерации. Он содержит простые команды, к примеру ‘LD H,110’, в то время как код за пределами цикла генерации изменяет код внутри этого самого цикла путем записи поверх него новых значений [переменных]. Один лишь недостаток состоит в том, что все это звучит как пылесос, набитый гвоздями.

    Уточнение Barmaley_m: звук формируется короткими импульсами, этим объясняется его характерный тембр.

    Программа состоит из компактного цикла генерации, играющего примерно 1/30 секунды, после чего он прерывается, чтобы изменить параметры внутри него самого (записываются прямо поверх кода, для увеличения общей скорости работы). В момент прерывания программа также проверяет, не нажата ли клавиша, и играет спецэффекты. В цикле генерации имеется 3 или более переменных [счетчиков], в зависимости от количества каналов (регистры b, c, d, e, и пр.), уменьшающихся до тех пор, пока они не обнулятся. В этот момент спикер включается, либо выключается. Задержка между моментом включения и моментом выключения спикера определяет громкость. Очевидно, что пауза между щелчками должна регулироваться другим циклом задержки, чтобы полное время исполнения цикла в тактах оставалось неизменным. Также очевидно, что это замедляет весь цикл в целом на некую величину. Но всё получается! Это работает… Вроде.

    Barmaley_m приводит следующие технические данные для Future Games music:
    69 тактов занимает цикл при условии, что ни по одному из каналов не идет импульс;
    выполняется цикл 256 раз;
    частота дискретизации (на каждый канал) - 50724Гц;
    время работы цикла - 1/198 секунды,
    то есть 200 раз в секунду идут "прерывания";
    я думаю, что рабочие частоты, которые воспроизводит этот цикл, не превышают пары кГц;
    Это значит, что в среднем по каждому каналу идет не более 10 импульсов за один "блок" работы цикла.
    Даже можно принять, что в целом по всем каналам идет 10 импульсов за один блок. Ну может 20.
    Требуется "ремастеринг" 5-канальных треков Follin'а без шумов. Цена - не вопрос!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Savage - Remastered
    от Barmaley_m в разделе Музыка
    Ответов: 57
    Последнее: 17.06.2013, 15:08
  2. Savage 4
    от Art_S в разделе Игры
    Ответов: 18
    Последнее: 28.04.2007, 23:14
  3. Savage и Dynamite Dan
    от tmp_online в разделе Игры
    Ответов: 2
    Последнее: 05.03.2007, 21:44
  4. конвертация и эмуляция
    от jimon в разделе Эмуляторы
    Ответов: 12
    Последнее: 25.02.2006, 21:19
  5. Коллекция музыки из +D
    от ^m00h^ в разделе Музыка
    Ответов: 2
    Последнее: 31.05.2005, 23:15

Ваши права

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