Подключение микрофона и аудиоисточников

Библиотека 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

Для классификации звуков или работы с аудиомоделями 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 в сочетании с микрофоном позволяет визуализировать аудиосигнал в реальном времени, создавать спектрограммы и применять данные для обучения или интерактивного реагирования моделей.

Особенности работы с браузерными ограничениями

  1. Разрешение на микрофон — современные браузеры требуют, чтобы доступ к микрофону был инициирован в результате действия пользователя (клик или нажатие клавиши).
  2. Асинхронная загрузка — модели и аудиопотоки загружаются асинхронно, поэтому важно использовать callback или промисы.
  3. Совместимость с мобильными устройствами — некоторые мобильные браузеры ограничивают автозапуск аудио, необходимо запускать через взаимодействие пользователя.

Рекомендации по оптимизации

  • Для непрерывной классификации звуков использовать предварительно обученные модели с небольшим размером.
  • Ограничивать частоту обновления визуализации FFT для снижения нагрузки на браузер.
  • Объединять данные микрофона с другими источниками для мультимодальных проектов.

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