PDA

Просмотр полной версии : Музыка Океана(-240)



ivagor
09.02.2019, 13:27
Адаптировал для океана одноголосный биперный проигрыватель, который делал как бы для Львова аж в 2012. Хотя голос всего один, но есть фишка - практически максимальный достижимый диапазон вверх. За это пришлось отдать 5 Кб памяти.
Прототип был "как бы для Львова" потому что у реального Львова процессор тормозится, эти тормоза не эмулируются и для него надо тюнить на реале. А вот с океаном все должно быть хорошо, у него тормозов нет. Только я поленился прецизионно пересчитать периоды и сделал целочисленную коррекцию, это не добавило точности третьей октаве, которая и так была не очень (найдите третью октаву в других биперных движках, особенно для 8080).
Прилагаются 7 музыкальных примеров и один тестовый. В музыкальных третья октава не используется, т.ч. люди с чувствительным слухом скорее всего не будут травмированы, если не будут слушать тест.
Исходники проигрывателя и примеров прилагаются, желающие могут попробовать забацать что-нибудь свое.

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

Забыл написать, что примеры зациклены и будут играть бесконечно (или до нажатия любой клавиши).

tnt23
09.02.2019, 14:15
Вечером заслушаю.
Вызывает интерес также тема полифонической музыки, при наличии таймера и нетормозящегося процессора.

ivagor
09.02.2019, 19:33
Из полифонии могу предложить эксолона. Можно было просто взять последнюю векторовскую биперную версию и поменять порты, но мне было интересно попробовать магнитофонный цап. При этом основной цикл настолько разогнался, что его пришлось серьезно замедлять, чтобы привести к диапазону мелодии. И это без многокилобайтных развернутых циклов (магнитофонный цап рулит). Я замедлил так, чтобы примерно подошли периоды ранее рассчитанные для промежуточной специалистовской версии, с ними умеренно фальшивит, слушать почти можно. Приложил исходник и wav, записанный в emu.
Upd: сильно уменьшил перекос основного цикла и побочных веток, взял таблицу периодов от векторовской версии и как там транспонировал вниз. Этот вариант имхо можно слушать.

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

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

tnt23
09.02.2019, 23:37
ivagor, тест звучит неплохо. Где-то ближе к верху уху чудится неточность, но и так неплохо.
В самых низах тембр наводит на мысль о скважности, сильно отличной от мендра.

ivagor
10.02.2019, 08:08
тест звучит неплохо. Где-то ближе к верху уху чудится неточность, но и так неплохо.
В самых низах тембр наводит на мысль о скважности, сильно отличной от мендра.
Речь про тест из первого поста (https://zx-pk.ru/threads/30080-muzyka-okeana(-240).html?p=998379&viewfull=1#post998379)? Ноты третьей октавы не совсем точные, особенно после автоматической коррекции. Если кто-нибудь наберет музыкальный пример с ними, то я скорее всего найду силы пересчитать их поточнее и уберу коррекцию.
А вот насчет скважности низких нот дело может быть только в реале, в каких-то особенностях "тракта бипера". Если записать wav из эмулятора и сравнить длительность полупериодов, то она одинаковая.

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

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

Доработал эксолоновскую музычку (https://zx-pk.ru/threads/30080-muzyka-okeana(-240).html?p=998421&viewfull=1#post998421). Пожалуй 3 канала через магнитофонный цап с нормальным диапазоном и точностью все же будет проблематично, 2 приемлемо.

b2m
10.02.2019, 18:03
Пожалуй 3 канала через магнитофонный цап с нормальным диапазоном и точностью все же будет проблематично
Я для Башкирии делал биперный плеер на три канала (на диске disk3.cpm на второй стороне есть play.com и файлы *.not), по-моему было нормально.

ivagor
10.02.2019, 18:41
На всякий случай я соломку про нормальный диапазон и точность подстелил, хотя количественно никак и не задал эти параметры. Т.е. я не спорю, что для 8080 возможен трехголосый биперный проигрыватель, но с ограничениями.
Послушал 4 примера .NOT и вероятно я глуховат - услышал в FR, PM и SP 2 голоса и в GH - один (+потрескивания). Мои ухи тут бессильны, надо внутрь смотреть.

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

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

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

Кстати есть еще музыкальная система для РК86, ее и на другие компы переносили. Там все круто (вроде 3 канала), но насколько помню, звук она выдает специфический.

b2m
10.02.2019, 20:01
FR должен быть трёхголосый, в SP только конечный аккорд из трёх нот. Два других - какая-то проба пера, набраны не по нотам. Если знаком с MSX-ной нотной записью, можешь сам чего-нибудь набрать, начало голосов $1,$2,$3.

ivagor
10.02.2019, 20:59
У меня два предположения - или на диске DISK3.CPM версия плеера PLAY.COM с ошибкой или я не понял, как он должен выдавать 3 голоса. Может соберусь дизассемблировать, но не уверен.

tnt23
10.02.2019, 23:19
Кстати есть еще музыкальная система для РК86, ее и на другие компы переносили. Там все круто (вроде 3 канала), но насколько помню, звук она выдает специфический.

Она с Альтаира перетащена, а сама года 1976. Где-то на форуме полно ссылок про нее было.

b2m
10.02.2019, 23:51
как он должен выдавать 3 голоса
Три таймера на три регистровые пары BC,DE,HL (старший байт считает, младший инициализация), как досчитали, выдаём еденицу, через некоторое время (соответствующее громкости канала) выдаём ноль. Согласен, не самый честный и правильный вариант, но лучше, чем ничего. По прерыванию обрабатывается мелодия и меняет громкость (в переменной) и высоту звука (младший байт регистра). Для пауз используется серия из 256 NOP-ов, чем больше пауза, тем больше их выполняется. Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx и тому подобные хаки. В исходнике обработчик мелодии сделан макросом и повторяется три раза для каждого из каналов.

ivagor
11.02.2019, 06:01
Она с Альтаира перетащена, а сама года 1976.
О, я не знал. Тогда понятно, почему там в качестве примеров было что-то из ихнего мюзикла того времени.


Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx
Значит я правильно понял. Проблема в том, что канал с наименьшим адресом всегда MVI A, я при трассировке не смог увидеть, чтобы туда писался OUT. Хотя процедура такая (как и для других каналов) есть.

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


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

ivagor
11.02.2019, 08:10
Не утерпел до вечера, копнул PLAY.COM. Все же я не глухой, не слепой и не тупой, нашел в нем ошибку. Хотя как посмотреть, возможно ошибка в файлах .NOT
Просто несогласованность - в файлах .NOT номер голоса 1,2,3, а PLAY.COM ожидает 0,1,2. Поэтому младший канал никогда не был задействован. Правильнее исправить PLAY.COM, но проще - файлы NOT. Если подкорректировать FR и SP, то в FR становится слышен адекватный третий (или нулевой, кому как нравится) голос, в SP как то странновато.
Мне это напомнило историю с публикацией про рисование окружности для специалистовского бейсика.

b2m
11.02.2019, 10:12
Прикольно. Я, видимо, был в восторге от мелодии на каналах 1 и 2, и не заметил ошибку. :) Исправлять вряд-ли буду, это уже история каменного века.
Кстати, теоретически, по такому принципу можно до 6 каналов сделать, если константы высоты тона и громкости прямо в код писать, но тогда на высоких нотах ещё больше фальшивить будет. На трёх каналах опорная частота 33КГц и делитель однобайтовый (основное время выполняются 4 пары DCR JNZ, это 60 тактов).

tnt23
11.02.2019, 10:34
Она с Альтаира перетащена, а сама года 1976.

http://altairclone.com/music_system.htm

ivagor
11.02.2019, 10:53
Сколько там набранной музыки, имеет смысл подумать над портированием этой штуки. Немного фальшивит, но звучит круто, особенно учитывая возможности железа.

tnt23
11.02.2019, 12:19
Сколько там набранной музыки, имеет смысл подумать над портированием этой штуки. Немного фальшивит, но звучит круто, особенно учитывая возможности железа.

Возможно, надо подзаточить ее точнее под клок в конкретной системе.

Я же вообще хотел бы подумать над возможностью сделать многоканальный трекер (4 и более), с использованием прерываний высокой частоты (скажем, с периодом строчной развертки 15кГц).

ivagor
11.02.2019, 12:26
Я же вообще хотел бы подумать над возможностью сделать многоканальный трекер (4 и более), с использованием прерываний высокой частоты (скажем, с периодом строчной развертки 15кГц).
Для "меандрового" звука или для чего-то вроде modов?

tnt23
11.02.2019, 14:25
Для "меандрового" звука или для чего-то вроде modов?

Для "модов", т.е. с какими-никакими инструментами и как минимум envelopes. Это в какой-то степени реализовано в самых крутых мультиканальных трекерах для Спектрума (4 и 8 каналов, и даже совсем уже невероятные 16 каналов). По идее у нас все для этого есть, у меня не хватает мозга и усидчивости это осмыслить.

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

См.:
"ZX-16 (Jan Deak, 2014) (пример звучания (https://soundcloud.com/irrlicht-project/crystal-realm))

Рекордное достижение в области биперной полифонии – единственный в своём роде 16-канальный движок от ветерана биперной сцены и создателя линейки движков и редакторов ZX-3, ZX-7, ZX-10. К сожалению, автор покинул нас в ноябре 2014 года, но дело его живёт, а достижение едва ли будет превзойдено. Движок генерирует звук по принципу ZX-7 и имеет схожее, но более шумное звучание. Ударные инструменты отсутствуют. "

ivagor
11.02.2019, 14:49
Однако, это нечто мозговыносящее и непонятное. Код я не смотрел, но просто по рабоче-крестьянски можно прикинуть. Пусть по минимуму, без громкости и без особой заботы о точности высоких нот, но чтобы более-менее симметрично. Для каждого канала нужен счетчик (части) периода, его надо бы для пристойности хранить в регистре. Если так рассуждать, то 8080 даст 6 голосов максимум, как уже написал b2m, аккумулятор в сочетании с самомодифицирующимся кодом останется для всего остального. Это я без частых прерываний. У z80, конечно еще +6 альтернативных "основных" +1 альтернативный A +4 IX IY. Хотя может в zx-16 нечто совершенно инновационное.
Если делать подобную штуку, то она и сама сложная и музыку для нее придется самому искать/набирать или даже сочинять. В общем это круто, желаю успеха, но это очень сложно.

tnt23
11.02.2019, 15:09
Мне представлялось нечто очень приблизительно такое: имеем прерывания с некоторой высокой частотой, допустим, 15КГц. Пусть наш обработчик прерываний - весьма компактный и тщательно соптимизированный - в четный вызов выставляет биперу 0, в нечетный 1. Получаем на бипере свист 15КГц, который, надеюсь, не будет слышен большинству ретрокомпьютерщиков, кому за 40, и кто использовал для бипера дешевый капсюль, неспособный воспроизвести ничего выше десяти килогерц.

Познакомьтесь, это наш ШИМ. Теперь достаточно в оставшееся время в обработчике складывать инструменты (и их огибающие) и определять, в какую сторону сдвинуть переключение бипера в следующее прерывание. Piece of cake.

b2m
11.02.2019, 15:19
У z80, конечно еще +6 альтернативных "основных" +1 альтернативный A +4 IX IY
Как раз 16 и получается: 6 основных + 6 альтернативных + 4 за счёт недокументированных байтовых операций с регистрами IX IY.

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


достаточно в оставшееся время
А останется у тебя там - всего ничего. Я ж говорю - 4 пары DCR JNZ это максимум 33КГц всего (при клоке 2МГц). По прерыванию можно обрабатывать ноты, меняя делители для счётчиков, и в это время получишь щелчёк тишины. При смене ноты это не страшно, более того, эта пауза там должна быть. Программный ШИМ на восьмибитках - это из области фантастики.

svofski
11.02.2019, 15:27
tnt23, с высоты полета орбитальной станции так выглядит описание того, как работает проигрыватель Scream Tracker на PC. Но там процессор был 80286, и по-моему меньше, чем на 12МГц этот проигрыватель не особо заводился. И свистело и скрежетало это ужасающе даже на писиспикере. У 8080 на 2.5МГц, если допустим в среднем 10 тактов на инструкцию, при прерываниях на 15КГц получится что-то типа 17 инструкций на прерывание.


Познакомьтесь, это наш ШИМ. Теперь достаточно в оставшееся время в обработчике складывать инструменты (и их огибающие) и определять, в какую сторону сдвинуть переключение бипера в следующее прерывание. Piece of cake.
Какие могут быть проблемы в самом деле =)

ivagor
11.02.2019, 15:36
Познакомьтесь, это наш ШИМ.
Не могу сказать, что я все понял. Если применительно к океану, то я минималистичный шим представляю так:
1. Есть прерывания от таймера. Их можно для данного дела настроить на частоту в районе 23.5 кГц, это даст 64 уровня для п. 2
2. Заводим из океана частоту 1.5 МГц на тактовый "свободного" канала таймера, снимаем с этого канала результат шима. Т.е. почти бесплатный шимоцап (но нормальный цап все равно лучше).
Пробовал нечто подобное (с вариантами) на векторе, но т.к. там прерываний по таймеру нет, то процессор в промежутках между выдачей семплов таймеру просто выдерживал задержки.


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

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


Программный ШИМ на восьмибитках - это из области фантастики.
Просто проиграть фрагмент вава вполне реально даже и без таймера (при сравнительно высоких частотах дискретизации получалось 4-8 уровней), для вектора я такое выкладывал (еще до таймерного шима), наверняка и на других компах делали. Другое дело, что для инструментов и голосов при биперном шиме времени, конечно, на 8080 не остается.

tnt23
11.02.2019, 16:31
2. Заводим из океана частоту 1.5 МГц на тактовый "свободного" канала таймера, снимаем с этого канала результат шима. Т.е. почти бесплатный шимоцап

Если до этого места я просто ничего не понимал, то дальше перестал вообще ориентироваться :) ок, замнем тему, пока я не созрею сделать самоиграйку на 15КГц с парой синусов.

ivagor
11.02.2019, 16:48
У океана один канал таймера ведь свободен и выведен на разъем? Я про него. Нужно подать на него тактовую - ее берем в океане, 1.5 МГц, которые идут на "внутренние" каналы, гейт наверно можно в состояние всегда готов. Все, с выхода этого канала можно снимать шим. Получится что-то типа этого (https://zx-pk.ru/threads/14607-quot-covox-dlya-vektor-06ts-quot.html?p=880782&viewfull=1#post880782), только круче, т.к. между семплами можно не только ждать, но и что-то делать.

tnt23
11.02.2019, 16:52
У океана один канал таймера ведь свободен и выведен на разъем?

Можно и так, но для этого нужно вешать дополнительные проводки. И это неспортивно применительно к биперу.

ivagor
11.02.2019, 18:26
Познакомьтесь, это наш ШИМ.
Медленно, но до меня дошло, что речь похоже про дельта-сигма цап. Меня сбило начало "в четный вызов выставляет биперу 0, в нечетный 1".

svofski
11.02.2019, 18:36
ivagor, все правильно. А я вот забыл, что для того, чтобы такая схема работала, нужен еще собственно таймер, который может отмерять одиночные импульсы заданной длины.

ivagor
11.02.2019, 22:03
Немного оффтопа с критикой отдельного недостатка emu.
Послушал музыкальную систему портированную на эврику (специальный клон специалиста) в emu (с добавлением input=cpu.int в конфиге). И вспомнил, почему ее звук казался мне странным. В emu80 звук намного лучше. С РКшной версией все аналогично. Это я к тому, что портировать музыкальную систему на океан не стоит, в эмуляторе толком не послушать. Еще интересно, есть ли примеры портов этой системы на компы с "обычным" бипером.
emu очень хороший эмулятор, но качество биперного звука плохое. Как в каменном веке.

ivagor
12.02.2019, 15:59
Извините за оффтоп (еще пару слов про музыкальную систему).
Хорошая штука склероз, через несколько лет известные вещи воспринимаются как новые. Оказывается в 2013 я уже интересовался на форуме насчет нее, DDp выложил (https://zx-pk.ru/threads/13270-radio-86rk-po-stranitsam-zhurnala-quot-radio-quot.html?p=570758&viewfull=1#post570758) архивы. И там по ссылке прочитал, что она с другого компа и что на спек ее переносили. Может через несколько лет еще раз те же вопросы возникнут.

tnt23
12.02.2019, 16:29
ivagor, не нужно извиняться. Музыка есть голос бога, как сказал известный питерский композитор Глушко, и не может быть оффтопом.

А склерозом мы все страдаем в той или иной степени; там и я когда-то отметился https://zx-pk.ru/threads/15093-muzykalnyj-redaktor-el-dorado.html?p=361649&viewfull=1#post361649

b2m
12.02.2019, 21:48
emu очень хороший эмулятор, но качество биперного звука плохое. Как в каменном веке.
Теперь, видимо, как в бронзовом веке.

tnt23
13.02.2019, 09:53
b2m, спасибо! а можешь проапдейтить history.txt для понимания отличий бронзового века от предыдущих веков?

b2m
13.02.2019, 10:24
Блин, я уже и сам не помню, чего там в предыдущие века сделано было. Каюсь, забил я на этот файл. Просто прими как данность.

tnt23
13.02.2019, 14:25
Принял как данность. Но интересно, что же все-таки изменилось в части звука для "Океана-240"?

ivagor
13.02.2019, 15:42
Есть предположение, что изменения в emu повлияют только в случае очень коротких включений бипера. Если в океанском софте таких примеров нет, то вряд ли можно будет заметить разницу.

b2m
13.02.2019, 16:24
Кроме того, что описал ivagor, последнее, что я делал - добавил бипер в конфиги Океана-240 (как и просили) и привязку файлов .ok для запуска их в конфиге Океана-240 с адреса 100h.