Статьи

Создайте полезное приложение для записи звука в ActionScript 3

В этом уроке мы узнаем, как разработать полезное и привлекательное приложение Audio Recorder, используя класс Thibault Imbert MicRecorder . Читай дальше, чтобы узнать больше!


Давайте посмотрим на конечный результат, к которому мы будем стремиться:


Мы будем использовать инструменты рисования Flash для создания простого в использовании интерфейса и возможности ActionScript 3 для его записи. SWF сохранит звук в формате WAV на вашем жестком диске. Сторонние классы (но не программы) будут использоваться для записи и кодирования данных.


Запустите Flash и создайте новый документ. Установите размер сцены равным 400×290 пикселей, а частоту кадров — 24 кадра в секунду.


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

Давайте окунемся и начнем строить.


Выберите Rectangle Tool (R) и создайте прямоугольник размером 400×290 px и залейте его линейным градиентом: # 282C2D, # 0C0E0E.

Снова, используйте инструмент Rectangle, чтобы создать линию # 111111, 400×1 px, продублируйте ее (Cmd + D) и переместите на 1px вниз, заполните # 353535.

Используйте Text Tool (T) и напишите название для вашего приложения, я использовал этот формат: Helvetica Neue Regular / Bold, 13pt, # E6E6E6.


Давайте теперь нарисуем большую кнопку в центре.

Выберите Овальный инструмент (O) и создайте круг размером 146×146 пикселей, залейте его линейным градиентом: #EEEEEE, # 9A9A9A, используйте инструмент градиентного преобразования (F), чтобы вращать заливку градиента.

Дублируйте форму и сделайте ее размером 76×76 пикселей, отцентрируйте ее и измените градиентную заливку на # C11402, # B11201.

Преобразуйте кнопку в MovieClip и назовите ее recButton.

Дважды щелкните новый мувиклип, чтобы войти в режим редактирования и создать новый ключевой кадр («Вставка»> «Временная шкала»> «Ключевой кадр»), с помощью инструмента «Прямоугольник» создайте две полосы размером 18×80 пикселей и заполните их последним градиентом.

Индикатор активности микрофона может занять некоторое время; это индикатор на временной шкале, поэтому вам придется изменять содержимое каждого кадра.

С помощью Rectangle Primitive Tool (R) создайте скругленный прямоугольник 3×15 px с радиусом угла 3px и заполните его # 252525. Дублируйте фигуру и сделайте интервал в 5 пикселей между каждой фигурой, повторяйте этот процесс, пока не получите 50 фигур.

Преобразуйте фигуры в MovieClip и назовите его активность , войдите в режим редактирования (двойной щелчок) и создайте 100 кадров, 1 ключевой кадр и 1 дополнительный кадр на форму.

Начните изменять цвет каждой фигуры в ключевых кадрах, пока не достигнете 100-го кадра, то есть кадра 100: все фигуры черного цвета, кадра 98: 1 красного цвета, кадра 96: 2 красного цвета и т. Д.


Выберите инструмент «Прямоугольник» и создайте прямоугольник размером 400×40 пикселей, залейте его красным цветом # BB1301.

Дублируйте форму и измените ее высоту до половины, затем измените цвет на белый и оставьте только 20% альфа.

С помощью инструмента «Текст» (T) добавьте сообщение записи и создайте динамическое поле, назовите его счетчик , на нем будет показано время, прошедшее с начала записи.

Преобразуйте фигуру и тексты в MovieClip и назовите его RecBar , отметьте поле « Экспорт для ActionScript» и удалите клип со сцены.


Чтобы иметь возможность записывать и кодировать данные, полученные с помощью микрофона, нам нужно использовать класс MicRecorder . Загрузите его и переместите в папку вашего проекта.


Создайте новый (Cmd + N) класс ActionScript 3.0 и сохраните его как Main.as в папке вашего класса.


Ключевое слово package позволяет вам организовать ваш код в группы, которые могут быть импортированы другими сценариями, рекомендуется именовать их, начиная со строчной буквы, и использовать межстрочные буквы для последующих слов, например: myClasses . Также принято называть их, используя сайт вашей компании: com.mycompany.classesType.myClass .

В этом примере мы используем один класс, поэтому на самом деле нет необходимости создавать папку классов.

1
2
package
{

Это классы, которые нам нужно импортировать, чтобы наш класс работал, директива import делает внешние классы и пакеты доступными для вашего кода.

01
02
03
04
05
06
07
08
09
10
11
12
import flash.display.Sprite;
import flash.media.Microphone;
import flash.system.Security;
import org.bytearray.micrecorder.*;
import org.bytearray.micrecorder.events.RecordingEvent;
import org.bytearray.micrecorder.encoder.WaveEncoder;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.ActivityEvent;
import fl.transitions.Tween;
import fl.transitions.easing.Strong;
import flash.net.FileReference;

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

Ключевое слово extends определяет класс, который является подклассом другого класса. Подкласс наследует все методы, свойства и функции, так что мы можем использовать их в нашем классе.

1
2
public class Main extends Sprite
{

Это переменные, которые мы будем использовать, посмотрите комментарии в коде, чтобы точно узнать, что происходит.

1
2
3
4
5
6
private var mic:Microphone;
private var waveEncoder:WaveEncoder = new WaveEncoder();
private var recorder:MicRecorder = new MicRecorder(waveEncoder);
private var recBar:RecBar = new RecBar();
private var tween:Tween;
private var fileReference:FileReference = new FileReference();

Конструктор — это функция, которая запускается, когда объект создается из класса, этот код выполняется первым, когда вы создаете экземпляр объекта или запускается с использованием класса документа.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public function Main():void
{
    //Stops the rec button and the mic indicator
    recButton.stop();
    activity.stop();
 
    //Starts the microphone and shows the Settings dialog to activate it
    mic = Microphone.getMicrophone();
    mic.setSilenceLevel(0);
    mic.gain = 100;
    mic.setLoopBack(true);
    mic.setUseEchoSuppression(true);
    Security.showSettings(«2»);
 
    addListeners();
}

Эта функция содержит необходимые слушатели для запуска приложения.

1
2
3
4
5
6
7
8
9
private function addListeners():void
{
    //Starts recording when the rec button is activated
    recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
    recorder.addEventListener(RecordingEvent.RECORDING, recording);
     
    recorder.addEventListener(Event.COMPLETE, recordComplete);//The recorder listens for a complete event
    activity.addEventListener(Event.ENTER_FRAME, updateMeter);//Updates the mic activity meter
}

Следующая функция вызывается, когда пользователь отпускает кнопку «Запись», она запускается с проверки доступности микрофона, а затем использует класс MicRecorder для захвата данных, сгенерированных микрофоном. Кнопка Rec теперь будет использоваться для остановки записи.

Он также добавляет панель записи на сцену для использования в качестве визуального оповещения и счетчика времени.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
private function startRecording(e:MouseEvent):void
{
    if (mic != null)
    {
        recorder.record();
        e.target.gotoAndStop(2);
 
        recButton.removeEventListener(MouseEvent.MOUSE_UP, startRecording);
        recButton.addEventListener(MouseEvent.MOUSE_UP, stopRecording);
 
        addChild(recBar);
 
        tween = new Tween(recBar,»y»,Strong.easeOut, — recBar.height,0,1,true);
    }
}

Кнопка записи изменит свою функциональность при записи, теперь она остановит запись при отпускании.

Следующий код будет выполнен, когда активирована кнопка Rec (стоп).

01
02
03
04
05
06
07
08
09
10
11
12
13
private function stopRecording(e:MouseEvent):void
{
    recorder.stop();
 
    mic.setLoopBack(false);
    e.target.gotoAndStop(1);//Change button icon
 
    //Change the listeners to return the buttons original function
    recButton.removeEventListener(MouseEvent.MOUSE_UP, stopRecording);
    recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
 
    tween = new Tween(recBar,»y»,Strong.easeOut,0, — recBar.height,1,true);
}

Эта функция обновляет индикатор активности микрофона. Он использует свойство activityLevel, чтобы получить число от 0 до 100, а затем использует его в активности MovieClip.

1
2
3
4
private function updateMeter(e:Event):void
{
    activity.gotoAndPlay(100 — mic.activityLevel);
}

Следующая функция устанавливает истекшее время на панели записи.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
private function recording(e:RecordingEvent):void
{
    var currentTime:int = Math.floor(e.time / 1000);//Gets the elapsed time since the recording event was called
 
    recBar.counter.text = String(currentTime);//Sets the time to the TextField
 
    //Formats the text used in the time (2 digits numbers only in this example)
    if (String(currentTime).length == 1)
    {
        recBar.counter.text = «00:0» + currentTime;
    }
    else if (String(currentTime).length == 2)
    {
        recBar.counter.text = «00:» + currentTime;
    }
}

Когда пользователь останавливает запись, отправляется событие Complete, и мы будем использовать экземпляр FileReference для сохранения записанного файла на диск.

1
2
3
4
private function recordComplete(e:Event):void
{
    fileReference.save(recorder.output, «recording.wav»);
}

Класс MicRecorder является отличным дополнением к ActionScript 3, обязательно добавьте этот класс в закладки, чтобы использовать его в своих будущих проектах.

Спасибо за чтение этого урока, надеюсь, вы нашли его полезным!