Просмотр полной версии : Музыка Океана(-240)
Адаптировал для океана одноголосный биперный проигрыватель, который делал как бы для Львова аж в 2012. Хотя голос всего один, но есть фишка - практически максимальный достижимый диапазон вверх. За это пришлось отдать 5 Кб памяти.
Прототип был "как бы для Львова" потому что у реального Львова процессор тормозится, эти тормоза не эмулируются и для него надо тюнить на реале. А вот с океаном все должно быть хорошо, у него тормозов нет. Только я поленился прецизионно пересчитать периоды и сделал целочисленную коррекцию, это не добавило точности третьей октаве, которая и так была не очень (найдите третью октаву в других биперных движках, особенно для 8080).
Прилагаются 7 музыкальных примеров и один тестовый. В музыкальных третья октава не используется, т.ч. люди с чувствительным слухом скорее всего не будут травмированы, если не будут слушать тест.
Исходники проигрывателя и примеров прилагаются, желающие могут попробовать забацать что-нибудь свое.
- - - Добавлено - - -
Забыл написать, что примеры зациклены и будут играть бесконечно (или до нажатия любой клавиши).
Вечером заслушаю.
Вызывает интерес также тема полифонической музыки, при наличии таймера и нетормозящегося процессора.
Из полифонии могу предложить эксолона. Можно было просто взять последнюю векторовскую биперную версию и поменять порты, но мне было интересно попробовать магнитофонный цап. При этом основной цикл настолько разогнался, что его пришлось серьезно замедлять, чтобы привести к диапазону мелодии. И это без многокилобайтных развернутых циклов (магнитофонный цап рулит). Я замедлил так, чтобы примерно подошли периоды ранее рассчитанные для промежуточной специалистовской версии, с ними умеренно фальшивит, слушать почти можно. Приложил исходник и wav, записанный в emu.
Upd: сильно уменьшил перекос основного цикла и побочных веток, взял таблицу периодов от векторовской версии и как там транспонировал вниз. Этот вариант имхо можно слушать.
- - - Добавлено - - -
Если подумать, то раз пришлось замедлять, значит можно вместо балласта добавить третий голос. Тут проблема в основном с примером, надо или набирать или конвертить. Наверно из Баха подойдет что-нибудь короткое или фрагмент.
ivagor, тест звучит неплохо. Где-то ближе к верху уху чудится неточность, но и так неплохо.
В самых низах тембр наводит на мысль о скважности, сильно отличной от мендра.
тест звучит неплохо. Где-то ближе к верху уху чудится неточность, но и так неплохо.
В самых низах тембр наводит на мысль о скважности, сильно отличной от мендра.
Речь про тест из первого поста (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 приемлемо.
Пожалуй 3 канала через магнитофонный цап с нормальным диапазоном и точностью все же будет проблематично
Я для Башкирии делал биперный плеер на три канала (на диске disk3.cpm на второй стороне есть play.com и файлы *.not), по-моему было нормально.
На всякий случай я соломку про нормальный диапазон и точность подстелил, хотя количественно никак и не задал эти параметры. Т.е. я не спорю, что для 8080 возможен трехголосый биперный проигрыватель, но с ограничениями.
Послушал 4 примера .NOT и вероятно я глуховат - услышал в FR, PM и SP 2 голоса и в GH - один (+потрескивания). Мои ухи тут бессильны, надо внутрь смотреть.
- - - Добавлено - - -
Бегло посмотрел процесс проигрывания FR, PM и SP и у меня создалось впечатление, что плеер потенциально трехканальный, но один из каналов не используется.
Имхо основная проблема с многоканальным биперением на медленном проце с репертуаром, надо чтобы он влезал в достижимый диапазон и не сильно фальшивил.
- - - Добавлено - - -
Кстати есть еще музыкальная система для РК86, ее и на другие компы переносили. Там все круто (вроде 3 канала), но насколько помню, звук она выдает специфический.
FR должен быть трёхголосый, в SP только конечный аккорд из трёх нот. Два других - какая-то проба пера, набраны не по нотам. Если знаком с MSX-ной нотной записью, можешь сам чего-нибудь набрать, начало голосов $1,$2,$3.
У меня два предположения - или на диске DISK3.CPM версия плеера PLAY.COM с ошибкой или я не понял, как он должен выдавать 3 голоса. Может соберусь дизассемблировать, но не уверен.
Кстати есть еще музыкальная система для РК86, ее и на другие компы переносили. Там все круто (вроде 3 канала), но насколько помню, звук она выдает специфический.
Она с Альтаира перетащена, а сама года 1976. Где-то на форуме полно ссылок про нее было.
как он должен выдавать 3 голоса
Три таймера на три регистровые пары BC,DE,HL (старший байт считает, младший инициализация), как досчитали, выдаём еденицу, через некоторое время (соответствующее громкости канала) выдаём ноль. Согласен, не самый честный и правильный вариант, но лучше, чем ничего. По прерыванию обрабатывается мелодия и меняет громкость (в переменной) и высоту звука (младший байт регистра). Для пауз используется серия из 256 NOP-ов, чем больше пауза, тем больше их выполняется. Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx и тому подобные хаки. В исходнике обработчик мелодии сделан макросом и повторяется три раза для каждого из каналов.
Она с Альтаира перетащена, а сама года 1976.
О, я не знал. Тогда понятно, почему там в качестве примеров было что-то из ихнего мюзикла того времени.
Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx
Значит я правильно понял. Проблема в том, что канал с наименьшим адресом всегда MVI A, я при трассировке не смог увидеть, чтобы туда писался OUT. Хотя процедура такая (как и для других каналов) есть.
- - - Добавлено - - -
В исходнике обработчик мелодии сделан макросом и повторяется три раза для каждого из каналов.
Возможно я плохо трассировал, но пока пребываю в убеждении, что с одним из каналов что-то не так.
Не утерпел до вечера, копнул PLAY.COM. Все же я не глухой, не слепой и не тупой, нашел в нем ошибку. Хотя как посмотреть, возможно ошибка в файлах .NOT
Просто несогласованность - в файлах .NOT номер голоса 1,2,3, а PLAY.COM ожидает 0,1,2. Поэтому младший канал никогда не был задействован. Правильнее исправить PLAY.COM, но проще - файлы NOT. Если подкорректировать FR и SP, то в FR становится слышен адекватный третий (или нулевой, кому как нравится) голос, в SP как то странновато.
Мне это напомнило историю с публикацией про рисование окружности для специалистовского бейсика.
Прикольно. Я, видимо, был в восторге от мелодии на каналах 1 и 2, и не заметил ошибку. :) Исправлять вряд-ли буду, это уже история каменного века.
Кстати, теоретически, по такому принципу можно до 6 каналов сделать, если константы высоты тона и громкости прямо в код писать, но тогда на высоких нотах ещё больше фальшивить будет. На трёх каналах опорная частота 33КГц и делитель однобайтовый (основное время выполняются 4 пары DCR JNZ, это 60 тактов).
Она с Альтаира перетащена, а сама года 1976.
http://altairclone.com/music_system.htm
Сколько там набранной музыки, имеет смысл подумать над портированием этой штуки. Немного фальшивит, но звучит круто, особенно учитывая возможности железа.
Сколько там набранной музыки, имеет смысл подумать над портированием этой штуки. Немного фальшивит, но звучит круто, особенно учитывая возможности железа.
Возможно, надо подзаточить ее точнее под клок в конкретной системе.
Я же вообще хотел бы подумать над возможностью сделать многоканальный трекер (4 и более), с использованием прерываний высокой частоты (скажем, с периодом строчной развертки 15кГц).
Я же вообще хотел бы подумать над возможностью сделать многоканальный трекер (4 и более), с использованием прерываний высокой частоты (скажем, с периодом строчной развертки 15кГц).
Для "меандрового" звука или для чего-то вроде modов?
Для "меандрового" звука или для чего-то вроде 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 и имеет схожее, но более шумное звучание. Ударные инструменты отсутствуют. "
Однако, это нечто мозговыносящее и непонятное. Код я не смотрел, но просто по рабоче-крестьянски можно прикинуть. Пусть по минимуму, без громкости и без особой заботы о точности высоких нот, но чтобы более-менее симметрично. Для каждого канала нужен счетчик (части) периода, его надо бы для пристойности хранить в регистре. Если так рассуждать, то 8080 даст 6 голосов максимум, как уже написал b2m, аккумулятор в сочетании с самомодифицирующимся кодом останется для всего остального. Это я без частых прерываний. У z80, конечно еще +6 альтернативных "основных" +1 альтернативный A +4 IX IY. Хотя может в zx-16 нечто совершенно инновационное.
Если делать подобную штуку, то она и сама сложная и музыку для нее придется самому искать/набирать или даже сочинять. В общем это круто, желаю успеха, но это очень сложно.
Мне представлялось нечто очень приблизительно такое: имеем прерывания с некоторой высокой частотой, допустим, 15КГц. Пусть наш обработчик прерываний - весьма компактный и тщательно соптимизированный - в четный вызов выставляет биперу 0, в нечетный 1. Получаем на бипере свист 15КГц, который, надеюсь, не будет слышен большинству ретрокомпьютерщиков, кому за 40, и кто использовал для бипера дешевый капсюль, неспособный воспроизвести ничего выше десяти килогерц.
Познакомьтесь, это наш ШИМ. Теперь достаточно в оставшееся время в обработчике складывать инструменты (и их огибающие) и определять, в какую сторону сдвинуть переключение бипера в следующее прерывание. Piece of cake.
У z80, конечно еще +6 альтернативных "основных" +1 альтернативный A +4 IX IY
Как раз 16 и получается: 6 основных + 6 альтернативных + 4 за счёт недокументированных байтовых операций с регистрами IX IY.
- - - Добавлено - - -
достаточно в оставшееся время
А останется у тебя там - всего ничего. Я ж говорю - 4 пары DCR JNZ это максимум 33КГц всего (при клоке 2МГц). По прерыванию можно обрабатывать ноты, меняя делители для счётчиков, и в это время получишь щелчёк тишины. При смене ноты это не страшно, более того, эта пауза там должна быть. Программный ШИМ на восьмибитках - это из области фантастики.
tnt23, с высоты полета орбитальной станции так выглядит описание того, как работает проигрыватель Scream Tracker на PC. Но там процессор был 80286, и по-моему меньше, чем на 12МГц этот проигрыватель не особо заводился. И свистело и скрежетало это ужасающе даже на писиспикере. У 8080 на 2.5МГц, если допустим в среднем 10 тактов на инструкцию, при прерываниях на 15КГц получится что-то типа 17 инструкций на прерывание.
Познакомьтесь, это наш ШИМ. Теперь достаточно в оставшееся время в обработчике складывать инструменты (и их огибающие) и определять, в какую сторону сдвинуть переключение бипера в следующее прерывание. Piece of cake.
Какие могут быть проблемы в самом деле =)
Познакомьтесь, это наш ШИМ.
Не могу сказать, что я все понял. Если применительно к океану, то я минималистичный шим представляю так:
1. Есть прерывания от таймера. Их можно для данного дела настроить на частоту в районе 23.5 кГц, это даст 64 уровня для п. 2
2. Заводим из океана частоту 1.5 МГц на тактовый "свободного" канала таймера, снимаем с этого канала результат шима. Т.е. почти бесплатный шимоцап (но нормальный цап все равно лучше).
Пробовал нечто подобное (с вариантами) на векторе, но т.к. там прерываний по таймеру нет, то процессор в промежутках между выдачей семплов таймеру просто выдерживал задержки.
Как раз 16 и получается
Меня смущают мои любимые достижимый диапазон вверх и точность. При написании музыки специально под такой предельный движок острые углы конечно можно сгладить, но т.к. меня интересует только адаптация существующей музыки, то полезность подобного движка для меня не очень большая.
- - - Добавлено - - -
Программный ШИМ на восьмибитках - это из области фантастики.
Просто проиграть фрагмент вава вполне реально даже и без таймера (при сравнительно высоких частотах дискретизации получалось 4-8 уровней), для вектора я такое выкладывал (еще до таймерного шима), наверняка и на других компах делали. Другое дело, что для инструментов и голосов при биперном шиме времени, конечно, на 8080 не остается.
2. Заводим из океана частоту 1.5 МГц на тактовый "свободного" канала таймера, снимаем с этого канала результат шима. Т.е. почти бесплатный шимоцап
Если до этого места я просто ничего не понимал, то дальше перестал вообще ориентироваться :) ок, замнем тему, пока я не созрею сделать самоиграйку на 15КГц с парой синусов.
У океана один канал таймера ведь свободен и выведен на разъем? Я про него. Нужно подать на него тактовую - ее берем в океане, 1.5 МГц, которые идут на "внутренние" каналы, гейт наверно можно в состояние всегда готов. Все, с выхода этого канала можно снимать шим. Получится что-то типа этого (https://zx-pk.ru/threads/14607-quot-covox-dlya-vektor-06ts-quot.html?p=880782&viewfull=1#post880782), только круче, т.к. между семплами можно не только ждать, но и что-то делать.
У океана один канал таймера ведь свободен и выведен на разъем?
Можно и так, но для этого нужно вешать дополнительные проводки. И это неспортивно применительно к биперу.
Познакомьтесь, это наш ШИМ.
Медленно, но до меня дошло, что речь похоже про дельта-сигма цап. Меня сбило начало "в четный вызов выставляет биперу 0, в нечетный 1".
ivagor, все правильно. А я вот забыл, что для того, чтобы такая схема работала, нужен еще собственно таймер, который может отмерять одиночные импульсы заданной длины.
Немного оффтопа с критикой отдельного недостатка emu.
Послушал музыкальную систему портированную на эврику (специальный клон специалиста) в emu (с добавлением input=cpu.int в конфиге). И вспомнил, почему ее звук казался мне странным. В emu80 звук намного лучше. С РКшной версией все аналогично. Это я к тому, что портировать музыкальную систему на океан не стоит, в эмуляторе толком не послушать. Еще интересно, есть ли примеры портов этой системы на компы с "обычным" бипером.
emu очень хороший эмулятор, но качество биперного звука плохое. Как в каменном веке.
Извините за оффтоп (еще пару слов про музыкальную систему).
Хорошая штука склероз, через несколько лет известные вещи воспринимаются как новые. Оказывается в 2013 я уже интересовался на форуме насчет нее, DDp выложил (https://zx-pk.ru/threads/13270-radio-86rk-po-stranitsam-zhurnala-quot-radio-quot.html?p=570758&viewfull=1#post570758) архивы. И там по ссылке прочитал, что она с другого компа и что на спек ее переносили. Может через несколько лет еще раз те же вопросы возникнут.
ivagor, не нужно извиняться. Музыка есть голос бога, как сказал известный питерский композитор Глушко, и не может быть оффтопом.
А склерозом мы все страдаем в той или иной степени; там и я когда-то отметился https://zx-pk.ru/threads/15093-muzykalnyj-redaktor-el-dorado.html?p=361649&viewfull=1#post361649
emu очень хороший эмулятор, но качество биперного звука плохое. Как в каменном веке.
Теперь, видимо, как в бронзовом веке.
b2m, спасибо! а можешь проапдейтить history.txt для понимания отличий бронзового века от предыдущих веков?
Блин, я уже и сам не помню, чего там в предыдущие века сделано было. Каюсь, забил я на этот файл. Просто прими как данность.
Принял как данность. Но интересно, что же все-таки изменилось в части звука для "Океана-240"?
Есть предположение, что изменения в emu повлияют только в случае очень коротких включений бипера. Если в океанском софте таких примеров нет, то вряд ли можно будет заметить разницу.
Кроме того, что описал ivagor, последнее, что я делал - добавил бипер в конфиги Океана-240 (как и просили) и привязку файлов .ok для запуска их в конфиге Океана-240 с адреса 100h.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot