Библиотека ml5.js предоставляет удобные высокоуровневые интерфейсы для работы с машинным обучением в браузере на языке JavaScript. Одним из ключевых аспектов взаимодействия с медиапотоками является подключение микрофона и других аудиоисточников, что позволяет использовать модели для распознавания звука, классификации аудио и генерации интерактивного контента.
Для начала работы с аудио необходимо создать объект p5.AudioIn, который управляет входным потоком звука:
let mic;
function setup() {
createCanvas(400, 200);
mic = new p5.AudioIn();
mic.start();
}
Метод start() инициирует запрос разрешения у браузера на
использование микрофона. После успешного запуска можно получать значения
громкости и другие аудио-показатели через методы объекта
mic.
Ключевые методы объекта p5.AudioIn:
getLevel() — возвращает текущий уровень громкости
(амплитуду) звука, нормированную от 0 до 1.stop() — прекращает сбор аудиопотока.connect() — подключает источник к различным
аудиоэффектам или анализаторам.Для классификации звуков или работы с аудиомоделями ml5.js предоставляет класс soundClassifier. Пример создания классификатора на базе предварительно обученной модели:
let classifier;
let mic;
function preload() {
classifier = ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/model_url/model.json');
}
function setup() {
createCanvas(400, 200);
mic = new p5.AudioIn();
mic.start(() => {
classifier.classify(gotResult);
});
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results[0].label, results[0].confidence);
}
При использовании soundClassifier микрофон автоматически
подключается к модели, после чего происходит непрерывная классификация
аудио. Результаты возвращаются через callback-функцию, содержащую метку
звука и степень уверенности.
Помимо микрофона можно подключать другие источники, такие как аудиофайлы или поток с Web Audio API. Например, для анализа аудиофайла:
let sound;
let classifier;
function preload() {
sound = loadSound('audio/example.mp3');
classifier = ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/model_url/model.json');
}
function setup() {
createCanvas(400, 200);
sound.play();
classifier.classify(sound, gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results[0].label, results[0].confidence);
}
Здесь аудиофайл выступает в роли источника, и его данные направляются в классификатор. Это расширяет возможности ml5.js для проектов с заранее записанными звуками.
Для анализа аудио часто используется p5.FFT — быстрый преобразователь Фурье, который позволяет получать спектр звука и амплитудные характеристики:
let mic, fft;
function setup() {
createCanvas(600, 400);
mic = new p5.AudioIn();
mic.start();
fft = new p5.FFT();
fft.setInput(mic);
}
function draw() {
background(200);
let spectrum = fft.analyze();
noStroke();
fill(0, 255, 0);
for (let i = 0; i < spectrum.length; i++) {
let x = map(i, 0, spectrum.length, 0, width);
let h = -height + map(spectrum[i], 0, 255, height, 0);
rect(x, height, width / spectrum.length, h);
}
}
Использование FFT в сочетании с микрофоном позволяет визуализировать аудиосигнал в реальном времени, создавать спектрограммы и применять данные для обучения или интерактивного реагирования моделей.
Использование микрофона и аудиоисточников в ml5.js открывает широкие возможности для интерактивных приложений, анализа звука и экспериментов с машинным обучением в браузере. Правильная организация потоков, асинхронная загрузка и визуализация спектра обеспечивают стабильную и наглядную работу аудиопроектов.