Главная » Processing » Проигрывание аудиофайлов в Processing

0

Начнем с самого простого, что можно делать с Minim, а именно – c проигрывания аудиайлов. Но так как это было бы слишком просто, мы добавим простой интерфейс для управления звуком с клавиатуры или мыши.

Приступим

Создайте новый скетч и сохраните его по именем playing_audio_files.pde. Импоируйте в скетч библиотеку minim, так, как мы делали это в первом примере этой главы. Еще нужно добавить к скетчу MP3 файл. Найдите на вашем жестком диске самую лучшую песню и перетащите ее в текстовый редактор Processing; так она добавится в папку data.

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

Первое, что мы сделаем – перед функцией setup() объявим объект Minim и объект

AudioPlayer.

Minim minim; AudioPlayer player;

В функции setup() мы инициализируем объект minim, загрузим MP3 файл из папки data

и запустим его на проигрывание.

void setup()

{

size( 640, 480 );

minim = new Minim( this );

player = minim.loadFile("song.mp3"); player.play();

}

В функции draw() мы выведем основную информацию о песне. В окне будет указатель, показывающий текущее время и текст с информацией о песне.

void draw()

{

background( 255 );

float x = map(player.position(), 0, player.length(), 0, width); stroke( 0 );

line( x, 0, x, height );

int totalSeconds = (int)(player.length()/1000) % 60;

int totalMinutes = (int)(player.length()/(1000*60)) % 60; int playheadSeconds = (int)(player.position()/1000) % 60;

int playheadMinutes = (int)(player.position()/(1000*60)) % 60;

String info = "Position: " + playheadMinutes + ":" + nf( playheadSeconds, 2 ) + "/" + totalMinutes + ":" + nf( totalSeconds, 2 );

fill( 0 ); noStroke();

text( info, 10, 20 );

}

А теперь мы добавим нашему скетчу интерактивности. Код несложен и вы разберетесь в нем сами.

void mousePressed()

{

int pos = floor( map( mouseX, 0, width, 0, player.length() ) ); player.play( pos );

}

void keyPressed()

{

if ( key == ‘ ‘ ) {

if ( player.isPlaying() ) { player.pause();

} else { player.play();

}

}

if ( key == CODED ) {

if ( keyCode == LEFT ) { player.rewind();

}

}

}

Также нужно добавить к скетчу функцию stop(), чтобы при выходе из скетча закрыть объект AudioPlayer и остановить объект Minim. Не забудьте об этом.

void stop()

{

player.close(); minim.stop();

super.stop();

}

Когда вы запустите скетч, вы увидите такую картинку. Нажмите на левую клавишу-стрелку для перемотки песни и кликните по окну скетча для перемещения указателя. Для остановки/запуска песни нажмите на клавишу-пробел.

Как это работает

Если вы хотите использовать библиотеку minim, вам всегда будет нужен объект Minim со ссылкой на главный класс PApplet. Проигрывание аулиофайла выполняется с помощью класса AudioPlayer. Нужно загрузить аудиофайл в объект AudioPlayer с помощью следующего кода:

player = minim.loadFile("song.mp3");

Проигрывание аудиофайла выполняется с помощью метода player.play(), который проигрывает аудиофайл один раз. Если вы хотите проигрывать песню снова и снова, используйте метод player.loop().

Также мы добавили несложный клавиатурный интерфейс для управления перемоткой аудиофайла. Если вы нажмете клавишу-пробел, аудиофайл поставится на паузу или возобновит проигрывание. Я применил метод player. isPlaying() для проверки, пргрывается ли в данный момент аудиофайл. Этот метод возвращает логическую величину. Он возвратит истину (true), если песня включена на паузу методом player.pause() и ложь (false), если песня начала проигрываться с места остановки. Если вы нажмете на клавишу еще раз, песня начнет проигрываться с начала. Это делается с помощью метода player.rewind().

В функции draw() я использовал два метода для создания указателя. Метод player. length() возвращает целое число, являющейся длиной аудиофайла в миллисекундах. Метод player.position() возвращает текущую позицию указателя в песне. Для прбразования текущей позиции указателя в соответствующую величину в диапзоне от 0 до ширины экрана я использовал функцию map(). Миллисекунды могут быть неудобны для использования как элемента интерфейса, так как мы не используем их в повседневной жизни для отсчета времени, поэтому можно преобразовать их в минуты и секунды. Это делается с помощью следующего кода:

int seconds = (int)(milliseconds/1000) % 60;

int minutes = (int)(milliseconds/(1000*60)) % 60;

В функции mousePressed() я использовал те же методы length() и position() для взаимодействия с мышью. Для проигрывания песни с определенного момента вы можете использовать метод play() и целое число для указания времени.

Функция stop() используется для закрытия объекта AudioPlayer и остановки Minim. Не забудьте добавлять ее к каждому скетчу, в котором используется бибилотека Minim.

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

По теме:

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