DonNews #11
21 апреля 2000

кодинг - Алгоритм спектрального анализа звука в реальном времени.

<b>кодинг</b> - Алгоритм спектрального анализа звука в реальном времени.
──────────────────────────────────────────
2000 TheRom/OHG

     Привет кодерам, людям и Snake^у.

  Алгоритм спектрального анализа звука в
            реальном времени.

  Будем делать анализатор звукового  спек-
тра (это такие бегающие  полоски  на  муз.
центрах которые прыгают под музыку  и  не-
грамотные люди называют их эквалайзером).

  Алгоритм прост.

  С точки зрения ничего не  понимающего  в
кодах математика:

1. Задем функцию y=f(x), интервал дельта х
тоже задаем.

2. вычисляем  среднее  арифметическое   от
множества дифференциалов дельта у / дельта
х. Получаем результат Y^ - это  координата
Y, по ней мы строим точку  в  нашем  спек-
тральном графике (х  берем=0, а  в  другие
разы будем прибавлять к нему  приращение).

3. производим   антиинтерполяцию   функции
y=f (x) (не знаю как это называется. Ну  в
общем сглаживаем ее).В результате получаем
новую функцию f(x).

4. повторяем множество раз все с пункта 2,
но с каждым разом  увеличивая  интервал  х
между дифференциалами.

  С точки зрения незнающего математику ко-
дера:

1. загоняем кусок звука с АЦП или на худой
конец из файла в буфер (512 байт) с задан-
ной частотой (например с задержкой 5).

2.1  устанавливаем HL на первый  байт  бу-
фера, в регистр х  ляпаем  0, берем  число
#80.

2.2 вычитаем (HL).

2.3  если флаг переноса=1 то  NEG^аем  ре-
зультат, иначе переходим к п. 2.4

2.4 вычисляем среднее арифметическое между
результатом и регистром х, результат  кид-
аем в регистр х. Прибавляем к HL единицу.

2.5 повторяем п.2.2-2.4 пока не закончится
буфер.

3. результат рисуем для первой полоски.

4.1 HL устанавливаем опять на буфер  и  DE
тоже.

4.2 Берем число из (HL).

4.3 прибавляем к HL единицу.

4.4 вычисляем среднее арифметическое между
числом и (HL).

4.5 зашвыриваем результат в (DE) и прибав-
ляем к (DE) единичку.

4.6  прибавляем к HL опять единицу и к  DE
тоже.

4.7 повтаряем п.4.2-4.6 пока не закончится
буфер. Обратите внимание на то  что  новый
буфер будет на том же адресе, но длина его
в 2 раза меньше предыдущего. Это надо учи-
тывать в п. 2 и 4

5. повторяем п.2.1-4.7 для остальных  семи
полосок.

6. стираем или переключаем экран и  делаем
все сначала п.1.

С точки зрения меня (круто сказано).

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

  Для продвинутых кодеров (привет Disabler-
у):

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

  P.S. Я полный ноль в математике, так что
может  чего  и  напутал  в  математическом
описании, но программа работает прелестно.
Кому надо, привожу зазипованный  пример  в
формате xas^а.

  P. P. S. Народ спекртума - объединяйтесь
Народ из РАДАРа-звоните по тел. 71-33-08.


                    ... в продолжение темы

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

  Привет всем у кого есть АЦП и всем  кому
это интересно.

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

  Звук проигрывается с большей или меньшей
частотой дискретизации но не  весь, а  ма-
ленький его кусочек (512...1024 байта).
  Если кусок  играется  быстрее, то  после
проигрывания  он  играется  еше   какое-то
время снова и снова пока не наступит время
следующего кусочка.
  Если медленнее, то он не доигрывается до
конца.
  Такое изврашение на слух почти не замет-
но.

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

     Техническое описание программы.

  Программа работает только с АЦП и ЦАПом
(s.drive, covox) и не  затрагивает  экран;
занимает 118 байт в нижней  памяти  и  768
байт под буфер в верхней; частота  дискре-
тизации мне  неизвестна; в  исходнике  АЦП
порт #F7, ЦАП порты #0F, #1F, #4F, #5F (s.
drive).
     Клавишами  "6",  "7"   осуществляется
сдвиг спектра  плавно, "8", "9"-грубо, "0"
выход.

         Интересная особенность.

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

P.S. Привет Disabler^у,его жене, Snake^у и
всем  остальным  из  OHG  и  DHG, а  также
РАДАРавцем от TheRom^а (он же Роман 71)!!!

P.P.S. Люди добрые продайте модем.
              тел. 71 33 08.



Другие статьи номера:

От авторов - Причины задержки номера.

Новости - Состояние дел у Ростовских спектрумистов: Disabler, Klim, Wild, Dimon, The Rom.

Paradox 2k - Информация о ростовской demo-party: paradox 2k

Millennium party - Информация о проведении Минского демопати.

Forever 2E3 results - Финальные результаты.

Софт - Описание компилятора С для спектрума.

Софт - небольшой обзор системного софта: UltraSonic version 2.,Shuffle Commander v1.0, Elastic Copy v1.0, Strange Player v3.0, Screen Mixer v1.0, ZX C++, Smagly 3, Quick Commander 2.4.

Программирование - Алгоритм защиты диска от копирования.

Кодинг - Заливка замкнутой области на экране.

кодинг - Алгоритм спектрального анализа звука в реальном времени.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Demo Party - POL/PHT: отчет о Doxycon '99.
Опрос - Анкетирование пользователей BBS.
Scene Life - обзор демок с СС'000 invitation dentro.
Развитие - мнeния o тoм, чтo нужнo из SOFT`а для SPEECУ в будушeм и сeйчас.
ZX-Preview - тест: что вы знаете о Speccy?

В этот день...   21 ноября