JavaScript:Библиотеки/p5.sound/Класс p5.Convolver
Черновик |
Класс p5.Convolver [1]
Описание
Класс p5.Convolver является расширением класса p5.Reverb. Он создает эффект распространения звука в физическом пространстве при помощи процесса, который называется «сверткой». Другими словами, класс p5.Convolver – это программная реализация сверточного ревербератора.
В процессе свертки исходный звук умножается на так называемый «импульсный отклик», что в результате дает имитацию рассеивания звука в течение определенного времени. Импульсный отклик генерируется аудиофайлом, который нужно задать при создании объекта p5.Convolver. Один из способов сгенерировать импульсный отклик – это лопнуть шарик в нужном помещении и записать получившееся эхо. Свертку также можно использовать для экспериментов со звуком.
Чтобы инстанцинировать объект p5.Convolver при помощи аудиофайла импульсного отклика, можно воспользоваться функцией createConvolver().
Чтобы использовать эту функцию, нужно подключить библиотеку p5.sound. Для этого в заголовок своего файла «index.html» впишите следующее:
<script language="javascript" type="text/javascript" src="path/to/p5.sound.js"></script>
Синтаксис
new p5.Convolver(path, [callback], [errorCallback])
Параметры
path – путь к аудиофайлу импульсного отклика. Тип данных – String
callback – функция, которую нужно вызвать при успешной загрузке. Тип данных – функция
errorCallback – функция, которую нужно вызвать при неудавшейся загрузке. В качестве параметра эта функция либо получит сообщение об ошибке, либо объект XMLHttpRequest, содержащий информацию о том, что пошло не так. Тип данных – функция
Возвращаемое значение
- convolverNod – класс p5.Convolver создан на основе интерфейса ConvolverNode из Web Audio API.
- impulses – если вы при помощи функции addImpulse() загрузили несколько импульсных аудиофайлов, они будут храниться в виде объектов в этом массиве. Переключение между ними осуществляется при помощи метода toggleImpulse().
Методы
- createConvolver() – создает объект p5.Convolver. В качестве параметра принимает путь к звуковому файлу, используемому для генерирования импульсного отклика.
- process() – подключает источник звука к сверточному ревербератору и применяет к нему настройки сверточной реверберации.
- addImpulse() – загружает и задает для объекта p5.Convolver новые импульсные файлы. Они добавляются в массив «impulses». К прежним импульсным файлам можно получить доступ при помощи метода toggleImpulse().
- resetImpulse() – делает то же самое, что и addImpulse(), но также удаляет данные в массиве «impulses» (в целях экономии памяти). В результате создается новый массив «impulses», содержащий только один импульсный файл, заданный в этой функции.
- toggleImpulse() – если вы ранее использовали функцию addImpulse(), чтобы добавить в объект p5.Convolver несколько импульсных файлов, то метод toggleImpulse() позволяет переключаться между этими файлами в массиве «impulses». Для этого он принимает параметр «id», с помощью которого и задается импульсный файл, которым нужно воспользоваться для создания эффекта сверточной реверберации. Нужный импульсный файл можно задать либо с помощью его названия (тип данных – String), либо с помощью позиции в массиве «impulses» (тип данных – number). Доступ к объектам в массиве «impulses» можно получить напрямую. Каждый из этих объектов имеет два атрибута: «audioBuffer» (интерфейс AudioBuffer из Web Audio API) и «name» (строка, соответствующая названию импульсного файла).
Пример
№1
var cVerb, sound;
function preload() {
// задаем звуковые форматы, которые будет искать loadSound();
// в данном случае это звуковые форматы MP3 и OGG:
soundFormats('ogg', 'mp3');
// попробуйте заменить 'bx-spring' на другие звуковые файлы
// вроде 'concrete-tunnel', 'small-plate', 'drum', 'beatbox':
cVerb = createConvolver('assets/bx-spring.mp3');
// попробуйте заменить 'Damscray_DancingTiger'
// на 'beat', 'doorbell', lucky_dragons':
sound = loadSound('assets/Damscray_DancingTiger.mp3');
}
function setup() {
// отключаем все «выходы» объекта «sound»...
sound.disconnect();
// ...и обрабатываем его с помощью объекта «cVerb»;
// в результате мы будем слышать только сверточную реверберацию:
cVerb.process(sound);
sound.play();
}