Подключение MIDI-клавиатуры к синтезатору на PSP
Процесс сопряжения MIDI-клавиатуры с консолью
Превращаем Sony PSP в MIDI-синтезатор: аппаратная и программная реализация
Мне удалось реализовать проект портативного синтезатора для консоли PSP с полноценным управлением по протоколу MIDI. Приложение обладает лаконичным функционалом: 4-голосная полифония, поддержка четырех типов волны (квадрат, пила, треугольник и синус), настраиваемая огибающая, фильтр и банк на 5 пресетов. Подключение MIDI-клавиатуры осуществляется через классическую схему с опторазвязкой в порт пульта дистанционного управления (HPRM), расположенный рядом со стандартным аудиоразъёмом 3.5 мм.
Ознакомиться с демонстрацией работы устройства можно на видео: Синтезатор на PSP в действии.
Технические особенности SIO (UART) в архитектуре PSP
Штатный пульт управления наушниками PSP обменивается данными с консолью посредством UART-команд через порт HPRM. Этот же интерфейс обеспечивает питание микроконтроллера пульта. Подробную спецификацию распиновки можно изучить на PS Dev Wiki.

Критически важный нюанс: существуют различия в вольтаже между ревизиями. В PSP 1000 используется 6-пиновый разъем с напряжением 2.5 В, тогда как в моделях 2000/3000 разъем стал 12-пиновым (из-за поддержки ТВ-выхода), а напряжение снизилось до 1.9 В. При проектировании собственных устройств согласование уровней напряжения является обязательным условием.
Для низкоуровневого взаимодействия с UART я использовал библиотеку PSP-Serial-Example. Поскольку штатное ПО консоли не задействовало SIO-интерфейс для пользовательских нужд, работа с ним возможна только на уровне ядра (kernel mode). Данный проект служит мостом между пользовательским кодом и аппаратным UART.
Стоит также отметить проект PSP-Bluetooth от того же автора, где реализовано управление консолью современными геймпадами через связку ESP32 и UART.
Создание адаптера MIDI to PSP
Наиболее эстетичный вариант изготовления переходника — использование корпуса от штатного пульта. Однако в рамках прототипирования я пошел по пути создания кастомной печатной платы под разъем HPRM. Текстолит стандартной толщины 1.6 мм идеально фиксируется в порту. Из-за невозможности оперативной доставки комплектующих, плата была вырезана вручную из двухстороннего фольгированного диэлектрика.

Работоспособность была подтверждена передачей данных через USB-TTL конвертер, после чего я перешел к интеграции опторазвязки. Были протестированы две конфигурации:
- Схема на базе 6N138: требует питания 5 В (взято с USB Type-C), что влечет за собой необходимость принудительного согласования выходного сигнала до уровня 2.5 В.
- Схема на скоростной оптопаре TLP2361: согласно спецификации, ей достаточно 2.7 В, но практика показала стабильную работу и от 2.5 В, выдаваемых самой PSP. Это позволило отказаться от внешнего питания и согласования уровней.

В ходе проектирования выявилась конструктивная особенность: PSP подает питание на HPRM только при наличии вставленного 3.5 мм джека в соседнем гнезде. Поскольку самодельный адаптер получился массивным, это ограничивает выбор используемых аудиокабелей — подходят только модели с очень узким корпусом штекера.

Программная часть: разработка в среде PSPSDK
Исходный код проекта доступен в моем репозитории: PSP_MidiSynth на GitHub.
Для компиляции использовался стандартный PSPSDK. Архитектура приложения на языке Си построена на двух потоках: один отвечает за считывание MIDI-событий, второй — за генерацию аудиосигнала. Визуальный интерфейс реализован средствами библиотеки pspDebugScreen.
Важно: Работа синтезатора на эмуляторах (включая PPSSPP) невозможна, так как они не поддерживают загрузку кастомных модулей ядра.
// Основные параметры конфигурации синтезатора
#define SAMPLE_RATE 44100
#define BUF_SAMPLES 512
#define MAX_VOICES 4
#define VOLUME PSP_AUDIO_VOLUME_MAX
#define TWO_PI 6.28318530718f
#define GAIN_SINE 2.1f
#define GAIN_TRIANGLE 2.4f
#define GAIN_SAW 1.2f
#define GAIN_SQUARE 1.0f
#define PRESET_COUNT 5
#define PRESET_FILE "ms0:/PSP/GAME/PSP_MidiSynth/presets.bin"
Экспериментальным путем было установлено, что размер буфера в 512 семплов обеспечивает оптимальный баланс между задержкой и стабильностью звука. Также в коде предусмотрены индивидуальные коэффициенты усиления (Gain) для каждого типа волны, чтобы компенсировать разницу в их субъективной громкости.
Ace Combat 8: розовые волосы Таши сделали её самой дорогой героиней игры
Эксклюзив Xbox 360 Lost Odyssey спустя почти двадцать лет выйдет на PC
Фанаты спустя 28 лет занялись возрождением культовой японской ролевой игры Xenogears
The Witcher 3 получит визуальное обновление для Switch 2 вместе с новым сюжетным дополнением
Xbox получила игру Кодзимы PHYSINT после отказа PlayStation от проекта
Фанаты разозлились на Sony из-за отмены PHYSINT
Почему при 200 FPS игра лагает и зависает
NVIDIA подтвердила поддержку DLSS 4.5 в The Witcher 3