Главная » Processing » Живой звук в Processing

0

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

Как это делается

Первое, что мы сделаем – импортируем библиотеку minim, объявим объект Minim и объект AudioInput.

import ddf.minim.*;

import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*;

Minim minim; AudioInput in;

В функции setup() мы используем метод getLineIn() из класса Minim для открытия линейного входа вашего компьютера.

void setup()

{

size( 640, 480 );

smooth();

minim = new Minim( this );

in = minim.getLineIn( Minim.STEREO, 512 );

background( 0 );

}

В функции draw() для визуализации входящего звука мы используем метод bufferSize() для объекта AudioInput. Не забудем также добавить функцию stop() для загрытия линейного входа при выходе из скетча.

void draw()

{

fill( 0, 16 );

noStroke();

rect( 0, 0, width, height/2 );

stroke( 255 ); noFill();

float r = 0;

for ( int i = 0; i < in.bufferSize(); i++ ) { r += abs( in.mix.get( i ) ) * 20;

}

ellipse( width/2, height/2, r, r );

}

void stop()

{

in.close();

minim.stop();

super.stop();

}

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

Метод minim.getLineIn() возвращает объект AudioInput. Это позволит получить доступ к микрофону, подключенному к ввашему компьютеру. Скорее всего, вы будете использовать эту функцию с двумя параметрами, но в ней есть множество других опций. Первый параметр это тип входа. Вы можете указать здесь Minim. STEREO для стереоканала и Minim.MONO для канала моно. Второй параметр это размер буфера очетов; в данном случае я использовал 512. Если вы не укажете здесь ничего, то размер буфера будет 1024.

В функции draw() я использовал метод bufferSize() для просмотра аудиобуфера и вычисления радиуса окружности. Этто метод возвращает отрицательные и положительные числа, поэтому я применил функцию abs() для взятия модуля чисел. Просмотр аудиуфера часто применяется для рисования временных диаграмм. Чтобы научиться делать это, перейдем к следующему рецепту.

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии