PDA

Просмотр полной версии : Воспроизведение WAV с испльзованием ШИМ



ivagor
27.11.2009, 20:44
Доделал ШИМ до состояния, когда он не свистит и не жужжит. Используется КД. Частота дискретизации воспроизводимого звукового фрагмента 23800 Гц, используются только 3 бита из каждого отсчета, поэтому шипит. Можно сделать по 4 бита из каждого отсчета, частота дискретизации будет ниже (скорее всего, настолько ниже, что будет слышен высокочастотный свист), но и шипа будет меньше. Прилагаю wav-файлы, записанные с реала, т.к. звучание эмуляторов совсем другое.
http://retrocomp.narod.ru/vector06c/pwm3bit.ZIP
http://retrocomp.narod.ru/vector06c/pwm4bit.ZIP

Error404
27.11.2009, 21:14
Доделал ШИМ до состояния, когда он не свистит и не жужжит. Используется КД. Частота дискретизации воспроизводимого звукового фрагмента 23800 Гц, используются только 3 бита из каждого отсчета, поэтому шипит. Можно сделать по 4 бита из каждого отсчета, частота дискретизации будет ниже (скорее всего, настолько ниже, что будет слышен высокочастотный свист), но и шипа будет меньше. Прилагаю wav-файлы, записанные с реала, т.к. звучание эмуляторов совсем другое.

А что такое КД?

ivagor
27.11.2009, 22:15
КД - квазидиск (дополнительное ОЗУ 64 или 256 Кб).

ivagor
28.11.2009, 07:39
Поправил пару мелких ошибок в pwm14
1. В pwm14.asm была неправильно указана длина звукового файла (31713 вместо 32713), из за чего не проигрывались последние 40 мс.
2. Вместо pwm14_3.rom был приложен pwm14_3.sfk :)
Архив в первом посте перезалил.

ivagor
28.11.2009, 09:35
Сделал вариант с воспроизведением 4-битных отсчетов, частота дискретизации 19700 Гц, свиста не слышно, шипения меньше. Можно по аналогии доделать pwm14 и там частота дискретизации будет больше 24 кГц.

Ramiros
28.11.2009, 12:06
в VV звук мало чем от оригинала отличается, я бы даже сказал, практически неотличается :)

ivagor
28.11.2009, 12:32
Ramiros, в VV свист слышен, которого не должно быть. Также сравни спектры из VV и приложеных wavов.

Ramiros
28.11.2009, 12:43
Ramiros, в VV свист слышен, которого не должно быть. Также сравни спектры из VV и приложеных wavов.

Я имел ввиду на слух, т.е. соотношение полезный сигнал/шум вполне на приличном уровне.

ivagor
28.11.2009, 12:52
Мне было интересно, можно ли сделать на векторе ШИМ с приемлемым числом разрядов (не менее 3) и без свиста. Это получилось, но только на реале. В VV полезный сигнал слышен, согласен, но от реала отличие есть.

Ramiros
28.11.2009, 13:52
К сожалению практическое применение трудно представить в виду прожорливости памяти

ivagor
28.11.2009, 14:49
16 секунд, если занять весь КД и все основное ОЗУ :)
Можно воспринимать это как демонстрацию потенциальных возможностей вектора по состоянию периферии на 88 г., ну и как тест эмулятора :).
Намного практичнее использовать для проигрывания wavов AY или COVOX, но и ШИМ через бипер можно маленько усовершенствовать. В трехбитный вариант можно добавить разбор полубайтов на ходу, в итоге максимальная длительность увеличится в два раза (32 секунды).

ivagor
11.10.2021, 19:05
Предыдущие версии проигрывателя wavов через ВИ53 выкладывались в ковоксной ветке (1.0 (https://zx-pk.ru/threads/14607-quot-covox-dlya-vektor-06ts-quot.html?p=878833&viewfull=1#post878833), 1.1 (https://zx-pk.ru/threads/14607-quot-covox-dlya-vektor-06ts-quot.html?p=880782&viewfull=1#post880782)), но думаю здесь они более к месту. В новой версии увеличил громкость для 22 кГц в 2 раза, для остальных частот дискретизации - в 3 раза. Плюс мелкие доработки. Используется весь кваз, поэтому исключительно для МикроДОС 28. Пара загрузочных образов с примерами тут. Из эмуляторов могу рекомендовать только v06x (удобнее пользоваться версией с гуем (https://zx-pk.ru/threads/28132-bipernaya-muzyka-na-vektore-06ts.html?p=1131801&viewfull=1#post1131801)).

Improver
12.10.2021, 11:56
ivagor, а что если использовать второй КД, например, на порту 011h? Не в плане увеличения времени воспроизведения, а для возможности работы в любом МДОСе. Сейчас второй КД доступен и в эмуляторе, и в железе.

ivagor
12.10.2021, 12:07
что если использовать второй КД, например, на порту 011h? Не в плане увеличения времени воспроизведения, а для возможности работы в любом МДОСе.
Думал об этом. Проблема в том, что вряд ли кто-то будет проверять на реале, а из эмуляторов второй кваз поддерживает только Emu. В Emu качество шима в целом, и данного варианта в особенности, неприемлемое. Тем не менее хорошо бы сделать для возможности использования с hdd.

ivagor
12.10.2021, 18:02
Увеличение громкости - это хорошо, но хочется еще и качество улучшить. В 1.1 и 1.2 для всех частот дискретизации 6-битное качество (64 уровня). В новой версии 1.3 (и 1.3qd2) (https://disk.yandex.ru/d/sUmwKZuvImvMsQ) получилось для 8 и 16 кГц поднять качество до 7 бит (128 уровней), почти ковокс. За увеличение качества пришлось пожертвовать частью громкости, для этих частот она стала как для 22 кГц, но все равно в 2 раза больше, чем было в 1.0-1.1. Максимальная громкость осталась для 11 кГц, но там осталось и 6-битное качество. Еще в 1.3 поправил гладкость проигрывания 16 и 22 кГц, которую слегка поломал в 1.2.
Сводка характеристик 1.3:
8 кГц (с линейной интерполяцией до 16 кГц), 7-битное качество, громкость 2/3
11 кГц (с линейной интерполяцией до 22 кГц), 6-битное качество, громкость 3/3
16 кГц, 7-битное качество, громкость 2/3
22 кГц, 6-битное качество, громкость 2/3
Кроме версии для МикроДОС 28 (wavpwmq.com) в комплекте также экспериментальная версия для двух квазидисков (10h и 11h, wavpwm2q.com). Предполгается ее запуск в досах, использующих только кваз 10h, кваз 11h будет занят wavом. Только для реала, запустить в соответствующем конфиге Emu можно, но не нужно.

ivagor
04.11.2022, 16:16
Есть в базисе карточка Covox sample (http://tenroom.ru/scalar/ware/821/index.html) (хотя сам образ muzspace.fdd). На самом деле там только один из трех примеров играет через covox, а два других - через таймер. Кажется я много лет назад писал про это, осталось только вспомнить - где. А люди верят написанному в картотеке, например вот (https://vk.com/wall291087158_336). На самом деле там samantha играет через covox, а chipdale - через таймер. Предположу, что в этом картридже предусмотрено объединение звука от вектора и ковокса, иначе бы ошибки не произошло, т.к. было бы очевидно, что chipdale играет не через ковокс.

ivagor
18.11.2022, 22:35
Сильно улучшил таймерный проигрыватель wav.
Версия 1.4:
8 кГц (с линейной интерполяцией до 16 кГц), 8-битное качество, громкость 3/3
11 кГц (с линейной интерполяцией до 22 кГц), 7-битное качество, громкость 2/3
16 кГц, 8-битное качество, громкость 3/3
22 кГц, 6-битное качество, громкость 3/3
Выкладываю только бинарники новой версии, образы дискет с примерами wav можно взять от версии 1.3 (https://zx-pk.ru/threads/11403-vosproizvedenie-wav-s-isplzovaniem-shim.html?p=1132898&viewfull=1#post1132898).
Эмуляторы. Безоговорочно подходит v06x. В Emu80 нужно (обязательно!) проверить, что громкость не больше 5 (Настройки>Настройки Эмулятора...>Системные>Звук>Громкость), и если больше, то уменьшить до 5.

Upd 21.11.2022: В 1.5 улучшил 22 кГц до 7-битного качества (громкость 2/3), теперь 6-битного не осталось, только 7 и 8. Расширение .wav теперь можно не указывать. Добавил readme.

Upd 29.11.2022: В 1.6 более корректная работа версии для двух квазидисков. Изменена клавиша прекращения проигрывания с РУС/ЛАТ на УС.

Upd 30.06.2023: Готовые образы (https://disk.yandex.ru/d/AtCNPLyqEHNtug) МикроДОС28 с примерами wav и проигрывателем для одного кваза.

PPC
20.11.2022, 15:03
Хорошо. На 16 kHz Найквист уже воспринимается на ухо сопоставимо с шумами при FM приёме какой-нибудь далёкой радиоточки.

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

ivagor
20.11.2022, 16:11
стоит сделать расширение по умолчанию - чтобы каждый раз .WAV не надо было набирать
В следующей версии постараюсь сделать, в принципе сразу хотел, но самому мне это не сильно мешает, а больше наверно никто не запускал до сих пор :) Вот индикатор загрузки делать не хочу.

ivagor
21.11.2022, 17:13
Доработал проигрыватель (https://zx-pk.ru/threads/11403-vosproizvedenie-wav-s-isplzovaniem-shim.html?p=1167154&viewfull=1#post1167154)

Pyk
28.11.2022, 22:51
В Emu80 нужно (обязательно!) проверить, что громкость не больше 5
Баг, однако. Исправил, изменения в репозитории, войдет в следующий релиз.

Есть какая-то проблема с версией для двух квазидисков. Если wavpwm2q.com v. 1.3 вроде бы нормально играл в Emu80 в конфигурации с двумя EDD, то 1.5 проигрывает только небольшой фрагмент и останавливается.
Версию 1.4 я пропустил, проверить не могу. Конфиг с двумя квазами для Emu навскидку не нашел, чтобы еще в нем проверить...

ivagor
29.11.2022, 06:29
В соответствующем конфиге emu версия для двух квазов работает нормально (если не считать качества звука), но я догадываюсь, в чем проблема в emu80. Скорее всего проблема будет и на реалах с двумя квазами, сделаю более корректный вариант.

ivagor
29.11.2022, 17:10
Переделал работу с двумя квазами на более корректный вариант (https://zx-pk.ru/threads/11403-vosproizvedenie-wav-s-isplzovaniem-shim.html?p=1167154&viewfull=1#post1167154). И повторилась история с поиском РУС/ЛАТ в эмуляторе, теперь для emu80. Так и не нашел, переделал на УС.

Pyk
29.11.2022, 18:46
повторилась история с поиском РУС/ЛАТ в эмуляторе, теперь для emu80. Так и не нашел
На будущее: раскладку клавиатуры всегда можно подсмотреть в подсказке по Alt-F1 (или "Помощь" -> "Справка по платформе").
В данном случае это был Ins.

ivagor
29.11.2022, 20:06
Справку по платформе я смотрел, но искал глазами РУС/ЛАТ, самое похожее что увидел - УС (лат), но это было не то.

Pyk
29.11.2022, 21:09
УС (лат), но это было не то
Да, "то" оно только в SDL-версии эмулятора, ибо Qt-версия не различает левые и правые модификаторы в силу специфики самого Qt...
Но УС даже лучше :)

ivagor
15.08.2023, 20:02
Дело было в марте 2020 года. svofski прочитал про воспроизведение оцифрованного звука сжатого векторным кодером (для C64, если не изменяет память) и прислал мне ссылку. Там было описание, полного и четкого алгоритма насколько помню не было. Пытался сделать по описанию - получалось плохо, пришлось изобрести свой велосипед на матлабе исходя из общих представлений о векторном кодировании. И svofski изобрел свой велосипед не на матлабе. А я еще накропал рилтаймовый декодер для вектора. Собственно результат можно послушать на реале или в v06x или в Emu80. В Emu или VV слушать не стоит.
Исходный фрагмент: 22.6 секунды, частота дискретизации 22 кГц, 8 бит/отсчет.
Без сжатия он занял бы 485.5 килобайт, т.е. не поместился бы в кваз. А тут удалось запихнуть в голый вектор. Сжатие в рабочем (без эксомизера) состоянии почти в 8 раз. Правда из-за технических ограничений вектора пришлось чуть придушить битность до 7.585 бит/отсчет (воспроизведение через ВИ53). Файл упакован эксомизером, но все равно слишком большой для обычного загрузчика, поэтому для реала подойдет hm22trip.wav с автостартующим быстрогрузом. Загружается, стартуем, ждем пока распакуется (по экрану пройдет волна), слушаем.
Клавиши управления: CC - пауза, УС - продолжить после остановки или воспроизвести с начала после окончания.
Воспроизведение с начала в любой момент: БЛК+СБР.

CityAceE
16.08.2023, 08:15
Для тех, кому лень запускать эмулятор:

https://youtu.be/J9oBi4_jF1o

P.S. И видео тут YouTube заблокировал из-за нарушения авторских прав на музыку. Надеюсь, что видео, доступное по ссылке всё-таки можно будет посмотреть/послушать.

ivagor
16.08.2023, 09:05
Можно сказать, что это независимое подтверждение качества, раз робот поймал, опознал и посчитал что достаточно похоже, чтобы заблокировать.

svofski
16.08.2023, 12:52
В онлайн-эмуляторе вполне приемлемо по-моему звучит. Я солидарен с ютубой, сам бы такое законтентматчил. ivagor крут!
https://caglrc.cc/scalar/ware/936/

ivagor
16.08.2023, 13:04
В онлайновом хорошо играет, пожалуй даже чуть-чуть лучше чем в Emu80. Крут вектор, не так уж много домашних советских компов того времени в своем первозданном виде потянут без купюр такую штуку. Кроме вектора разве что корвет. Для апогея, Б2м и экзотических специалистов с таймерами пришлось бы снизить частоту дискретизации.

svofski
16.08.2023, 13:10
ivagor, к сожалению ты редко делишься секретами, поэтому мало кто узнает как и чем именно крут Вектор. Так со стороны для обывателя в том, что компьютер сыграл песенку, в наше время большого повода для восторга нет. Даже люди в принципе любопытные и интересующиеся техникой, но поколения помоложе, не могут этого оценить без объяснений. Вот бы ты рассказал поподробней, с картинками и все такое.

ivagor
16.08.2023, 15:00
В данном случае я постарался описать с цифрами, что фишка в соотношении качества и размера. Если кто-то скажет, что подобное качество при 1 бите/отсчет в сжатом потоке - это ерунда, то я только пожму плечами, для советских домашних компов конца 80-х (причем без каких-либо дополнительных устройств) я ничего подобного не видел.

- - - Добавлено - - -

Уточнение про корвет - все же он уступит вектору по качеству. Скорости проца хватит, частота таймера выше, но для звука только один канал таймера вместо 3, поэтому в итоге будет 6.5 бит/отсчет вместо 7.6 у вектора. Зато у корвета потенциально можно фрагмент подлиннее уместить с учетом ГЗУ, но чтобы бесшовно (без треска и щелчков) переключать банки памяти придется уменьшить частоту дискретизации. У вектора аналогичная проблема с квазным проигрывателем, вряд ли в нем получится удержать 22 кГц.

NEO SPECTRUMAN
16.08.2023, 15:37
что фишка в соотношении качества и размера.
на тему улучшения кашоство
мне щас гулятсо некода
но могу подкинуть идею

по моему в adpcm у нас задаетсо амплитуда для блока данных
и потом сами данные в диапазоне -1...1 с прореженной битностью

так вот линейная шкала для звука скорей вссего не рациональна
ибо ступеньки восприятия у человека логарифмические

и вот можно побпробовать совместить 1...2 битный дельта код для логарифмической шкалы с общей амплитудой для блоков

шкала типо такая


333333333*
222*
1*
*
*1
*222
*333333333

ступенек на 16
и например с 2-мя нулями для симетрии
и чтоб 1 битный дельта код например не пищал в тишине

как вариант (возмможно более лучший)
линейную шкалу для дельта кода
но логарифмическую шкалу для общей амлитуды блоков

а можыт логарифмическую шкалу и туда и туда

16 логарифмических ступенек для общей амплитуды
хватит с головой
может даже 8

svofski
16.08.2023, 17:29
В данном случае я постарался описать с цифрами, что фишка в соотношении качества и размера. Если кто-то скажет, что подобное качество при 1 бите/отсчет в сжатом потоке - это ерунда, то я только пожму плечами, для советских домашних компов конца 80-х (причем без каких-либо дополнительных устройств) я ничего подобного не видел.

Цифры это хорошо, но все же, что такое векторное кодирование и как именно оно тут пригодилось -- объяснить простыми словами было бы очень интересно. Я например тогда как-то даже участвовал в процессе, хотя ты мою роль сильно преувеличил, но вот сейчас вспомнить что там за векторы и ка-минсы были так просто уже не могу.

ivagor
16.08.2023, 18:23
Пересказывать учебники мне совсем не хочется, все околопрограммисты надеюсь знакомы с векторным квантованием/кодированием, или при желании могут загуглить.
Конкретно в данном примере:
1. Кодовая книга на 256 векторов
2. Каждый вектор по 8 отсчетов
3. Отсчеты по 8 бит или 256 уровней, но перед воспроизведением сплющиваются до 192 уровней, иначе в векторовский таймер при данной частоте дискретизации не влезает.
Немного смешной момент - затрудняюсь сказать, каким алгоритмом здесь сформирована кодовая книга, k-means или LBG.
Есть цифры PSNR
k-means 33.6 дБ
LBG 33.9 дБ
k-means матлаб умеет сам считать, поэтому побыстрее, а LBG считал пользовательской функцией - страшно медленно.

- - - Добавлено - - -

Забыл написать - здесь в кодовой книге звуковые отсчеты, а у идейного вдохновителя с C64 были разности, насколько помню.

svofski
16.08.2023, 19:17
В том и есть весь интерес, чтобы получить не пересказ учебника, а посмотреть как на практике учебник превращается в практическую пользу. Давай я попробую задавать вопросы, может быть так проще будет влезть в мои тапки как условного наблюдателя со стороны. Я геймер, родился в 2003, у моего папы был какой-то денди, который играл наверное видеокассеты. Зашел на фестиваль, а тут ламповый компьютер играет песни из бабушкиного патефона. Мне стало любопытно, но ничего не понятно, где тут вообще джаваскрипт.

Итак мы хотели проиграть в хорошем качестве песенку на Векторе-06ц без расширения памяти. Но песенка не влезает, поэтому пришлось придумать алгоритм, который позволяет сжать звук в 8 раз. Тут понятно.

1. Можно без пересказа учебника, хотя я не вижу вреда в кратком тезисном изложении принципов, но -- что же это за векторное кодирование и почему оно позволяет ужать в 8 раз, а другое (какое другое, например) не позволяет? что происходит, когда мы берем обычный PCM звук и пропускаем его через такое кодирование?

2. Что такое k-means, LBG? Наверное это алгоритмы, реализующие векторное квантование. Что именно они квантуют и что получается на их выходе? Как это помогает получить компактное представление звука?

3. Как из того, что получилось, получить обратно собственно звук?

4. Почему Вектор имеет какое-то преимущество перед другими компами. Что плееру этого кодека приходится делать по сравнению с более примитивным плеером PCM, который просто выкладывает равномерно семплы из памяти в регистр таймера?

5. Можно ли похожие способы кодирования применять для изображений?

ivagor
16.08.2023, 20:25
1. Разделяем исходный звуковой (или графический) объект на блоки, в данном примере на блоки по 8 отсчетов. В этом же самом примере 497304 отсчетов, получается 62163 блока. С помощью какого-нибудь алгоритма кластеризации (например k-means или LBG) формируем кодовую книгу желаемого размера, в примере желаемый размер - 256 векторов в кодовой книге, в каждом векторе по 8 отсчетов. Заменяем каждый блок на индекс вектора в кодовой книге. Все, мы сжали. Чем больше размер вектора, тем сильнее сжатие, но тем меньше качество.
На примере той же песенки PSNR (k-means):
вектора по 2 отcчета: 42.8 дБ
вектора по 4 отcчета: 37.2-37.3 дБ
вектора по 8 отcчетов: 33.6 дБ
2. Не буду притворятся, что хорошо помню k-means или LBG, тут отсылаю интересующихся к гуглу (можно отметить, что LBG лучше, но у меня нет быстрой реализации для матлаба).
3. Заменяем индексы на вектора (группы отсчетов) из кодовой книги.
4. Фишки вектора для данной задачи:
4.1. Сравнительно много озу для домашнего советского компа того времени
4.2. Проц более-менее шевелится
4.3. Принципиально - есть таймер, а значит можно ШИМом играть звуковые отсчеты
Отличие от плеера ИКМ минимальное - два "уровня абстракции" вместо одного. ИКМ плеер сразу берет звуковые отсчеты, а векторный берет номер вектора (индекс) из потока и потом берет звуковые отсчеты из кодовой книги.
5. Да, я пробовал для двухцветных, в принципе было не так уж плохо. parallelno пробовал для 16-цветных, можно посмотреть в его теме примеры картинок и возможно он захочет рассказать подробнее.

svofski
16.08.2023, 20:48
Спасибо, теперь кажется понятней. То есть можно сказать, что восстановленый звук весь состоит из кусочков длиной по 8 отсчетов и таких кусочков всего 256. Отсюда и берется соотношение 8:1.

А стыки между кусочками остаются просто как есть, мы надеемся, что более-менее и так должно стыковаться, потому что более-менее каждый кусочек похож? Может быть можно как-то повлиять на критерий кластеризации, чтобы минимизировать стыки? Или это надуманная проблема?

Точно, припоминаю про картинки parallelno. Надо будет посмотреть.

ivagor
16.08.2023, 21:01
А стыки между кусочками остаются просто как есть, мы надеемся, что более-менее и так должно стыковаться, потому что более-менее каждый кусочек похож? Может быть можно как-то повлиять на критерий кластеризации, чтобы минимизировать стыки? Или это надуманная проблема?
Можно было бы делать деблокинг по аналогии с MPEG сглаживая переходы между блоками, но в рамках вектора при 22 кГц времени на это совсем нет.

svofski
16.08.2023, 21:07
Можно было бы делать деблокинг по аналогии с MPEG сглаживая переходы между блоками, но в рамках вектора при 22 кГц времени на это совсем нет.

А что если этот процесс повторить при кодировании?

1. Составляем первый словарь из оригинала, кодируем
2. Восстанавливаем со сглаживанием, получаем поколение 2
3. Строим словарь второго поколения из поколения 2, кодируем
4. Делаем демо для Вектора

Таким образом может быть получится сделать предварительную компенсацию стыков?

ivagor
16.08.2023, 21:57
Умозрительно кажется, что так получится более гладко, но без проверки я не рискну утверждать что-то определенное. Сразу скажу, что сам в ближайшее время вряд ли буду пробовать, если кто-то попробует - интересно будет узнать результат.

parallelno
16.08.2023, 23:51
А что если этот процесс повторить при кодировании?

1. Составляем первый словарь из оригинала, кодируем
2. Восстанавливаем со сглаживанием, получаем поколение 2
3. Строим словарь второго поколения из поколения 2, кодируем
4. Делаем демо для Вектора

Таким образом может быть получится сделать предварительную компенсацию стыков?

Для картинок я пытался квантовать в два прохода. Сначала в книгу 512+, затем в 256. Получалось хуже чем сразу в один проход в книгу с 256 векторами. Это конечно не совсем то что ты предлагаешь, но можкт быть как-то поможет

- - - Updated - - -

Результат сжатия звука кстати классный! Спасибо за такой эксперимент. Было интересно послушать и почитать!

NEO SPECTRUMAN
17.08.2023, 18:30
из кусочков длиной по 8 отсчетов и таких кусочков всего 256. Отсюда и берется соотношение 8:1.
и именно поэтому кусочки должны описывать именно разность
а не готовые семплы
иначе маловато будет

и опять же эту разность лучше описывать в логарифмической шкале

metamorpho
25.01.2026, 23:42
цитата из статьи про Вектор-06ц от vladtru:
"Но и это ещё не всё: в режиме программируемого одновибратора (генератора импульсов заданной длительности) ВИ53 превращается практически в настоящий ЦАП с широтно-импульсной модуляцией, способный воспроизводить 3-канальный оцифрованный звук с частотой дискретизации порядка 4–10 кГц с количеством уровней в каждом канале, эквивалентном 6–8 битному ЦАП. .........................Правда, программный синтез музыки через ЦАП на небыстром 8-битном ПК всё же был непростой задачей, да и мало кто из программистов вообще знал о таких способностях «Вектора» — в руководствах пользователя они, к сожалению, не упоминались, в векторовских информационных изданиях начала 90-х — тоже.
К тому же применять такой звук непосредственно во время игры было практически невозможно, поскольку программный вывод требовал очень большой загрузки процессора (вернее, точного программного отсчёта временных интервалов)."

Про ШИМ тема (для меня) тяжеловата поскольку присутствует изобилие незнакомых мне моментов, поэтому не погружаясь в тему хотел узнать суть - возможно ли использование ШИМа применительно для создания игр или же как говориться в цитате выше "практически невозможно" (хотя я так понял автор статьи имеет ввиду прежде всего динамические игры) ?

1. Вот этот режим ШИМ ("генератор импульсов заданной длительности на ВИ53") по загрузке процессора похож на использование бипера или же нагрузка будет больше ?
2. Если ШИМ использовать (для вывода звукого эффекта) подобно биперу, то этот эффект будет звучать лучше или хуже чем бипер ?
(например если сделать через него вывод синтеза речи, то какой вариант лучше ШИМ или бипер)
3. Можно ли из режима ШИМ (используя его через прерывания) получить хоть что-то (шум например) и при этом так чтобы не загружать процессор, подобно класическому режиму работы 3-х каналов ВИ53 ?

svofski
26.01.2026, 00:45
ivagor собаку съел на пунктах 1 и 2. В его портах биперных движков используется и таймер и бипер, но они требуют 100% процессора и очень специально написанной музыки.


3. Можно ли из режима ШИМ (используя его через прерывания) получить хоть что-то (шум например) и при этом так чтобы не загружать процессор, подобно класическому режиму работы 3-х каналов ВИ53 ?
Единственный ШИМ через прерывания, который можно сделать на ви53, -- это запуск одновибратора 50 раз в секунду. Никакой специальной терминологии знать не надо, чтобы оценить насколько это полезно для изображения оцифрованного звука. Даже чтобы просто изобразить звучки в стиле досовских игр 90-х нужно прерывание 100-200 Гц.

Поверь, на Векторе игр и даже дем с "трехканальным семплированным звуком с частотой дискретизации порядка 4-10кГц" нет не потому, что информацию о такой чудо возможности все эти годы скрывало мировое правительство. Насколько я знаю, Timersound -- это пока единственная демка на Векторе, в которой сочетается подобие музыки на таймере с подобием семплированных барабанов и какой-то минимальный динамический процесс на экране. И такой минимальный он там не от избытка ресурсов.

ivagor
26.01.2026, 06:43
ВИ53 превращается практически в настоящий ЦАП с широтно-импульсной модуляцией, способный воспроизводить 3-канальный оцифрованный звук с частотой дискретизации порядка 4–10 кГц с количеством уровней в каждом канале, эквивалентном 6–8 битному ЦАП
Если говорить просто о звуке без сочетания с игрой или демой, то можно послушать (в v06x или emu80) адаптации с БК (автор оригинальных композиций Manwe) в соответствующей теме (https://zx-pk.ru/threads/31546-trekernaya-semplernaya-muzyka-na-vektore.html). Я там в первую очередь боролся со свистом, поэтому число бит и громкость пострадали, зато частота дискретизации 12.5 кГц (а с учетом "интерполяции" даже 25 кГц). Для вектора можно сделать более качественную и громкую музычку подобного рода с частотой дискретизации в районе 16-17 кГц.
Сочетать такую музыку с более-менее содержательным игровым процессом или насыщенной демой вряд ли возможно (в лучшем случае невероятно сложно), но на статичной заставке или финальных титрах не вижу проблем. Технические ограничения есть, но отсутствие музыкантов на мой взгляд критичнее.