Raspberry Pi Voice Changer: собираем карманный голосовой проект
Voice changer на Raspberry Pi открывает целую категорию проектов, которые были бы непрактичны на обычном ПК: шлемы для косплея, голоса роботов-пропов, ретро-игровые машины с голосами персонажей и автономные косплей-риги, работающие полностью от USB-повербанка. Это руководство охватывает всё: от первоначальной настройки железа на Pi 4 и Pi 5 — через рабочий Python voice changer с PyAudio, librosa, Sox и привязками rubberband — до полных инструкций по трём популярным билдам. В итоге у вас будет рабочий пайплайн и чёткое понимание компромиссов между задержкой и качеством на каждом шаге.
TL;DR
- Raspberry Pi 4 или 5 может запускать питч-шифтинг в реальном времени и эффекты голоса робота с PyAudio, librosa и pyrubberband.
- USB-микрофон + аудиовыход USB или HDMI — без аналогической разводки для рабочего сетапа.
- Билды косплейных шлемов, ретро-аудио-пропы и риги голоса робота работают на безголовой Pi через systemd-сервис.
- Целевая задержка: 20-40 мс достижимы при 44100 Гц с буферами 512-1024 сэмплов.
- Для использования в Discord/стриминге на Windows специализированный инструмент вроде VoxBooster настраивается быстрее и даёт меньшую задержку.
- Описанный здесь Python-стек также применим на Linux-десктопах — смотрите voice changer для Linux.
Необходимое железо: Pi 4, Pi 5 и аксессуары
Raspberry Pi 4 против Pi 5 для обработки голоса
Выбор модели Pi определяет, какие голосовые эффекты практичны в реальном времени.
| Характеристика | Raspberry Pi 4 (4 ГБ) | Raspberry Pi 5 (4/8 ГБ) |
|---|---|---|
| CPU | Cortex-A72 @ 1,8 ГГц | Cortex-A76 @ 2,4 ГГц |
| Питч-шифтинг в реальном времени | Да, комфортно | Да, с запасом |
| STFT librosa (реальное время) | На грани при малых буферах | Да |
| Нейронное преобразование голоса | Нет (слишком медленно) | Возможно при сниженном качестве |
| Потребление (активное) | ~3–5 Вт | ~5–8 Вт |
| В шлеме (ожидание) | Хорошо | Хорошо, немного теплее |
| Цена (прибл.) | $55 | $80 |
Для большинства косплей-билдов и пропов достаточно Pi 4 с 2 или 4 ГБ ОЗУ. Pi 5 даёт запас для более сложных DSP-цепочек или возможности локально запустить небольшую ONNX-модель. Pi Zero 2W работает для простых эффектов тона, но её одноядерная производительность делает её ненадёжной для многоэтапных DSP-цепочек.
Выбор USB-микрофона
Любой микрофон с интерфейсом USB Audio Class (UAC 1.0 или 2.0) работает на Raspberry Pi OS без установки драйверов.
Рекомендуемые варианты:
- Fifine K669B — компактный, питание от шины, кардиоид, до $30. Помещается внутри шлема.
- Blue Snowball iCE — более широкий охват, хорошее подавление шума, стандартная поддержка Linux.
- Samson Go Mic — форм-фактор клипсы, удобен для костюмных билдов с ограниченным пространством.
- Универсальный USB-петличный микрофон — самый дешёвый вариант. Качество звука ограничено, но приемлемо для эффектов робота/дисторшена.
Избегайте микрофонов с пометкой «USB только для Windows» или требующих сопутствующего ПО — они используют проприетарные USB-дескрипторы, которые некорректно определяются на Linux.
Варианты аудиовыхода
- USB-аудиоадаптер (ЦАП-донгл) — самый простой вариант, подключается рядом с USB-микрофоном. Выбирайте с выходом 3,5 мм.
- Аудио HDMI — работает из коробки для билдов, подключённых к дисплею или AV-ресиверу.
- Bluetooth-динамик — добавляет 50-150 мс задержки. Приемлемо для голосов пропов без синхронизации с губами; неидеально для разговора в реальном времени.
- I2S DAC HAT (например, HiFiBerry DAC+ Zero) — лучшее качество звука, наименьшая задержка, но требует настройки оверлея ядра.
В примерах этого руководства используем USB-микрофон + USB-аудиоадаптер — это наиболее воспроизводимый вариант без оверлея device tree.
Первоначальная настройка: Raspberry Pi OS и ALSA
Установка Raspberry Pi OS
Используйте Raspberry Pi OS Lite (64-бит) для безголовых билдов или Raspberry Pi OS Desktop если нужен графический интерфейс для разработки. Запишите на SD-карту через Raspberry Pi Imager и включите SSH в расширенных настройках.
После первой загрузки:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-dev portaudio19-dev libsndfile1-dev sox rubberband-cli
Определение аудиоустройств
aplay -l # список устройств воспроизведения
arecord -l # список устройств захвата
С USB-микрофоном + USB ЦАП они появятся как card 1 и card 2 рядом со встроенным bcm2835. Запишите номера карт и устройств — они понадобятся для input_device_index и output_device_index в PyAudio.
Настройка устройств ALSA по умолчанию
Создайте или отредактируйте /etc/asound.conf:
pcm.!default {
type asym
playback.pcm "plughw:2,0"
capture.pcm "plughw:1,0"
}
ctl.!default {
type hw
card 2
}
Замените номера карт согласно выводу aplay -l / arecord -l. Проверьте: arecord -d 5 test.wav && aplay test.wav.
Python Voice Changer: основной пайплайн
Установка Python-зависимостей
pip3 install pyaudio numpy librosa sounddevice pyrubberband
Если pyaudio не компилируется, убедитесь, что установлен portaudio19-dev. На Pi OS Bookworm может потребоваться виртуальное окружение:
python3 -m venv voicechanger
source voicechanger/bin/activate
pip install pyaudio numpy librosa sounddevice pyrubberband
Минимальный питч-шифтер реального времени
Простейший рабочий пайплайн: читаем аудиофреймы, применяем питч-шифтинг с librosa и записываем результат. Это основа для всех более сложных эффектов.
import pyaudio
import numpy as np
import librosa
RATE = 44100
CHUNK = 1024
SEMITONES = 4.0 # положительное = выше, отрицательное = ниже
p = pyaudio.PyAudio()
stream_in = p.open(format=pyaudio.paFloat32,
channels=1,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
stream_out = p.open(format=pyaudio.paFloat32,
channels=1,
rate=RATE,
output=True,
frames_per_buffer=CHUNK)
print("Voice changer работает. Ctrl+C для остановки.")
try:
while True:
data = np.frombuffer(stream_in.read(CHUNK, exception_on_overflow=False),
dtype=np.float32)
shifted = librosa.effects.pitch_shift(data, sr=RATE, n_steps=SEMITONES)
stream_out.write(shifted.astype(np.float32).tobytes())
except KeyboardInterrupt:
pass
stream_in.stop_stream()
stream_out.stop_stream()
p.terminate()
На Pi 4 с CHUNK=1024 задержка обработки около 23 мс на фрейм плюс задержка буфера ALSA. Общая задержка туда-обратно — 40-80 мс в зависимости от буферизации USB-аудиоустройства.
Более высокое качество с pyrubberband
pitch_shift из librosa использует фазовый вокодер, который работает, но может давать фазовые артефакты на согласных. Библиотека rubberband использует более совершенный алгоритм, лучше работающий с транзиентами — тот же движок, что используется в профессиональных DAW.
import pyrubberband as pyrb
# Замените строку librosa на:
shifted = pyrb.pitch_shift(data, RATE, SEMITONES)
pyrubberband требует системного пакета rubberband-cli (установлен на шаге apt). Вызывает бинарник rubberband через subprocess, добавляя небольшую постоянную задержку. Для большинства голосов персонажей улучшение качества того стоит.
Эффект голоса робота
Голос робота объединяет несколько DSP-шагов: умеренный питч-шифтинг, кольцевая модуляция (амплитудная модуляция несущей синусоидой) и короткая металлическая реверберация.
import numpy as np
def robot_voice(audio, rate=44100, mod_freq=60.0, shift_semitones=-2):
import librosa
pitched = librosa.effects.pitch_shift(audio, sr=rate, n_steps=shift_semitones)
# Кольцевая модуляция: умножение на несущую синусоиду
t = np.arange(len(pitched)) / rate
carrier = np.sin(2 * np.pi * mod_freq * t)
modulated = pitched * carrier
# Смешать сухой и мокрый (50/50)
result = 0.5 * pitched + 0.5 * modulated
# Нормализация
peak = np.max(np.abs(result))
if peak > 0:
result /= peak
return result.astype(np.float32)
Подбирайте mod_freq для металлического характера: 40-60 Гц даёт низкий механический гул; 80-120 Гц звучит как классический робот из фантастики; 200+ Гц начинает напоминать эффект вокодера.
Использование Sox для голосовых эффектов на Raspberry Pi
Sox (Sound eXchange) — утилита обработки аудио командной строки, входящая в большинство дистрибутивов Linux. Она обрабатывает широкий спектр голосовых эффектов простыми флагами и вызывается из Python через subprocess или библиотеку pysox.
Установка pysox
pip3 install sox
Полезные эффекты Sox для голосовых проектов
| Эффект | Флаг Sox | Результат |
|---|---|---|
| Питч-шифтинг | pitch +500 | +5 полутонов (в центах) |
| Эхо/задержка | echo 0.8 0.9 500 0.5 | Одно эхо 500 мс |
| Реверберация | reverb 80 | Реверб размером с зал |
| Дисторшен | overdrive 10 | Лёгкое насыщение |
| Изменение темпа | tempo 0.85 | Медленнее без изменения тона |
| Фильтр нижних частот | lowpass 3000 | Качество телефонного голоса |
| Полосовой фильтр | band 1000 500 | Рация CB / уоки-токи |
Sox лучше подходит для билдов с паттерном push-to-talk — записать сэмпл, обработать, воспроизвести — чем для непрерывного стриминга в реальном времени. Для непрерывного voice changer в реальном времени лучше подход PyAudio + NumPy + librosa.
Проект: Voice Changer в косплейном шлеме
Это одно из самых популярных применений voice changer на Raspberry Pi — шлем или маска, трансформирующие голос пользователя под персонажа. Железный человек, Мандалорец, штурмовик или любой робот-андроид.
Список компонентов
- Raspberry Pi 4 (2 ГБ) или Pi Zero 2W для компактных билдов
- USB-повербанк (10 000 мАч для многочасовой работы)
- Компактный USB-микрофон (Fifine K669B или универсальный USB-петличный)
- Маленький USB-аудиоадаптер (для выхода на наушники)
- 2× 3-ваттный динамик + небольшая усилительная плата Класса D
- Выключатель питания
- Корпус шлема/маски (3D-печатный или готовый)
Python-скрипт для загрузки шлема
Создайте /home/pi/voicechanger/helmet.py с функцией голоса робота, затем создайте systemd-сервис для автозапуска:
# /etc/systemd/system/helmet-voice.service
[Unit]
Description=Helmet Voice Changer
After=sound.target
[Service]
User=pi
WorkingDirectory=/home/pi/voicechanger
ExecStart=/home/pi/voicechanger/venv/bin/python helmet.py
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
Включите командой sudo systemctl enable helmet-voice.service. Pi загружается и запускает voice changer примерно за 15 секунд после включения.
Настройки голоса по типу персонажа
| Тип персонажа | Питч-шифт | Частота мод. | Дополнительный эффект |
|---|---|---|---|
| Робот / андроид | -3 полутона | 80 Гц | Лёгкая реверберация |
| Железный человек (ДЖАРВИС) | -1 полутон | Нет | EQ: подъём 1-3 кГц, лёгкая компрессия |
| Штурмовик | 0 полутонов | 100 Гц | Полосовой фильтр 500-3000 Гц (уоки-токи) |
| Стиль Дарта Вейдера | -4 полутона | 40 Гц | Сильная реверберация, подъём глубоких басов |
| Инопланетянин / существо | +2 полутона | 60 Гц | Кольцевая модуляция + короткое эхо |
Проект: голосовой проп для ретро-гейминга
Пропы для ретро-игровых мероприятий — коробки голосов персонажей в 8 битах, голосовые эффекты аркадных автоматов, портативные звуковые гаджеты — ещё один отличный вариант для компактного voice changer на Raspberry Pi. Для вдохновения по 8-битным и ретро-аудиоэффектам смотрите 8-bit voice changer.
Pi Zero 2W в корпусе форм-фактора картриджа, работающая от небольшого LiPo, может воспроизводить короткие аудиоклипы или применять голосовые эффекты в реальном времени. С кнопкой push-to-talk и маленьким динамиком получается автономный проп без телефона и ноутбука.
Проект: автономная коробка голоса робота
Настольный робот-проп или аниматронный персонаж выигрывает от Pi 4 в корпусе, запускающей постоянный voice changer, в который может говорить кто угодно. Настройка простая:
- USB-микрофон в позиции всенаправленного захвата
- Постоянно работающий Python-скрипт (systemd-сервис)
- Аудиовыход USB в портативный Bluetooth-динамик или динамик с усилителем
- Опциональное управление LED или сервоприводом через GPIO для анимации робота при превышении уровня звука
Анимация LED/сервопривода по уровню звука — популярное дополнение. PyAudio предоставляет уровень аудио прямо через RMS каждого буфера:
rms = np.sqrt(np.mean(data**2))
is_speaking = rms > THRESHOLD # подберите THRESHOLD экспериментально
Подключите булев is_speaking к GPIO-выходу — и у вас робот, который «открывает рот» когда кто-то говорит с ним.
Оптимизация задержки для voice changer в реальном времени
| Источник | Типичное значение | Снижаемо? |
|---|---|---|
| Буфер входа ALSA | 10-30 мс | Да, уменьшить буфер |
| Обработка Python (librosa, 1024 сэмпла) | 23 мс | Да, уменьшить chunk |
| Буфер выхода ALSA | 10-30 мс | Да |
| Накладные расходы USB-аудио | 5-15 мс | Частично |
| Bluetooth (если используется) | 50-150 мс | Нет — избегать в реальном времени |
Советы по настройке:
- Уменьшите CHUNK с 2048 до 512 сэмплов — задержка снизится с 46 до 12 мс при 44100 Гц.
- Используйте
sounddeviceвместо PyAudio для лучшей интеграции с ALSA на Linux. - Установите губернатор CPU в режим производительности:
sudo cpufreq-set -g performance. - Используйте проводной USB-аудиоадаптер; Bluetooth добавляет 50-150 мс.
Voice Changer на Raspberry Pi vs специализированный софт
| Сценарий | Raspberry Pi (Python) | Специализированный Windows-софт |
|---|---|---|
| Косплейный шлем / носимый проп | Идеально | Не применимо |
| Настольный робот-проп | Идеально | Не применимо |
| Ретро-проп / автономный | Идеально | Не применимо |
| Discord / чат в играх на Windows | Сложный обходной путь | Значительно проще |
| Стриминг Twitch / YouTube | Возможно через JACK | VoxBooster или аналог — проще |
| Качество AI-преобразования голоса | Ограничено (мощностью Pi) | Значительно выше (GPU/CPU на ПК) |
| Задержка на ПК | 40-80 мс на Pi | Менее 10 мс на современном ПК |
| Время настройки | Часы | Минуты |
Для тех, кто искал voice changer для Discord или стриминга и попал сюда случайно — рассмотрите нативный Windows-вариант. VoxBooster создаёт виртуальный микрофон прямо в аудиографе Windows, обрабатывает с задержкой менее 10 мс и настраивается за пять минут. Также смотрите voice changer для Linux если ваша стриминговая машина работает на Linux.
Для проектов без Raspberry Pi: туториал по voice changer в Audacity покрывает офлайн-обработку тона, а игрушки и пропы voice changer — готовые аппаратные варианты для косплея. Для проектов на микроконтроллерах ещё меньшего форм-фактора смотрите voice changer на Arduino.
Часто задаваемые вопросы
Может ли Raspberry Pi запустить voice changer в реальном времени?
Да. У Raspberry Pi 4 или 5 достаточно CPU для питч-шифтинга с PyAudio и Sox с задержкой 20-40 мс. Нейронное преобразование голоса тяжелее и требует Pi 5 или вынесенного инференса, но базовые эффекты — тон, форманты, голос робота — отлично работают в реальном времени на Pi 4.
Какой USB-микрофон лучше всего подходит для Raspberry Pi в голосовом чейнджере?
Любой USB-микрофон со стандартным интерфейсом UAC работает без дополнительных драйверов на Raspberry Pi OS. Популярные варианты: Blue Snowball iCE, Fifine K669B и Samson Go Mic. Избегайте микрофонов, требующих проприетарных Windows-драйверов — они не работают на Linux.
Какие библиотеки Python нужны для voice changer на Raspberry Pi?
Основной стек: PyAudio (аудио-ввод/вывод), NumPy (матричные вычисления) и librosa (спектральный анализ и питч-шифтинг) или pysox (привязки к Sox). Для качества rubberband установите pyrubberband плюс rubberband-cli. SoundDevice — более чистая альтернатива PyAudio для ALSA в Linux.
Как снизить задержку в Python voice changer на Raspberry Pi?
Используйте буферы 512 или 1024 сэмпла при 44100 Гц (12-23 мс). Не вызывайте librosa.load() внутри аудио-коллбека — предвычисляйте параметры заранее. Sox через subprocess добавляет накладные расходы; предпочтительнее библиотеки в процессе.
Можно ли использовать Raspberry Pi voice changer для косплея или пропов?
Конечно. Pi Zero 2W или Pi 4 помещается внутри шлема или пропа, питается от USB-повербанка. Подключите USB-микрофон, выведите звук через маленький динамик и запускайте скрипт при загрузке через systemd. Всё работает без клавиатуры и монитора.
В чём разница между питч-шифтингом и преобразованием голоса на Raspberry Pi?
Питч-шифтинг изменяет основную частоту аудиосигнала. Преобразование голоса заменяет акустические характеристики одного голоса другим с помощью моделей машинного обучения. Первое работает в реальном времени на любой Pi 4; преобразование голоса требует большей мощности и лучше работает на Pi 5 или с USB-ускорителем вроде Google Coral.
Работает ли VoxBooster на Raspberry Pi?
Нет. VoxBooster — настольное приложение для Windows 10/11, работающее на оборудовании x86-64. Для проектов на Linux или Raspberry Pi правильный подход — Python-пайплайны с PyAudio, librosa и rubberband. Если конечная цель — Discord или стриминг на ПК с Windows, VoxBooster проще и имеет меньшую задержку.
Заключение
Voice changer на Raspberry Pi — один из самых увлекательных проектов встраиваемого аудио, которые вы можете собрать: железо дешёвое, Python-экосистема для DSP зрелая, а результаты варьируются от функциональных пропов до по-настоящему впечатляющих интерактивных инсталляций. Основной пайплайн (PyAudio → обработка NumPy → вывод PyAudio) заработает менее чем за час. Добавление pyrubberband заметно улучшает качество, а упаковка в systemd-сервис делает всё это самозапускаемым, как потребительское устройство.
Pi 4 упирается в предел при тяжёлом нейронном преобразовании голоса, но для питч-шифтинга, кольцевой модуляции, голоса робота и эффектов персонажей у неё более чем достаточно мощности. Если Pi вам мала — тот же Python-код работает на любой Linux-машине, а концепции напрямую переносятся в понимание того, что делают специализированные инструменты вроде VoxBooster, достигающего менее 10 мс задержки на Windows с полным AI-преобразованием голоса.
Собирайте шлем. Запускайте робота. Доставайте проп на следующей конвенции.
Скачать VoxBooster — бесплатная 3-дневная пробная версия для Windows, без карты.