С версии Unity 3.5, в Unity есть класс для работы с микрофонным вводом. Этот класс так и называется - Microphone. Класс, сам по себе, предоставляет базовые методы для доступа и работы с аудиопотоком, который поступает через микрофон (в том числе, на мобильных девайсах). Для того, чтобы начать захват звука с аудиоустройства по умолчанию, нужно написать следующий код (в ходе урока создадим простой класс-обертку, для работы с микрофоном (надстройка над Microphone)):
using UnityEngine;
using System.Collections;
public class MicrophoneInput : MonoBehaviour {
void Start() {
audio.clip = Microphone.Start(null, true, 10, 44100);
}
}
Что делает этот код? Он начинает запись со стандартного (дефолтного) аудио устройства (так как мы передали null в качестве параметра) на 10 секунд, при частоте сэмплирования 44 килогерц, и продолжает запись путем возврата в начало записи (второй параметр - true) каждые 10 секунд. Но это вы и так могли обнаружить в хелпе Unity. Это все классно, но как это юзать на практике? Ответ кроется в классе AudioSource.
Давайте расширим скрипт. Сначала убедимся, что объект содержит AudioSource, это можно сделать, написав следующую строку над нашим классом:
[RequireComponent(typeof(AudioSource))]
Далее, мы поработаем с некоторыми атрибутами самого аудиоклипа и настроим ожидание проигрывания, чтобы игралось после записи. Добавим следующие строчки в функцию Start.
Давайте создадим новую функцию - GetAveragedVolume, которую мы можем использовать для получения значения, которое будет обозначать громкость сигнала, идущего с микрофона. Нам надо взять абсолютно значение громкости + мне нравится идея сделать это значение усредненным, для того, чтобы исключить всякие скачки и сгладить всякие переходы. Для начала мы получим данные из AudioSource в некий массив заданной длины (я выбрал 256).
Далее, мы поработаем с некоторыми атрибутами самого аудиоклипа и настроим ожидание проигрывания, чтобы игралось после записи. Добавим следующие строчки в функцию Start.
audio.loop = true; // Делаем наш AudioClip зацикленным
audio.mute = true; // Глушим звук
while (!(Microphone.GetPosition(AudioInputDevice) > 0)){} // Ждем, пока запись не начнется
audio.Play(); // Проигрываем наш звук
Давайте создадим новую функцию - GetAveragedVolume, которую мы можем использовать для получения значения, которое будет обозначать громкость сигнала, идущего с микрофона. Нам надо взять абсолютно значение громкости + мне нравится идея сделать это значение усредненным, для того, чтобы исключить всякие скачки и сгладить всякие переходы. Для начала мы получим данные из AudioSource в некий массив заданной длины (я выбрал 256).
float GetAveragedVolume()
{
float[] data = new float[256];
audio.GetOutputData(data,0);
}
Комментариев нет:
Отправить комментарий