1 Отредактировано Tronix (27-03-2022 20:46)

Тема: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Доброго всем,

Оговорюсь сразу, что с Агатом я не знаком, никогда его не видел ни внутри, ни снаружи, так же как и не видел процессора 6502. Однако, привела меня к вам на сайт, и затем вот, на форум "музыкальная ячейка". Далее наверное нужно предисловие, но оно длинное, поэтому суть вопросов про MIDI ближе к концу текста (выделено жирным "вопросы").

Когда-то давно меня очень привлекла видео-демонстрация работы ЯЗС на ютубе, и особенно понравился звук, издаваемый этим устройством, что у меня в голове засела мысль повторить девайс, только на более доступную для меня (да наверное, и не только для меня) шину ISA-8 от компьютеров IBM PC - благо на барахолках купить любую плату с ISA шиной пока еще представляется возможным. И вот, год за годом, я иногда так и натыкался на это демонстрационное видео, с прекрасным звуком и в итоге в начале 2022 созрел до создания платы. Схему я конечно взял с вашего сайта, хочу сказать спасибо за нее всем причастным, как я понял это Mick, а так же все те, кто задонатил проект и предоставил живую железку.

Конечно, концепция при переносе на ISA8 немного поменялась. Основные отличия от оригинальной муз ячейки:

  • я не стал делать на плате внешний 8-битный порт. Подключать у меня к нему, естественно, нечего. Плюс в IBM PC (если мы говорим о эре плат с ISA шиной) и так есть хороший 8-битный порт - называется LPT -)

  • я не делал IRQ от таймера одной из ВИ53 и управления IRQ. На IBM PC и так таймер есть, даже не один - если нужны прецизионные задержки никто не мешает повесить свой обработчик прерывания прямо на таймер в DOS;

  • зато за счет этого высвободился один канал ВИ53, который использовал как еще один тональный канал. У оригинала было 5 тональных каналов, здесь стало 6 тональных канала;

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

За счет появления дополнительного 6-ого тонального канала немного поменялось расположение портов, хотя и осталось близкое к оригиналу - сдвинулись порты управления ударными каналами. Перемычка выбора портов на адреса 300,310,320,330,380,390,3A0,3B0, чтоб никому не помешать если что. Распределение портов такое:
3n0..3n3 - регистры первой ви53 (тональные каналы 1-3).
3n4..3n7 - регистры второй ви53 (тональные каналы 4-6).
Порты 3n0-3n7 доступны как на запись, так и на чтение;
3n8..3nD - управление блоками коммутации тональных каналов.
3nE..3nF - управление ударными каналами.
Порты 3n8-3nF доступны только на запись.

Так же, решил все-таки GATE'ы у ВИ53 завести через триггер, линия сброса которого связана с сигналом RESET, примерно так же как и в оригинале, что бы после включения компьютера устанавливать запрет счета на ВИ53, и соответственно, тишину на выходах OUT обоих ВИ53. Единственное, так все порты уже заняты, пришлось разрешающий бит управления GATE'ами впихнуть в порт управление ударным каналом 8 (последним). Поэтому распределение его битов стало такое:

Генератор ударных, канал 8:

  • D0 - частота 1.

  • D1 - частота 2.

  • D3 - длительность.

  • D4 - пуск.

  • D7 - = 1 - запрет работы всех таймеров/счётчиков.

Это не особо мешает, просто при инициализации нужно дернуть бит D7 у ударного канала 8, что бы включить GATE'ы. Далее работать по обычной "Агатовской" схеме с каналом ударных.

Схема, естественно, так же претерпела изменения, но все они коснулись лишь цифровой части - полностью переделан декодер адресов для работы с портами ISA шины, делитель частот, заменена трудно-доставаемая в наше время 555ТМ7 на более распространенную 555ИР23, возможно что-то еще. Аналоговая же часть осталась неизменной и полностью повторяет оригинал.

Размеры платы получились солидные- 118x275,25 мм, хотя я старался не "жать" компоненты друг к другу вплотную, под все микросхемы предусмотрел возможность установки панелек. Но вот с разводкой платы пришлось помучиться конкретно.

https://i.ibb.co/TTmcZyM/render2.png

После недели мучений, верчения компонентов и так и сяк, кое-как, но ячейка развелась наконец. Аналог - ручками, а вот цифру руками не осилил, хотя честно пробовал неоднократно. Уже все шло к тому, что бы делать 4 слоя, но все-таки вывел на двух слоях полу-руками, полу-автороутером. Аналоговую часть по возможности перерисовал вручную с P-CAD платы оригинальной ячейки. Закинул еще в аналоговую часть огромный GND полигон и сверху и снизу, прошив все via. Заказал у китайцев платки.

Пока платы были в производстве, я время зря не терял, и написал тест на турбопаскакале для данной железки:

https://i.ibb.co/kxPS8Np/muz-test-001.png

Интерфейс в наглую срисовал с оригинального Агатовского теста авторства "Ravodin" aka "tmptmp15" aka "Voldemar0", прямо с видео из ютуба. Потому что очень лаконично, простенько и со вкусом, мне нравится.

И вот, первый образец был собран:

https://i.ibb.co/CH0yvH3/P1140073.jpg

Как бы удивительно это не было, но плата заработала сразу после пайки и сборки, без всяких порезанных дорожек и кучи МГТФа.

https://i.ibb.co/CKw6sWD/photo-2022-02-28-14-01-48.jpg

Проверил схему генераторов частот на 555ИЕ2, 555ИЕ5 и 555ТМ2 - всё отлично работает, выдает необходимые 1,021 МГц на тактирование ВИ53 с шириной импульсов близкой к 50%, и 63.8 КГц для генератора шума. Выходы ВИ53 управляются из тестовой утилиты, частота полностью соответствует расчетной из программы управления. Проверил генератор шума и ударные, микшеры и тональные каналы - все работает штатно. На этом предисловие заканчиваю, простите что оно такое длинное получилось.

Ну и теперь осталось самое сложное - софт, которого конечно-же на IBM PC и в помине не существует для этой платы.

Начал я с проекта с открытым исходным кодом DOSMID - это не сложный проигрыватель MIDI для DOS. Я скачал его последние исходники, понемногу добавил тональные каналы и один канал ударных на пробу. Получилось с "наскока" как то примерно так:

Далее, я попытался сделать проигрыватель оригинальных .MUS файлов с Агата. Сначала хотел переписать его начисто, а потом подумал - а что если взять уже имеющийся плеер под Агат, благо стараниями avivanov76 он дизассемблирован и хорошо комментирован (хотя я и не бум-бум в 6502 ассемблере). Ну и взял я бинарный файл плеера PLAYERR.O в машинных кодах 6502 процессора, взял ядро эмулятора M6502 от Marat Fayzullin, ну и собрал как мог все во-едино. То есть запускается эмулятор CPU 6502, в нем крутиться оригинальный PLAYERR.O с Агата, а когда он обращается к адресам в памяти, в которых в Агате сидит муз ячейка, я делаю перенаправление уже на PC-шные порты воода-вывода. Ну и таймер используется от PC, а не на плате муз ячейки (потому что в PC версии на плате его нет). И вроде бы даже что-то получилось:

На слух еще вроде-бы ощущаю некоторую проблему с таймингами выполнения 6502 кода плеера в эмуляторе, надо будет попробовать доразобраться...

Затем меня понесло и я встроил в программу SoftMPU сэквенсор MIDI для музячейки. Это позволило запускать почти любые игры, в которых в настройках звука можно выбрать "General MIDI / MPU401" в качестве звуковой карты. Например, вполне успешно поиграл со звуком в Heroes 2, Warcraft 2, The Increditable Machines 1-2, Lotus, Stunts, Monkey Island, Prince of Persia и тд. Небольшое видео, снятое на балтику девятку (прошу понять и простить): https://youtu.be/OT60Vs25MK4

И теперь плавно подхожу к сути вопросов:

Сэквенсор, который сейчас реализован и в DOSMID, и теперь вот в SoftMPU - очень примитивный. Фактически, я просто играю с нужной частотой ноты, без всяких эффектов, типа там экспрессии, вибрато, детюна и прочего прочего, чего бы можно было бы сделать. Единственное, что сейчас реализовано из "фишек" - так это pitch band'ы. Барабаны расставлены кое-как, можно сказать "от балды", без всякого соответствия General MIDI - регистры управления каналами ударных муз ячейки. Громкость никак не управляется, хотя наверное ей можно управлять через полосовые фильтры и бит громкости в каждом микшере каналов. Бит "атаки" так же никак не используется, а он есть в муз ячейки. И тд и тп.

Поэтому, если кто-то знает, как, например, правильно использовать полосовые фильтры в тональных каналах - прошу дать  наводку. Сейчас у меня сделано так - в зависимости от частоты ноты просто включается бит либо НЧ либо СЧ либо ВЧ. Когда поступает команда MIDI NOTE ON для низкой частоты вместе с ENABLE канала включается фильтр НЧ, для средних частот включается бит СЧ и для высоких частот бит ВЧ. То есть просто тупо что бы нота зазвучала. Но я чувствую, что с этим можно здорово поиграться и сделать на основе этих полосовых фильтров какую-нибудь там огибающую в зависимости от типа инструмента или что-то подобное, но ума не хватает.

Так же не могу придумать, как оперировать битом SA (плавная атака). Как и при каких событиях его можно было бы задействовать.

Как правильно использовать бит LP (low pass filter, усиление +6dB) - сейчас он у меня вроде всегда включен, и поэтому все ноты звучат громко, в не зависимости от громкости MIDI.

Как правильно соопоставить ударные каналы и их биты управления реальным MIDI инструментам ударных...

Вообщем, если честно, то я даже не могу сейчас правильно сформировать свои вопросы, поэтому буду рад каким-нибудь наводящим вопросам или любым идеям, как улучшить звучание MIDI чуть больше, чем просто включать/выключать ноты с одни и теми же фильтрами.

Спасибо, если кто-то дочитал до сюда -)
PS: Ах, да, чуть не забыл, страничка моего проекта на гитхабе: https://github.com/Tronix286/MuzCell . Там все схемы, плата, герберы, фотографии собранной платы в хорошем разрешении, весь софт, который я на данный момент адаптировал.

2

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

> На этом предисловие заканчиваю, простите что оно такое длинное получилось.

Да ладно, я с интересном прочитал :)) Это мы только на форуме прикидываемся, что кроме агата ничего в мире нет :)

> На слух еще вроде-бы ощущаю некоторую проблему с таймингами выполнения 6502 кода плеера в эмуляторе, надо будет попробовать доразобраться...

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

Тактирование проца у Агата идёт от кварцев 14.0 или 14.3 МГц делённое на 14.
Т.е. 1.0 МГц или чуть выше - это зависело от того, какие кварцы были на заводе. Но чаще встречается 14.3 МГц.
Если в плейере используются таймерные прерывания, тогда NMI - 50 Гц (синтезируются на матернике агата), а IRQ вряд ли использовалась (если и использовалось, то, вероятно, сама ячейка их и генерирует).

> Например, вполне успешно поиграл со звуком в Heroes 2, Warcraft 2, The Increditable Machines 1-2, Lotus, Stunts, Monkey Island, Prince of Persia и тд.

Wolf3d не пробовал (там вроде всё под adlib сделано) ? Есть разница от sound blaster ?

3

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Ничего себе, интересная разработка.

4 Отредактировано avivanov76 (30-03-2022 16:57)

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Я видел тему на zx-pk, очень классная штука! Как говорится, респект и уважуха :)

Вместо К555ТМ7, кстати, можно было поставить К555ТМ9 - она поменьше, было бы проще с разводкой.

Tronix пишет:

На слух еще вроде-бы ощущаю некоторую проблему с таймингами выполнения 6502 кода плеера в эмуляторе, надо будет попробовать доразобраться...

Агатовский плеер вообще-то никак не зависит от таймингов инструкций 6502. Там все завязано на таймер. Плеер смотрит, сколько времени осталось до начала воспроизведения очередной ноты и программирует на этот интервал таймер. Таймер срабатывает, вызывается прерывание, плеер снова смотрит время до следующей ноты и так далее. Сколько там конкретные инструкции процессора выполняются - совершенно неважно.

Мне кажется, тут какая-то ошибка с расчетом времени до очередной ноты. Агатовский плеер предполагает, что таймер тикает с частотой 7980 Гц. Она получается делением 1.021 МГц на 128. А PC-шный таймер работает от частоты 1.193 МГц. И, похоже, воспроизведение на эти 16-17% ускорено.

Еще мне показалось, что карта вышла слишком шумная. У Агатовской отношение сигнал/шум где-то -50 Дб. Шум есть, но на фоне музыки он почти не чувствуется. А тут прямо выпирает. Хотя может быть, это просто так оцифровано.

Судя по первому варианту Оттавана, с барабанами тоже что-то пошло не так :) Но получилось так плохо, что даже хорошо, какое-то новое звучание :)


Так, теперь к вопросам.

Вообще, готовых решений тут нет, придется соответствие инструментам General MIDI подбирать на слух.

Tronix пишет:

Громкость никак не управляется, хотя наверное ей можно управлять через полосовые фильтры и бит громкости в каждом микшере каналов.

Правильный способ управления громкостью - бит LP. Например, если velocity в MIDI меньше 80, то бит не ставим, если выше, то ставим.

Управление громкостью через фильтры - не слишком хороший вариант. Эффект снижения громкости прямо зависит от частоты ноты. Например, фильтр НЧ может сильно снизить громкость высоких нот, но будет мало влиять на ноты в среднем регистре. Хотя можно заморочиться и прямо на ходу прикидывать, какой будет эффект от фильтра для конкретной ноты и уже на основе этого принимать решение - включать фильтр или не включать.

Другая проблема - фильтр одновременно меняет тембр. Если взять низкую ноту и включить фильтр ВЧ, то, хотя нота формально станет тише, но тембр у нее будет такой, что заметность у нее станет выше.

Есть еще способ менять громкость выбором огибающей. Например, огибающая 3 звучит громче, чем огибающая 2. Но при этом, опять же, меняется весь звук целиком.

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

Tronix пишет:

Сейчас у меня сделано так - в зависимости от частоты ноты просто включается бит либо НЧ либо СЧ либо ВЧ

Это не очень хорошо. Тембр меняется и, кроме того, фильтр СЧ снижает громкость сильнее, чем фильтры ВЧ или НЧ. Было бы проще просто открыть все три фильтра, тогда тембр точно не будет меняться.

Tronix пишет:

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

Вообще, в синтезаторах фильтры делаются прежде всего для управления тембрами. Есть субтрактивный метод синтеза звука. В этом методе берется исходный, богатый гармониками сигнал, а затем с помощью фильтров из него удаляются ненужные гармоники. Для этого нужен перестраиваемый фильтр с большой крутизной среза.

К сожалению, в ЯЗС фильтры не перестраиваемые и крутизна у них маленькая. Нарулить с их помощью тембры, похожие на реальные инструменты практически нельзя. Сделать какую-то огибающую тоже нельзя, потому что все слишком дискретно. Если попытаться имитировать плавную перестройку переключением фильтров, то на слух никакой плавности не получится, переключения фильтров будут слышны.

И вообще, я тут три дня игрался с отдельными звуками и пришел к выводу, что фильтры в ЯЗС вообще были сделаны с другой целью. В музыке важно выстроить баланс голосов, чтобы всех было слышно, но никто никого не забивал. Если музыка пишется в студии, то для этого есть звукорежиссер, который сидит за микшером и этот самый баланс выстраивает. А в ЯЗС предусмотрено всего две градации громкости. Как быть?

Условно можно выделить в музыке бас, гармонию и ведущий голос. И вот, похоже, что ЯЗС вокруг этого построена:
1) Бас нужно завести через фильтр НЧ. Он очень сильно режет верха, там почти голый синус остается, поэтому гармоники баса никому не мешают.
2) Гармония - это аккорды, это несколько одновременно звучащих нот. Чтобы они не забили все остальные голоса фильтр СЧ ослабляет громкость.
3) Ведущий голос передает мелодию. Фильтр ВЧ как раз делает звук звонким и резким, он будет хорошо слышен на фоне всех остальных.

Проблема тут только в том, что мелодия изначально должна быть с учетом этого принципа написана. В MIDI плеере вообще непонятно, как на лету определить, какой голос ведущий, а какие голоса относятся к гармонии.

Tronix пишет:

Так же не могу придумать, как оперировать битом SA (плавная атака). Как и при каких событиях его можно было бы задействовать.

Это как раз несложно. Только надо учесть, что тут реально 3 вида огибающей, в управляющий регистр можно записать значения $1x, $2x, $3x и это будут разные огибающие.
Огибающая 1 (резкая, быстро затухающая) подходит для струнных инструментов, у которых звук извлекают руками. Например гитара, балалайка, арфа.
Огибающая 2 (плавная, незатухающая) подходит для струнных инструментов, на которых играют смычком. Например, скрипка, альт, виолончель. Также эта огибающая подходит для духовых и  всяких синтезаторных подкладов.
Огибающая 3 (резкая, незатухающая) подойдет для пианино и солирующих синтезаторов.

Tronix пишет:

Как правильно соопоставить ударные каналы и их биты управления реальным MIDI инструментам ударных...

Ну, с 4 инструментами все более-менее понятно. 6-й канал ЯЗС - это барабаны, 7-й - тарелки. Барабаны с тембром 0000 и 1000 - это большой барабан (два уровня громкости). Все остальные - это томы.
Тарелка с тембром 0011 - это закрытый хай-хет. С тембром 1011 - это открытый хай-хет.

А куда смэпить все остальное - не слишком важно, потому что оно все равно звучит непохоже.

5

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

> Вообще, готовых решений тут нет, придется соответствие инструментам General MIDI подбирать на слух.

Вроде в комплексе из двух плат (ЯЗС и спектроанализатор) - кто-то из них же имел вход MIDI ?
Разве не было намёка на существование ПО для агата, которое могло играть входные данные с MIDI через ЯЗС ?

6 Отредактировано Tronix (30-03-2022 11:38)

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Voldemar0 пишет:

Wolf3d не пробовал (там вроде всё под adlib сделано) ? Есть разница от sound blaster ?

Нет, Adlib это совсем не то же самое, что и General MIDI/MPU-401. Adlib - это FM синтезатор, OPL2 или OPL3, который управляется своими собственными регистрами, настройками и так далее. General MIDI или MPU-401 порт - это практически обычные стандартные MIDI команды, которые в него посылаются (играми, программами), а уже какая-либо железяка на порту должна эти MIDI команды сама распарсивать и управлять своим синтезатером. В нашем же случае, с помощью программы SoftMPU этот порт MPU-401 эмулируется (в виртуальном режиме 386 можно перехватывать обращение к портам ввода-вывода, ставить так называемую ловушку) и когда какая-либо программа или и игра пишет что-то в порт MPU401 срабатывает ловушка, в ее обработчике распарсиваются пришедшие MIDI-данные, и в зависимости от них управляется музыкальная ячейка, которая играет звук.

В теории, с Adlib конечно так же можно провернуть похожий трюк, эмулировать её порты и писать программную прослойку - конфигурация регистры OPL2 -> муз ячейка, но.... Но, пока остановимся на General MIDI/MPU-401 эмуляции, так как тут хотя-бы всё стандартизовано и более-менее понятно. А в случае адлиб нужно вникать в его программирование, у него каналов сильно больше - 12 вместо 6 в муз ячейке и тд и тп.
Так что пока без Wolf3D -)

avivanov76 пишет:

Вместо К555ТМ7, кстати, можно было поставить К555ТМ9 - она поменьше, было бы проще с разводкой.

Я когда схему рисовал, смотрел в сторону ТМ9, но почему-то не взял её. Точно помню, что решение было чем-то обосновано, но чем именно, сейчас уже точно не вспомню. Вроде-бы корпусов с ТМ9 у меня получалось больше, чем с ИР23, но могу и путать. Ну да ладно, как получилось, так и получилось...

avivanov76 пишет:

Агатовский плеер вообще-то никак не зависит от таймингов инструкций 6502. Там все завязано на таймер.

Верно, я смотрел в ваш дизасм. И да, в основном там правильная настройка таймера PC -> Агат важна, но я вроде бы учитывал пересчет. Но проверю ещё раз все, спасибо.

avivanov76 пишет:

Условно можно выделить в музыке бас, гармонию и ведущий голос. И вот, похоже, что ЯЗС вокруг этого построена:
1) Бас нужно завести через фильтр ВЧ. Он очень сильно режет верха, там почти голый синус остается, поэтому гармоники баса никому не мешают.

А точно-ли бас через фильтр ВЧ? Бас же это по-идее низкие частоты, и если мы пропускаем его только через фильтр ВЧ, то звук будет максимально тихим? То есть если бас - то мы включаем бит D5(включение канала) и бит D0(ВЧ-фильтр) ?
Тут точно нет ошибки? Ну, и то же самое с пунктами 2) и 3) - точно вы написали именно то, что имели ввиду? У меня почему-то стойкое ощущение, что тут на всех пунктах инверсия включена -) То есть для баса нужно включать фильтр НЧ, а не ВЧ; для гармонии остаются СЧ, как вы и писали; а для ведущего голоса включается фильтр ВЧ, а не НЧ.
Тут вот я запутался.

avivanov76 пишет:

Это как раз несложно. Только надо учесть, что тут реально 3 вида огибающей, в управляющий регистр можно записать значения $1x, $2x, $3x и это будут разные огибающие.
Огибающая 1 (резкая, быстро затухающая) подходит для струнных инструментов, у которых звук извлекают руками. Например гитара, балалайка, арфа.
Огибающая 2 (плавная, незатухающая) подходит для струнных инструментов, на которых играют смычком. Например, скрипка, альт, виолончель. Также эта огибающая подходит для духовых и  всяких синтезаторных подкладов.
Огибающая 3 (резкая, незатухающая) подойдет для пианино и солирующих синтезаторов.

Вот тут немного не понял. Как это в управляющий регистр можно записать 3 значения? Исходим из описания:

Управление блоками коммутации тональных каналов (частотные диапазоны приведены приблизительно, по уровню 0.5):

D0 - выдача сигнала на ВЧ-канал (гармоники 1..4 КГц (верхняя частота определяется микшером)).
D1 - выдача сигнала на СЧ-канал (гармоники 0.200..1.5 КГц).
D2 - выдача сигнала на НЧ-канал (гармоники ..1 КГц).
D3 - НЧ фильтр (добавляет около 5дб на частотах до 600 Гц).
D4 - импульс уровня. При установке этого бита амплитуда резко возрастает, затем плавно спадает (около 0.5 секунды). При сбросе - резко снижается и затем плавно восстанавливается. Установленный бит даёт незначительное постоянное увеличение уровня сигнала.
D5 - включение канала. При установке этого бита амплитуда быстро возрастает (около 0.1 секунды) и сохраняется на высоком уровне. При сбросе также быстро уменьшается.

То есть мы говорим о бите D4 совместно с битами D0..D2? То есть, если я правильно понял мысль, например когда приходит команда NOTE ON на контроллер с инструментом например гитара, мы для включения ноты выставляем бит D4 и бит D0. А если, например, то же самое, но для пианино, то выставляем D4 и D3? Так? А нужно ли при этом включать D5?

Но в любом случае спасибо за такой подробный ответ!

7 Отредактировано avivanov76 (30-03-2022 17:14)

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Tronix пишет:

А точно-ли бас через фильтр ВЧ? Бас же это по-идее низкие частоты, и если мы пропускаем его только через фильтр ВЧ, то звук будет максимально тихим? То есть если бас - то мы включаем бит D5(включение канала) и бит D0(ВЧ-фильтр) ?
Тут точно нет ошибки? Ну, и то же самое с пунктами 2) и 3) - точно вы написали именно то, что имели ввиду? У меня почему-то стойкое ощущение, что тут на всех пунктах инверсия включена -) То есть для баса нужно включать фильтр НЧ, а не ВЧ; для гармонии остаются СЧ, как вы и писали; а для ведущего голоса включается фильтр ВЧ, а не НЧ.

ОЙ! Эк меня переклинило на фильтрах. Да, конечно должно быть наоборот. Поправил.

Tronix пишет:

Вот тут немного не понял. Как это в управляющий регистр можно записать 3 значения?

Я имел в виду это:

D5 D4
 0  0  - канал выключен
 0  1  - канал включен, огибающая 1
 1  0  - канал включен, огибающая 2
 1  1  - канал включен, огибающая 3

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

Voldemar0 пишет:

Вроде в комплексе из двух плат (ЯЗС и спектроанализатор) - кто-то из них же имел вход MIDI ?
Разве не было намёка на существование ПО для агата, которое могло играть входные данные с MIDI через ЯЗС ?

Тот софт для MIDI, который я успел расковырять, такой возможности не имеет. Плеер MIDI редактора выводит музыку не через ЯЗС, а через порт MIDI (хотя при этом использует таймер ЯЗС для выдержки временных интервалов).

8

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

avivanov76 пишет:

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

А, всё, понял. Вот это интересная идея, попробую воплотить. Спасибо еще раз за ценные подсказки!

9 Отредактировано Tronix (22-05-2022 23:26)

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Попробовал, но особых успехов не добился. Всё-таки с эмуляцией MPU401 порта и различного рода игрушками времен DOS лучше всего работает самый простой вариант - играем тупо частоту ноты в MIDI, без всяких особых изысков. При проигрывании же реальных MIDI треков для серьезных полифонических синтезаторов естественно добиться правдоподобного  звучания задача очень сложная для музячейки. Поэтому оставил примерно всё как и было у меня с самого начала по MIDI проигрывателям и остальному софту.

Зато, стараниями широко известного в узких кругах shiru8bit (AON DEMO, HEOHDEMO, куча 1-bit музычки и тд и тп) недавно зарелизился трекер с интересным названием Yach*PMS для музячейки:

https://i.ibb.co/M5mhmSK/photo-2022-05-13-09-30-23.jpg

Скачать бесплатно и без СМС: https://shiru.untergrund.net/software.shtml

Есть вендовая версия со встроенной эмуляцией, есть DOS-версия для реальной железяки, есть сорцы.

Интересный подход применен к эмуляции девайса - тональные каналы ВИ53 программные, а вот барабаны и тарелки на основе вейвтейбла - записаны все сэмплы барабанов/тарелок во всех вариациях настроек с реальной железки в WAV файлы, они же и проигрываются при эмуляции. Подробнее у автора на патреоне https://www.patreon.com/shiru8bit или твиттере: https://mobile.twitter.com/shiru8bit

10

Re: Копия по мотивам ЯЗС на IBM PC и вопросы по MIDI

Прикольно!