ivagor, а есть хоть мизерный шанс услышать титульную мелодию из Ramparts с ZX Spectrum на Специалисте? Её даже на PC speaker переносили...
Вид для печати
ivagor, а есть хоть мизерный шанс услышать титульную мелодию из Ramparts с ZX Spectrum на Специалисте? Её даже на PC speaker переносили...
Не то чтобы новые, но удачные идеи и подходы, собранные вместе.
1. Два генератора - фазовые аккумуляторы. В современных биперных движках используются очень часто. Интересно, что в специалистовском бейсике для бипера был одноканальный фазовый аккумулятор, что отличает его от большинства советских бейсиков для 8080. Из каждого фазового аккумулятора получаем меандр, ну или нечто близкое к нему с учетом конечной точности. Два канала, в каждой итерации делим время "экспозиции" пополам.
2. Цикл генерации непрерывный, как уже написал, переход к следующей ноте спрятан в завершающей итерации. Это избавляет от хрипов, но требует максимально простого формата музыки, для сохранения высокой частоты дискретизации. Приходится хранить поток приращений фазовых аккумуляторов (в данном случае конверснутых из psg) для обоих каналов с интервалом 20 мс, т.е. 200 байт в секунду.
Ну и очень важный момент - музыка. Она должна с одной стороны укладываться в технические ограничения, с другой - быть хорошей. Тут можно поблагодарить Олега Никитина за музыку к Старой башне для вектора.
Если вопрос такой - можно ли полноценно портануть биперный движок savage на 8080 2 МГц и без прерываний? Мое мнение - не получится.
А сделать кавер исходя из возможностей специалиста можно, но это больше к музыкантам.
Варианты:
1. Упростить движок savage, чтобы его потянул специалист.
2. Так или иначе конверснуть ноты под движок, который опять же по силам специалисту.
3. Музыкант делает свой кавер в расчете на специалист.
Если к PC Speaker в комплекте идет хотя бы 8088 4.77 МГц, то это заметно круче, чем 8080 2 МГц.
- - - Добавлено - - -
Не то чтобы новые, но удачные идеи и подходы, собранные вместе.
1. Два генератора - фазовые аккумуляторы. В современных биперных движках используются очень часто. Интересно, что в специалистовском бейсике для бипера был одноканальный фазовый аккумулятор, что отличает его от большинства советских бейсиков для 8080. Из каждого фазового аккумулятора получаем меандр, ну или нечто близкое к нему с учетом конечной точности. Два канала, в каждой итерации делим время "экспозиции" пополам.
2. Цикл генерации непрерывный, как уже написал, переход к следующей ноте спрятан в завершающей итерации. Это избавляет от хрипов, но требует максимально простого формата музыки, для сохранения высокой частоты дискретизации. Приходится хранить поток приращений фазовых аккумуляторов (в данном случае конверснутых из psg) для обоих каналов с интервалом 20 мс, т.е. 200 байт в секунду.
Ну и очень важный момент - музыка. Она должна с одной стороны укладываться в технические ограничения, с другой - быть хорошей. Тут можно поблагодарить Олега Никитина за музыку к Старой башне для вектора.
Если вопрос такой - можно ли полноценно портануть биперный движок savage на 8080 2 МГц и без прерываний? Мое мнение - не получится.
А сделать кавер исходя из возможностей специалиста можно, но это больше к музыкантам.
Варианты:
1. Упростить движок savage, чтобы его потянул специалист.
2. Так или иначе конверснуть ноты под движок, который опять же по силам специалисту.
3. Музыкант делает свой кавер в расчете на специалист.
Если к PC Speaker в комплекте идет хотя бы 8088 4.77 МГц, то это заметно круче, чем 8080 2 МГц.
Отображение портов на память позволяет удовлетворительно ШИМить WAVы даже без таймера. Подумал, что лучше 16 уровней со свистом, чем 4 без свиста. Из эмуляторов подходит Emu80. Вывод параллельно на бипер и магнитофон, поэтому если не включать настройку "Не воспроизводить звук магнитофона", то будет погромче. Основной недостаток - очень маленькое время звучания.
Два примера:
pwm16 - ИКМ, качество получше, частота дискретизации 10.4-10.8 кГц, длительность 7.5 секунд
pwm16vq4 - векторное квантование, качество похуже, частота дискретизации 10.3-10.6 кГц, длительность 13.3 секунды
На РК86 или Eurekе можно увеличить частоту дискретизации, свистеть будет меньше, но и память кончится быстрее.
В примерах использовал фрагменты кавера музыки из Ramparts Доктора Эндрю.
Интересный эксперимент! Особый респект за мелодию из Ramparts! :)
Но, честно говоря, трекерная музыка в твоих экспериментах звучит поинтереснее, чем оцифровка.
Мне было интересно попробовать ШИМ "повышенной точности". В порте движка Тима Фоллина шаг приращения громкости - 15 тактов, а тут - 7. Т.е. можно повысить частоту дискретизации при сохранении числа уровней или увеличить число уровней при при той же частоте дискретизации. Хотелось бы еще лучше, но и этот результат меня более-менее устроил.
Еще один вариант ШИМ. Уменьшил шаг громкости до 4 тактов, но крайние значения остались по 7, т.е. появилась некоторая нелинейность. Зато частота дискретизации выросла до 13.1-13.4 кГц. Чтобы не стало слишком хорошо ну и чтобы побольше вместить усилил сжатие. Длительность фрагмента 17.2 секунды.
Наткнулся на особенность Emu80 в версии для Eurekи. Версия которая пропорционально полезному сигналу делала EI жестко клипала. Поменял наоборот, DI<->EI и стало нормально. Вероятно сигнал от EI/DI слишком смещен относительно центра и удаление постоянной составляющей не справляется.
Похвастаюсь итоговыми достижениями.
С 16 уровнями получилось поднять частоту дискретизации до 13.7 кГц.
С 32 уровнями - 8.2 кГц и можно еще увеличить за счет удвоения размера кодовой книги.
В результате этих экспериментов мои представления о возможностях ШИМ без таймера изменились.
Последние ШИМные достижения позволили адекватно портировать движок Stoker (Shiru).
Музыка - Magic Tokens title song, Shiru (Александр Семенов), 2010
Для разнообразия данный пример приемлемо звучит не только в Emu80, но и в Emu (правда барабаны слишком громкие). В Emu80 звучит очень близко к спеку.
Заснял, как это звучит на реале!
И вот это тоже!
https://plvideo.ru/watch?v=xqM7EiCkSDTE