Швидке перетворення Фур’є в Processing

Швидке перетворення Фурє (ШПФ) використовується для отримання частотного спектра аудіофайлу Бібліотека Minim має клас, який зробить за вас всі обчислення, а ви можете зосередитися на малюванні спектра Дізнатися більше про швидкому перетворенні Фурє можна зі статті Пола Боурка: Http://paulbourkenet/ miscellaneous / dft / Коли будете на його сайті, погляньте на останні роботи Пола Ви знайдете там безліч приголомшливих геометричних алгоритмів

Як це робиться

Перша частина скетчу схожа всі попередні за винятком нового обєкта FFT з тим же розміром буфера і частотою семплів, що були зазначені раніше

import ddfminim*

import ddfminimsignals* import ddfminimanalysis* import ddfminimeffects*

Minim minim AudioPlayer player FFT fft

void setup()

{

size( 1024, 480 )

minim = new Minim( this )

player = minimloadFile(&quotsongmp3&quot, 512 ) playerloop()

fft = new FFT( playerbufferSize(), playersampleRate() ) background( 255 )

У функції draw () ми пройдемося по буферу fft і виведемо на екран всі смуги частот Я не використовував тут функцію background (), так як я хотів добитися ефекту загасання для показу історії частотного спектра Ефекту загасання можна домогтися виведенням на екран прозорого кольорового прямокутника одного розміру з вікном

void draw()

{

fill( 255, 8 ) noStroke()

rect( 0, 0, width, height ) fftforward( playermix )

strokeWeight( 4 ) strokeCap( SQUARE ) stroke( 0 )

for ( int i = 0 i &lt fftspecSize() i++ ) {

line( i*4, height, i*4, height – fftgetBand( i ) * 20 )

}

}

void stop()

{

playerclose() minimstop()

superstop()

}

В результаті ви побачите приблизно те, що зображено на цьому скріншоті У пісні з того прикладу ви бачите потужні низькі частоти і слабкі високі

Для того, щоб використовувати БПФ, потрібно створити обєкт FFT з таким же розміром буфера і частотою семплів, що і в аудіоплеєрі Ви можете пропустити величини з обєкта AudioPlayer через конструктор за допомогою наступного коду:

fft = new FFT( playerbufferSize(), playersampleRate() )

У функції draw () виконується пряме перетворення в буфері за допомогою наступного рядка коду Я використовував обидва канали, але ви можете застосувати методи playerleft і playerright і візуалізувати спектр кожного каналу окремо

fftforward( playermix )

Для виведення на екран смуг частот вам потрібно перебрати значення в обєкті FFT методом fftspecSize () Розмір цього спектра обчислюється в обєкті FFT як playerbufferSize() / 2 + 1 Отримати значення обраної смуги частот можна методом fft getBand () Так як ці величини малі, вам потрібно помножити їх на деяке число, щоб побачити їх на екрані

Джерело: Ян Вантомм, Processing 2: креативне програмування, переклад з англійської Олександри Мішутіної, Published by Packt Publishing Ltd, 2012, BIRMINGHAM – MUMBAI

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*