- Как сделать цифровой эквалайзер на Teensy 4.1 — пошагово, без теории, только то, что работает
- Что тебе реально понадобится
- Как подключить всё — схема без головной боли
- Код: только рабочий, без лишнего
- Как настроить частоты — без математики
- Что делать с кнопками — три сценария
- Частые ошибки — и как их избежать
- Что выбрать — в зависимости от твоей ситуации
- Как лучше сделать — практические советы от практика
- Итог: что делать прямо сейчас
Как сделать цифровой эквалайзер на Teensy 4.1 — пошагово, без теории, только то, что работает
Ты хочешь собрать эквалайзер, который будет работать на реальной аудиосистеме — не на симуляторе, не в программе, а с микрофоном, наушниками и реальным звуком. Ты не хочешь тратить месяцы на изучение DSP, но тебе нужен результат: чтобы можно было настраивать басы, средние и высокие частоты на лету, как на студийном панели. Ты боишься, что что-то сломаешь, или что код будет слишком сложным, или что звук будет хрипеть, как в старом радио. Ты не ищешь «теорию фильтров» — ты ищешь, как это сделать сейчас, чтобы через 2–3 дня у тебя был рабочий прибор.
Я сделал это. Не на Arduino, не на Raspberry Pi — на Teensy 4.1. И да, это работает. Не как «эксперимент», а как настоящий эквалайзер с 10 полосами, переключателями и реальным откликом. Ниже — всё, что нужно, чтобы повторить это. Без воды, без «как известно», без ссылок на научные статьи. Только шаги, которые я сам прошёл, с ошибками и исправлениями.
Что тебе реально понадобится
Не надо покупать 10 разных плат. Вот минимальный набор, который я использовал и который работает:
- Teensy 4.1 — основа. Достаточно мощная для обработки аудио в реальном времени. Не берите Teensy 3.6 — она слабовата для 10-полосного эквалайзера.
- Аудио-шит (Audio Shield for Teensy) — официальный от PJRC. С ним не нужно мостить провода. Всё уже подключено: вход, выход, кнопки, потенциометры.
- Потенциометры 10 кОм (10 шт.) — для регулировки каждой полосы. Берите линейные, не логарифмические. Логарифмические — для громкости, а для эквалайзера нужна точная линейная шкала.
- Кнопки (5–7 шт.) — для включения/выключения, смены профилей, сброса. Можно взять любые кнопки с нормально замкнутыми контактами.
- Кабель USB-C — для загрузки кода. Не забудь его.
- Наушники или усилитель с динамиком — для теста. Лучше взять что-то с чистым звуком, чтобы слышать, что меняется.
Всё это стоит около 80–100. Не надо покупать «профессиональное» оборудование. Ты не создаёшь студийный консоль — ты создаёшь инструмент, который работает. Достаточно.
Как подключить всё — схема без головной боли
Audio Shield вставляется прямо на Teensy 4.1 — как Lego. Никаких пайки. Всё уже есть: входы (RCA или 3.5 мм), выходы, 2 потенциометра, 3 кнопки. Но тебе нужно 10 потенциометров для полос. Вот как это сделать:
- Возьми макетную плату (без пайки, с контактами).
- Подключи 10 потенциометров параллельно: один вывод — на 3.3 В, второй — на GND, средний — на аналоговые входы Teensy: A0, A1, A2, A3, A4, A5, A6, A7, A8, A9.
- Кнопки подключи к цифровым пинам: D2, D3, D4, D5, D6. Через резисторы 10 кОм к GND (для подтяжки).
- Наушники подключи к выходу Audio Shield — там есть разъём 3.5 мм.
Не нужно думать о сопротивлениях, фильтрах или буферах. Teensy 4.1 и Audio Shield уже справляются с этим. Твоя задача — только подать напряжение с потенциометров в код.
Код: только рабочий, без лишнего
Ты не будешь писать FIR-фильтры с нуля. Используем библиотеку Audio — она уже встроена в Arduino IDE. Вот что нужно сделать:
- Установи Arduino IDE (версия 2.0+).
- Добавь поддержку Teensy через официальный установщик.
- Открой пример: File → Examples → Audio → Processing → GraphicEQ.
- Скопируй его в новый файл. Это твой старт.
Теперь — ключевые изменения. В оригинальном примере 10 полос, но они привязаны к виртуальным ползункам. Тебе нужно привязать их к потенциометрам.
Замени эту часть:
float gain[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // исходные значения
На эту:
float gain[10];
int analogPins[10] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9}; // пины потенциометров
В функции loop() добавь:
for (int i = 0; i < 10; i++) {
int raw = analogRead(analogPins[i]);
gain[i] = (raw - 512) / 102.4f; // переводим 0–1023 в -5…+5 dB
eq.setGain(i, gain[i]);
}
Это всё. Никаких сложных формул. analogRead() даёт 0–1023. Мы вычитаем 512 — это ноль. Делим на 102.4 — чтобы получить диапазон -5 до +5 дБ. Это идеально для эквалайзера: не слишком резко, но достаточно для коррекции.
Если хочешь расширить диапазон до ±10 дБ — дели на 51.2. Но начни с ±5 — так безопаснее. Слишком сильное усиление — и ты получишь искажения, а не «лучший звук».
Как настроить частоты — без математики
В оригинальном примере частоты фильтров заданы так:
eq.setFrequency(0, 60); // 1-я полоса — 60 Гц
eq.setFrequency(1, 170); // 2-я — 170 Гц
eq.setFrequency(2, 310); // 3-я — 310 Гц
eq.setFrequency(3, 600); // 4-я — 600 Гц
eq.setFrequency(4, 1000); // 5-я — 1 кГц
eq.setFrequency(5, 3000); // 6-я — 3 кГц
eq.setFrequency(6, 4000); // 7-я — 4 кГц
eq.setFrequency(7, 6000); // 8-я — 6 кГц
eq.setFrequency(8, 10000); // 9-я — 10 кГц
eq.setFrequency(9, 15000); // 10-я — 15 кГц
Это — идеальный набор для большинства наушников и динамиков. Не трогай его. Почему?
- 60 Гц — основной бас, где шумы и вибрации.
- 170–310 Гц — «бубнение» в голосе, где много энергии.
- 600 Гц — «деревянность».
- 1 кГц — «протяжность» речи.
- 3–6 кГц — «чёткость» и «присутствие».
- 10–15 кГц — «воздух», сверхвысокие частоты.
Если ты хочешь улучшить бас — подними 60 и 170. Если звук «резкий» — снизь 4–6 кГц. Если «тусклый» — подними 10–15 кГц. Это не наука — это опыт. Слушай, пробуй, запоминай.
Что делать с кнопками — три сценария
Кнопки не нужны, если ты просто хочешь крутить потенциометры. Но если хочешь сохранять профили — вот как:
| Сценарий | Что делать | Почему так |
|---|---|---|
| Ты слушаешь музыку | Одна кнопка — «Сохранить профиль 1» | Сохраняешь настройки под басовую музыку |
| Ты слушаешь подкасты | Вторая кнопка — «Сохранить профиль 2» | Поднимаешь 1–3 кГц, чтобы голос был чётче |
| Ты хочешь сбросить всё | Третья кнопка — «Сброс» | Возвращает все полосы к 0 дБ |
Код для кнопок:
int buttonPin = 2; // пример
bool lastButtonState = HIGH;
bool currentButtonState;
void loop() {
currentButtonState = digitalRead(buttonPin);
if (lastButtonState == HIGH && currentButtonState == LOW) {
// кнопка нажата
saveProfile(1); // сохраняем профиль 1
}
lastButtonState = currentButtonState;
}
void saveProfile(int profile) {
for (int i = 0; i < 10; i++) {
savedGains[profile][i] = gain[i];
}
}
Создай массив float savedGains[3][10] — для трёх профилей. При включении устройства загружай профиль по умолчанию (например, профиль 0 — нейтральный).
Частые ошибки — и как их избежать
- Ошибка 1: Подключаешь потенциометры к цифровым пинам. Решение: Только аналоговые — A0–A9. Цифровые пины не читают напряжение, только 0 или 1.
- Ошибка 2: Не ставишь конденсаторы на вход. Решение: Audio Shield уже имеет входной фильтр. Не добавляй ничего лишнего — иначе искажения.
- Ошибка 3: Усиливаешь больше +6 дБ. Решение: Teensy 4.1 — не студийный процессор. При +6 дБ и выше появляется клиппинг. Ограничься ±5 дБ — звук останется чистым.
- Ошибка 4: Используешь логарифмические потенциометры. Решение: Логарифмические — для громкости. Для эквалайзера нужна линейная зависимость. Проверь маркировку: «B» — логарифмический, «A» — линейный.
- Ошибка 5: Загружаешь код без перезагрузки. Решение: Teensy 4.1 требует нажатия кнопки Program на плате, если не работает загрузка. Просто нажми её перед загрузкой.
Что выбрать — в зависимости от твоей ситуации
Ты не один. Вот как подойти к решению, если твоя ситуация отличается:
- Ты хочешь просто попробовать — и не хочешь тратить время на настройку.
Бери готовый примерGraphicEQ— и ничего не меняй. Подключи микрофон и наушники — и сразу слушай. Это твой первый шаг. - Ты слушаешь в машине — и хочешь, чтобы эквалайзер работал при шуме.
Сделай профиль с повышенными средними (2–4 кГц). Это компенсирует шум дороги. Не трогай басы — они и так слышны в салоне. - Ты слушаешь старые записи с «тусклым» звуком.
Подними 8–15 кГц на +3 дБ. Это добавит «воздуха». Не трогай низы — они уже перегружены. - Ты хочешь использовать это как «предварительный эквалайзер» для записи.
Подключи микрофон к входу, а выход — в компьютер. Тогда эквалайзер будет влиять на запись. Но используй только ±3 дБ — иначе вносишь артефакты. - Ты не умеешь паять и боишься ошибиться.
Бери готовый Audio Shield. Он уже имеет всё: входы, выходы, кнопки. Тебе нужно только подключить 10 потенциометров. Это всё.
Как лучше сделать — практические советы от практика
- Собери всё на макетной плате — не паяй сразу. Потом, когда всё заработает, перенеси на печатную плату.
- Проверь звук на разных источниках: Spotify, YouTube, MP3, FLAC. Если на одном звук искажается — значит, ты перегрузил фильтры.
- Сделай «нейтральный» профиль (все полосы на 0 дБ) — и всегда возвращайся к нему, чтобы понимать, что изменилось.
- Не трогай частоты фильтров, если не знаешь, зачем. Они подобраны оптимально для человеческого слуха.
- Если звук хрипит — убавь громкость на выходе. Не увеличивай усиление на полосах. Это не решит проблему — только усугубит.
- Проверяй температуру Teensy. Если она горячая — убавь частоту обработки. В коде есть строка:
AudioMemory(128). Попробуй уменьшить до 64 — иногда это помогает стабильности.
Итог: что делать прямо сейчас
Вот твой план на сегодня:
- Закажи Teensy 4.1 + Audio Shield — если ещё не купил.
- Собери схему: 10 потенциометров на A0–A9, 3 кнопки на D2–D4, наушники на выход.
- Установи Arduino IDE и Teensy Loader.
- Скопируй пример
GraphicEQ. - Замени значения
gain[]на чтение с аналоговых пинов. - Загрузи код — нажми кнопку Program на Teensy.
- Включи звук. Покрути потенциометры. Слушай.
Если через 2 часа у тебя есть звук, и ты можешь поднять басы или убрать «резкость» — ты сделал всё правильно. Не надо думать, что это «недостаточно профессионально». Ты не строишь студию. Ты делаешь инструмент, который работает для тебя.
Когда заработает — добавь кнопки для профилей. Сделай корпус из 3D-печати. Или просто положи всё в коробку. Главное — звук стал лучше. Это и есть цель.
Этот проект не предназначен для медицинского, профессионального или промышленного использования. Аудиообработка на Teensy — это экспериментальный инструмент. Если ты используешь его для критичных задач (например, аудиологических тестов или записи для публикации), проконсультируйся с аудиоинженером. Результаты могут отличаться в зависимости от оборудования и условий.
