Оглавление:

Модуль синтезатора Raspberry Pi Stompbox: 6 шагов (с изображениями)
Модуль синтезатора Raspberry Pi Stompbox: 6 шагов (с изображениями)

Видео: Модуль синтезатора Raspberry Pi Stompbox: 6 шагов (с изображениями)

Видео: Модуль синтезатора Raspberry Pi Stompbox: 6 шагов (с изображениями)
Видео: Building Crazy Guitar Rig 2.0 (part 2 of 3) | DIY Гитара | Built-in Raspberry PI 2024, Ноябрь
Anonim
Модуль синтезатора Raspberry Pi Stompbox
Модуль синтезатора Raspberry Pi Stompbox
Модуль синтезатора Raspberry Pi Stompbox
Модуль синтезатора Raspberry Pi Stompbox

Цель этого проекта - поместить звуковой модуль на основе Fluidsynth в педаль. Технически звучащий термин «звуковой модуль» в данном случае означает устройство, которое принимает MIDI-сообщения (т. Е. Значение ноты, громкость, изменение высоты звука и т. Д.) И синтезирует настоящие музыкальные звуки. Соедините это с MIDI-контроллером - который легион, дешев и часто очень крутой (например, клавишные!) - и у вас есть синтезатор, который вы можете модифицировать и настраивать бесконечно, а также спроектировать так, чтобы он соответствовал вашему стилю игры.

Общий обзор этого проекта заключается в том, что мы берем небольшой одноплатный Linux-компьютер (в данном случае Raspberry Pi 3), присоединяем символьный ЖК-дисплей, пару кнопок и звуковую карту USB (поскольку встроенный звук Pi не очень хорош.) и втиснуть все в педаль Hammond 1590bb (например, те, которые используются для гитарных эффектов) с некоторыми внешними разъемами для USB MIDI, питания и аудиовыходов. Затем мы настраиваем внутреннее программное обеспечение для запуска программы при запуске, которая запускает FluidSynth (отличный мультиплатформенный бесплатный программный синтезатор), управляет ЖК-дисплеем и позволяет нам изменять патчи и настройки с помощью кнопок.

Я не буду вдаваться в подробные пошаговые инструкции по этой сборке (существует множество руководств hey-i-made-a-cool-raspberry-pi-case), а вместо этого попытаюсь сосредоточиться на том, почему я сделал различные варианты конструкции и дизайна по мере того, как я ходил. Таким образом, можно надеяться, что вы сможете вносить изменения в соответствии с вашими целями, не застревая при выполнении вещей, которые позже окажутся неработоспособными.

ОБНОВЛЕНИЕ (май 2020 г.): Хотя это руководство по-прежнему является отличным местом для старта для такого проекта, я сделал много улучшений как в аппаратной, так и в программной части. Последнее программное обеспечение - FluidPatcher, доступное на GitHub - ознакомьтесь с вики, чтобы узнать больше о настройке Raspberry Pi. Посетите мой сайт Geek Funk Labs, чтобы постоянно получать новости и обновления о SquishBox!

Запасы

Это краткий список (и объяснение) наиболее важных компонентов:

  • Компьютер Raspberry Pi 3 - любой одноплатный компьютер с Linux может работать, но Pi 3 обладает достаточной вычислительной мощностью для запуска Fluidsynth без каких-либо задержек и достаточным объемом памяти для загрузки больших звуковых шрифтов. Недостатком является плохой звук на плате, поэтому вам понадобится звуковая карта USB. ЧИП - альтернатива, которую я изучаю (меньшая занимаемая площадь, лучший звук, но меньше памяти / процессора)
  • Корпус Hammond 1590BB - я предлагаю купить тот, который предварительно покрыт порошковой краской, если вам нужен цвет, если вы не занимаетесь покраской педалей. Я просмотрел много досок объявлений, но думаю, что у меня нет терпения или нужной краски, потому что после двух попыток мои результаты довольно посредственные.
  • Звуковая карта USB - Вы можете найти подходящую из них довольно дешево. Согласно этому прекрасному руководству Adafruit (одному из многих), вы должны придерживаться того, которое использует набор микросхем CM109 для максимальной совместимости.
  • Символьный ЖК-дисплей - есть много разных мест, где их можно достать, но распиновка кажется довольно стандартной. Убедитесь, что у вас есть подсветка, чтобы вы могли видеть свои пресеты во время игры в дымных клубах.
  • Мгновенные ножные переключатели (2) - немного сложнее получить, но у меня есть мгновенный переключатель вместо переключения, чтобы я мог иметь больше универсальности. Я могу смоделировать переключение в программном обеспечении, если я хочу такое поведение, но таким образом у меня также могут быть разные функции для короткого нажатия, длительного нажатия и т. Д.
  • Adafruit Perma-Proto Hat для Pi - это помогло мне подключить ЖК-дисплей и другие компоненты к порту расширителя Pi, не занимая много дополнительного места. Если бы я попытался использовать обычную перфокарту, она должна была бы торчать по бокам Pi, чтобы я мог подключиться ко всем необходимым контактам GPIO. Двусторонняя обшивка и соответствующие монтажные отверстия также были очень полезны. В свете всего этого это был действительно самый дешевый вариант.
  • Разъемы USB - 1 гнездо B-типа для питания и по два штекера и гнезда A-типа, с помощью которых можно сделать тонкие и гибкие удлинительные кабели для внутренних подключений.
  • 1/4-дюймовые аудиоразъемы - я использовал одно стерео и одно моно. Таким образом, стерео может быть гнездом для наушников / моно или просто передавать левый сигнал, если другой разъем подключен.

Шаг 1: внутренняя электроника

Внутренняя электроника
Внутренняя электроника
Внутренняя электроника
Внутренняя электроника
Внутренняя электроника
Внутренняя электроника

Мы подключим ЖК-дисплей, связанные с ним компоненты и кнопки к Pi Hat. Также мы добавим разъемы USB-B и USB-A для подключения питания и MIDI-устройства соответственно. Мы переносим порт USB-A, потому что нам нужно использовать один из портов USB Pi для подключения звуковой карты, которую мы хотим иметь внутри корпуса, поэтому мы не можем расположить порты USB заподлицо с боковой стороной коробки. Я использовал порт USB-B для питания, потому что чувствовал, что это может потребовать большего наказания, чем разъем питания micro-USB Pi, к тому же я не мог найти хорошую ориентацию, где разъем мог бы быть рядом с краем коробки.

Вам нужно будет использовать нож, чтобы вырезать следы между отверстиями, в которые вы будете впаивать контакты для разъемов USB. Только будьте осторожны, чтобы не порезать какие-либо внутренние следы на плате, соединяющие другие контакты - или если вы случайно (как я) снова подключите их с помощью перемычки. Контакты Vcc и GND разъема USB-B подключаются к 5V и GND на порте расширителя Pi, соответственно. Таким образом, вы можете подключить свой стомпбокс с помощью зарядного устройства для телефона (при условии, что у него достаточная сила тока - 700 мА, похоже, для меня работает, но вы можете захотеть большего, чтобы убедиться, что у USB-порта достаточно заряда для питания вашего контроллера) и кабеля USB A-B.

Я считаю, что ленточный кабель большой длины отлично подходит для соединения вещей с большим количеством контактов без слишком большого количества проволочных спагетти. Я сделал это вместо того, чтобы паять штекерные разъемы в ЖК-дисплей, а затем паять его в шляпу, потому что я чувствовал, что мне нужна некоторая свобода, чтобы расположить ЖК-дисплей, чтобы я мог правильно отцентрировать его. ЖК-дисплей должен поставляться с потенциометром, который вы используете для регулировки контраста - убедитесь, что вы поместили его в такое место, где он не будет закрыт ЖК-дисплеем, чтобы вы могли сделать отверстие в коробке, чтобы добраться до него и отрегулировать контраст один раз. все собрано.

Проконсультируйтесь со схемой, чтобы узнать, что и где подключается. Обратите внимание, что кнопки подключены к напряжению 3,3 В, а не 5 В! Контакты GPIO рассчитаны только на 3,3 В - 5 В повредит ваш процессор. Разъем USB-A подключается к другой полосе ленточного кабеля, который затем можно припаять к штекеру USB, который вы подключите к одному из портов USB Pi для вашего MIDI-контроллера. Отрежьте лишний металл от заглушки, чтобы она меньше торчала, и используйте горячий клей для снятия натяжения - он не должен быть красивым, так как он будет спрятан внутри коробки.

Шаг 2: Подключение аудиовыхода

Подключение аудиовыхода
Подключение аудиовыхода
Подключение аудиовыхода
Подключение аудиовыхода
Подключение аудиовыхода
Подключение аудиовыхода

Независимо от того, насколько крошечной вы найдете звуковую карту USB, она или ее штекер, скорее всего, будут торчать слишком далеко от USB-портов Pi, чтобы все уместилось в коробке. Итак, припаяйте еще один короткий USB-разъем из ленточного кабеля, USB-штекеров и горячего клея, как показано на картинке выше. Моя звуковая карта все еще была слишком громоздкой, чтобы поместиться в корпусе со всем остальным, поэтому я снял пластик и обмотал его изолентой, чтобы не допустить короткого замыкания.

Чтобы передать звук со звуковой карты на разъемы 1/4 ", отрежьте конец 3,5-мм кабеля для наушников или кабеля AUX. Убедитесь, что на нем есть 3 разъема - наконечник, кольцо и гильза (TRS), а не 2 или 4. Гильза должна быть заземлена, наконечник обычно является правым каналом, а кольцо (средний разъем) обычно остается левым. Вы можете просто подключить наконечник и кольцо к двум моно (TS - наконечник, рукав) 1/4 "разъема и готово. с ним, но вы можете получить больше универсальности с помощью крошечной дополнительной проводки. Найдите гнездо TS с третьим мгновенным контактом, как схематично показано на схеме выше. Вставка вилки разрывает этот контакт, так что, как вы можете надеяться, видно из схемы, левый сигнал затем пойдет на гнездо TS, если штекер вставлен, и на кольцо гнезда TRS, если штекер не вставлен. Таким образом, вы можете подключить наушники к стереоразъему, один моно кабель к стереоразъему для комбинированного правого / левого (моно) сигнала или по кабелю в каждое гнездо для отдельных правого и левого (стерео) выходов.

Я соединил контакты заземления разъемов с контактами кабеля, идущего от звуковой карты, так что все в коробке имеет одно и то же заземление, и я избегаю неприятного шума контуров заземления. Однако, в зависимости от того, к чему вы подключены, это может иметь противоположный эффект - поэтому вы можете включить переключатель, который позволит вам либо подключать, либо «поднимать» землю на 1/4-дюймовых разъемах.

Шаг 3: Подготовка корпуса

Подготовка корпуса
Подготовка корпуса
Подготовка корпуса
Подготовка корпуса
Подготовка корпуса
Подготовка корпуса

Этот шаг касается вырезания отверстий в коробке для экрана, кнопок, разъемов и т. Д., А также эпоксидной заделки стоек в корпусе для крепления шляпы Pi.

Начните с размещения всех компонентов в корпусе, чтобы убедиться, что все подходит и ориентировано правильно. Затем тщательно измерьте и отметьте, где вы собираетесь сделать отверстия. При вырезании круглых отверстий я рекомендую начинать с небольшого сверла и доводить его до нужного вам размера - так легче центрировать отверстие и меньше вероятность заклинивания сверла. Прямоугольные отверстия можно вырезать, просверлив отверстие в противоположных углах предполагаемого отверстия, а затем прорезав лобзиком до двух других углов. Алюминий такой толщины на самом деле отлично режется лобзиком, если двигаться аккуратно. Квадратный напильник очень полезен для скругления углов проемов. Сделайте отверстия для разъемов USB немного большими на случай, если у вас толстые кабели.

Двухступенчатая эпоксидная смола (например, клей Gorilla Glue на картинке) хорошо подходит для прикрепления стоек для шляпы к металлическому корпусу. Поцарапайте поверхность корпуса и нижнюю часть стоек стальной мочалкой или отверткой, чтобы смола лучше держалась. Я рекомендую прикрепить стойки к шляпе Pi, прежде чем приклеивать их, чтобы вы знали, что они расположены правильно - здесь не так много места для маневра. Я использовал только три стойки, потому что мой ЖК-дисплей мешал четвертой. Смешайте два компонента эпоксидной смолы, наклейте немного на стойки и закрепите их на месте. Избегайте шевеления или изменения положения деталей более чем через 10-15 секунд, иначе соединение будет хрупким. Дайте ему 24 часа на настройку, чтобы вы могли продолжить работу. Чтобы полностью затвердеть, потребуется несколько дней, поэтому не подвергайте скрепку без надобности.

Если вы не хотите заняться покраской педалей еще одним хобби, я предлагаю оставить алюминий голым (на самом деле неплохой вид) или купить предварительно окрашенный корпус. Краска не хочет сцепляться с металлом. Если вы хотите попробовать, отшлифуйте везде, где вы хотите, чтобы краска приклеилась, сначала используйте хорошую аэрозольную грунтовку для кузова, нанесите несколько слоев желаемого цвета, а затем дайте ему высохнуть как можно дольше. Серьезно - маньяки на досках объявлений предлагают такие вещи, как оставить его под прямыми солнечными лучами на три месяца или в тостере, установленном на низком уровне, на неделю. После шлифования смятых, отслаивающихся остатков моей первой работы по покраске, моя вторая попытка все еще покрывается сколами и царапинами от таких вещей, как ручки, в моей сумке для концертов, а поверхность может быть помята ногтем. Я решил уступить и пошел в стиле панк, используя белый маркер для надписи.

Шаг 4: установка программного обеспечения

Настройка программного обеспечения
Настройка программного обеспечения
Настройка программного обеспечения
Настройка программного обеспечения

Прежде чем засунуть все в педаль и завинтить, вам необходимо настроить программное обеспечение на Raspberry Pi. Я предлагаю начать с новой установки Raspbian OS, поэтому загрузите последнюю копию с сайта Raspberry Pi Foundation и следуйте инструкциям, чтобы скопировать ее на SD-карту. Возьмите клавиатуру и экран или используйте консольный кабель, чтобы войти в свой Pi в первый раз и перейти в командную строку. Чтобы убедиться, что у вас самые последние обновления программного обеспечения и прошивки, введите

sudo apt-get update && sudo apt-get upgrade

sudo rpi-update

Затем вы хотите убедиться, что вы можете использовать Wi-Fi для ssh в Pi и внести изменения, как только он застегнут внутри корпуса. Сначала включите ssh-сервер, набрав

sudo raspi-config

и перейдем в «Параметры интерфейса» и включим ssh-сервер. Теперь добавьте беспроводную сеть к pi, отредактировав файл wpa_supplicant.conf:

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

и добавив в конце следующие строки:

network = {

ssid = "ваша-сеть" psk = "ваш-пароль"}

Замените your-network и your-password, указанными выше, значениями для той сети, к которой вы хотите, чтобы Pi подключался по умолчанию - скорее всего, ваш Wi-Fi-роутер дома или, возможно, точка доступа на вашем телефоне или ноутбуке, работающем в режиме точки доступа. Еще одна альтернатива для подключения к вашему Pi - настроить его как точку доступа Wi-Fi, чтобы вы могли просто подключиться к нему, где бы вы ни находились. Интерфейс, который я написал ниже, также позволяет вам подключить другое устройство Bluetooth к Pi, после чего вы можете подключиться к нему с помощью последовательного интерфейса через Bluetooth.

Чтобы установить FluidSynth, введите

sudo apt-get install fluidsynth

Файлы, прикрепленные к этому шагу, обеспечивают интерфейс между элементами управления педалями и FluidSynth, и их следует скопировать в каталог / home / pi. Вот краткое объяснение того, что делает каждый файл:

  • squishbox.py - скрипт Python, который запускается и взаимодействует с экземпляром FluidSynth, считывает ввод с кнопок педали и записывает информацию на ЖК-дисплей.
  • config_squishbox.yaml - файл конфигурации в (в основном) удобочитаемом формате YAML, в котором хранятся настройки и информация о патчах для программы squishbox.
  • fluidsynth.py - оболочка python, которая обеспечивает привязки к функциям C в библиотеке FluidSynth, со многими дополнительными привязками, добавленными мной для доступа к большей функциональности FluidSynth
  • ModWaves.sf2 - очень маленький звуковой шрифт, который я предоставил для демонстрации использования и мощности модуляторов в формате Soundfont.

Наличие сценария python, настраивающего процесс FluidSynth и обрабатывающего все кнопки / ЖК-дисплей, работает достаточно хорошо - MIDI-сообщения поступают непосредственно в FluidSynth, и сценарий взаимодействует с ним только тогда, когда это необходимо.

Сценарию python требуется пара библиотек Python, которые не установлены по умолчанию. Вы можете установить их прямо из индекса пакетов Python с помощью удобного инструмента pip:

sudo pip установить RPLCD pyyaml

Наконец, вы хотите, чтобы Pi запускал скрипт python при загрузке. Для этого отредактируйте файл rc.local:

sudo vi /etc/rc.local

Вставьте следующую строку непосредственно перед последней строкой «exit 0» в файле:

python /home/pi/squishbox.py &

Шаг 5: Окончательная сборка

Окончательная сборка
Окончательная сборка
Окончательная сборка
Окончательная сборка
Окончательная сборка
Окончательная сборка

Прежде чем складывать все компоненты в коробку, рекомендуется все подключить и убедиться, что программное обеспечение работает, как показано на изображениях выше. На изображениях 3-6 показаны все отдельные части и постепенно то, как они вписываются в мою коробку. ЖК-дисплей на самом деле удерживается на месте проводами, прижимающимися к нему, но вы можете использовать горячий клей или добавить еще несколько крепежных винтов, если вам это не нравится. Оранжевая клейкая лента на крышке коробки предназначена для предотвращения короткого замыкания Pi с металлом.

Возможно, вам придется поэкспериментировать и перенастроить, чтобы все соответствовало. Удобство - это хорошо - чем меньше деталей будет болтаться в коробке, тем лучше. Тепло не кажется проблемой, и у меня не было проблем с блокировкой сигнала Wi-Fi корпусом. На дне коробки не показаны липкие резиновые ножки (их можно найти в строительном магазине), чтобы она не скользила во время тренировки.

Следите за непредвиденными ударами / сдавливанием / сгибанием при скручивании. Одна вещь, которую следует проверить, это то, что при вставке кабелей достаточно места для разъемов 1/4 дюйма - кончики выступают немного дальше, чем контакты разъема. Кроме того, в моей сборке я установил Pi слишком близко к краю. коробки и выступ на крышке прижал конец SD-карты и защелкнул ее - мне пришлось подпилить выемку в губе, чтобы этого не произошло.

Шаг 6: использование

Image
Image
использование
использование
использование
использование

Звуковой модуль, который я описал в этих шагах, и запуск программного обеспечения, представленного выше, довольно удобен и расширяем из коробки, но возможны многие модификации / варианты. Я просто кратко опишу здесь интерфейс - я планирую постоянно обновлять его в репозитории github, где я, надеюсь, также буду держать обновленную вики. Наконец, я расскажу, как вы можете настроить параметры, добавить новые звуки и внести свои собственные изменения.

Для начала подключите USB-MIDI-контроллер к разъему USB-A на коробке, блок питания 5 В к разъему USB-B и подключите наушники или усилитель. Через некоторое время на ЖК-дисплее появится сообщение «squishbox v xx.x». Как только появятся номер и название патча, вы сможете играть ноты. Короткие нажатия на любую кнопку изменяют патч, удерживая любую кнопку в течение пары секунд, вы попадаете в меню настроек, а удерживание любой кнопки в течение примерно пяти секунд дает вам возможность перезапустить программу, перезагрузить Pi или выключить Pi (NB, Pi не отключает питание своих контактов GPIO при остановке, поэтому ЖК-дисплей никогда не выключится. Просто подождите около 30 секунд, прежде чем отключать его).

Опции меню настроек:

  • Обновить патч - сохраняет все изменения, внесенные вами в текущий патч, в файл
  • Сохранить новый патч - сохраняет текущий патч и любые изменения как новый патч.
  • Выберите банк - файл конфигурации может иметь несколько наборов патчей, это позволяет вам переключаться между ними.
  • Set Gain (Установить усиление) - установить общую выходную громкость (опция «gain» для fluidsynth), слишком высокое значение дает искаженный выходной сигнал.
  • Chorus / Reverb - изменение настроек реверберации и хоруса текущего набора
  • MIDI Connect - попробуйте подключить новое MIDI-устройство, если вы меняете его во время работы программы
  • Bluetooth Pair - переведите Pi в режим обнаружения, чтобы вы могли подключить к нему другое устройство Bluetooth.
  • Статус Wi-Fi - сообщите текущий IP-адрес Pi, чтобы вы могли использовать ssh

Файл config_squishbox.yaml содержит информацию, описывающую каждый патч, а также такие вещи, как маршрутизация MIDI, параметры эффектов и т. Д. Он написан в формате YAML, который представляет собой кросс-языковой способ представления данных, которые компьютеры могут анализировать, но также являются человеческими. -удобочитаемый. Это может быть довольно сложно, но здесь я просто использую его как способ представления структуры вложенных словарей Python (ассоциативные массивы / хэши на других языках) и последовательностей (списки / массивы). Я поместил много комментариев в образец файла конфигурации и попытался структурировать его так, чтобы можно было постепенно увидеть, что делает каждая функция. Посмотрите и поэкспериментируйте, если вам интересно, и не стесняйтесь задавать вопросы в комментариях. Вы можете многое сделать, чтобы изменить звуки и функциональность модуля, просто отредактировав этот файл. Вы можете удаленно войти в систему и отредактировать или отправить по FTP измененный файл конфигурации на Pi, а затем перезапустить его, используя интерфейс или набрав

sudo python /home/pi/squishbox.py &

в командной строке. Сценарий написан для уничтожения других запущенных экземпляров себя при запуске, чтобы не было никаких конфликтов. Сценарий будет выдавать несколько предупреждений в командной строке при запуске, поскольку он ищет MIDI-устройства для подключения и ищет в разных местах ваши звуковые шрифты. Он не сломан, это просто ленивое программирование с моей стороны - я мог их поймать, но я утверждаю, что они являются диагностическими.

Когда вы устанавливаете FluidSynth, вы также получаете довольно хороший бесплатный звуковой шрифт FluidR3_GM.sf2. GM означает общий MIDI, что означает, что он содержит «все» инструменты, назначенные на общепринятые предустановки и номера банков, так что MIDI-плееры, воспроизводящие файлы с использованием этого звукового шрифта, смогут найти примерно правильный звук для фортепиано, трубы., волынки и т. д. Если вы хотите больше / других звуков, вы можете найти множество бесплатных звуковых шрифтов в Интернете. Что наиболее важно, спецификация звуковых шрифтов широко доступна, на самом деле довольно мощная, и есть замечательный редактор звуковых шрифтов с открытым исходным кодом под названием Polyphone. С его помощью вы можете создавать свои собственные звуковые шрифты из необработанных файлов WAV, а также можете добавлять модуляторы к своим шрифтам. Модуляторы позволяют управлять многими элементами синтеза (например, огибающей ADSR, огибающей модуляции, LFO и т. Д.) В реальном времени. Файл ModWaves.sf2, который я включил выше, представляет собой пример использования модуляторов, позволяющих сопоставить резонанс фильтра и частоту среза с MIDI-сообщением изменения управления (которое может быть отправлено кнопкой / ползунком на вашем контроллере). Здесь так много возможностей - играйте!

Я надеюсь, что этот учебник породит много идей и даст другим хорошую основу для создания собственных уникальных синтезаторных творений, а также поддержит постоянную доступность и разработку хороших звуковых шрифтов, спецификации soundfont и отличного бесплатного программного обеспечения, такого как FluidSynth и Polyphone.. Сборка, которую я здесь описал, - не лучший и не единственный способ собрать что-то подобное. Что касается аппаратного обеспечения, то возможными модификациями могут быть более крупный блок с большим количеством кнопок, устаревший (5-контактный) MIDI-вход / выход и / или аудиовходы. Сценарий python может быть изменен (извиняюсь за мои скудные комментарии), чтобы обеспечить другое поведение, которое может вам больше подойти - я думаю о добавлении режима «эффектов» в каждый патч, где он будет действовать как педаль эффектов с настоящими эффектами, переключая настройки на и выкл. Можно также добавить дополнительное программное обеспечение для создания цифровых звуковых эффектов. Я также думаю, что было бы лучше, если бы Pi работал в режиме Wi-Fi AP, как описано выше, а затем он мог бы даже предоставить удобный веб-интерфейс для редактирования файла конфигурации. Пожалуйста, не стесняйтесь размещать свои идеи / вопросы / обсуждения в ленте комментариев.

Я хочу поблагодарить создателей FluidSynth и Polyphone за предоставление бесплатного программного обеспечения с открытым исходным кодом, которое мы все можем использовать для создания отличной музыки. Мне нравится использовать эту вещь, и вы сделали это возможным!

Рекомендуемые: