Spectrum Analizier (Индикатор уровней сигнала AY)

Программирование, алгоритмы

Postby djspawn » Tue, 06.06.2017 08:57:27

Добрый день!
Нужен алгоритм вывода столбцов по частотам, желательно просто описание.

По наработкам получается так, считываем с регистров АУ р0-1 - частоту канала А, р2-3 В канал, р4-5 - С канала, соответственно есть таблица соответствия этих значений с частотой. 12 нот, 8 октав.
Далее берем значение громкости каналов А,В,С и ставим соответственно данное значение в позицию рассчитанную по таблице.
Так же проверяем огибающею, генератор шума и миксер.

Заранее благодарю!

Для примера:
Image

Хочется получить что-то вроде этого на выходе
я про сам "Спектрум анализатор"

Image
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 27
Joined: Tue, 08.03.2016 23:46:22
ICQ: 209897370

Postby VBI » Tue, 06.06.2017 09:17:30

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

хинт: постоянно декрементируй все значения в буффере перед занесением туда новых данных
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby djspawn » Tue, 06.06.2017 09:25:31

Соответственно у нас 8 октав по 12 нот, итого 96 позиций.
Позицию определяем по соответствию значений тона канала с значениями в таблице в доке к АУ.
А как быть с шумом и огибающей ?
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 27
Joined: Tue, 08.03.2016 23:46:22
ICQ: 209897370

Postby WBC » Tue, 06.06.2017 16:50:30

djspawn wrote:А как быть с шумом и огибающей ?

с шумом все просто -берешь значение из регистра 6 и выводишь его как есть, т.е. в диапазоне 0-31. Можно еще подмешать его к тоновым столбикам (частота генератора шума аналогична частоте тона, просто от нуля до нее подмешиваешь к столбикам рандом :), но это правда не точно, я сам не пробовал)
Период огибающей просто умножаешь на 16 (для типов 8\C) или 32 (для A\E) и дальше поступаешь как с тоном ;)
--wbcbz7
User avatar
WBC
 
Posts: 302
Joined: Fri, 19.09.2014 10:23:23
LOCATION: omsk XOR nsk

Postby VBI » Tue, 06.06.2017 19:18:18

табличку частот придётся составить, причём она будет нелинейной
а потом чекать к какой полосе принадлежит текущая частота, а дальше - техника

+ нужно учитывать частоту енвелопа, там ещё одна табличка
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby djspawn » Wed, 07.06.2017 19:02:42

WBC wrote:с шумом все просто -берешь значение из регистра 6 и выводишь его как есть, т.е. в диапазоне 0-31. Можно еще подмешать его к тоновым столбикам (частота генератора шума аналогична частоте тона, просто от нуля до нее подмешиваешь к столбикам рандом , но это правда не точно, я сам не пробовал)
Период огибающей просто умножаешь на 16 (для типов 8\C) или 32 (для A\E) и дальше поступаешь как с тоном


То бишь смотришь в регистр миксера R7 включен ли шум и выводим значение (0-31) в позицию из значения соответствующего канала из регистров R0-1, R2-3, R4-5 сопоставленных из таблицы тона?
Так же не понятно что значит " просто умножаешь на 16 (для типов 8\C) или 32 (для A\E) и дальше поступаешь как с тоном" ? Что за типы?

спасибо за разъяснение!
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 27
Joined: Tue, 08.03.2016 23:46:22
ICQ: 209897370

Postby djspawn » Wed, 07.06.2017 19:04:01

VBI wrote:табличку частот придётся составить, причём она будет нелинейной
а потом чекать к какой полосе принадлежит текущая частота, а дальше - техника

+ нужно учитывать частоту енвелопа, там ещё одна табличка


Таблицу для тона сделали, а как таблицу для огибающей посчитать?

заранее благодарю!
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 27
Joined: Tue, 08.03.2016 23:46:22
ICQ: 209897370

Postby WBC » Wed, 07.06.2017 19:44:23

djspawn wrote:выводим значение (0-31) в позицию из значения соответствующего канала из регистров R0-1, R2-3, R4-5 сопоставленных из таблицы тона?

не, если выводить 0-31, то в отдельные столбики
djspawn wrote:Так же не понятно что значит " просто умножаешь на 16 (для типов 8\C) или 32 (для A\E) и дальше поступаешь как с тоном" ? Что за типы?

берешь период из регистров R11-12, тип из R13 и умножаешь, затем итоговый период прогоняешь через табличку точно так же, как и для тона.
--wbcbz7
User avatar
WBC
 
Posts: 302
Joined: Fri, 19.09.2014 10:23:23
LOCATION: omsk XOR nsk

Postby djspawn » Fri, 09.06.2017 09:39:05

Огромное спасибо за помощь и подсказку VBI и WBC

Все получилось!:)

https://youtu.be/bPa2aLGzqPc
ZX-Evolution rev.C+NeoGS+HDD+2xFDD3.5+FDD5.25
Pentagon 128K mod.2014 + RGB-VGA + FDD3.5
Байт128К+TR-DOS+YM+TURBO+FDD5.25
Scorpion ZS-256
AY STM Player https://www.youtube.com/watch?v=bPa2aLGzqPc&t=12s
AY AVR Player
User avatar
djspawn
 
Posts: 27
Joined: Tue, 08.03.2016 23:46:22
ICQ: 209897370

Postby VBI » Fri, 09.06.2017 19:25:50

клёво :))
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby idxi » Thu, 17.08.2017 17:39:14

djspawn, а можно code-example этого решения увидить? :) Спасибо.
User avatar
idxi
 
Posts: 179
Joined: Mon, 03.07.2017 16:54:54


Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x