IT News: Digital Camera, OS, Laptop, Smartphone, Smart TV, Sound...

The Author's Project by Valeri N.Kravchuk
Сайт проверен Dr.Web
Меню сайта
  • Главная страница
  • Информация о сайте
  • Дневник
  • Каталог файлов
  • Обратная связь
  • Каталог сайтов
  • FAQ
  • Доска объявлений
  • Форум
  • Фотоальбом
  • Категории раздела
    Автомобильные гаджеты, ремонт... [143]
    Безопасность IT [404]
    Блоки питания, Power Banks, зарядки... [508]
    Видеорегистраторы [186]
    Гаджеты для спорта и здоровья... [190]
    Гаджеты, аксессуары... [627]
    Измерительная техника, инструменты [437]
    Накопители данных [232]
    Нетбуки, Ноутбуки, Ультрабуки [689]
    Мультиварки, блендеры и не только... [162]
    Планшеты [764]
    Радар-детекторы [26]
    Роботы-пылесосы [37]
    Своими руками [360]
    Сети, сетевые технологии, оборудование... [273]
    Смартфоны [4959]
    Фотокамеры, объективы, искусство фотографии.. [541]
    Умный дом [50]
    Электронные книги [101]
    CB, LPD, PMR- связь... [170]
    DECT, IP-телефоны [18]
    Drones, boats, cars... [108]
    electric cars [35]
    GPS-навигаторы, трекеры... [51]
    Linux и не только [3981]
    mini computers и не только... [409]
    News IT, Это интересно, ликбез... [1120]
    Smart TV, UltraHD, приставки, проекторы... [415]
    Smart Watch [268]
    Sound: наушники, плееры, усилители... [618]
    Windows 10... [301]
    Windows 11 [37]
    Погода

  • Метеорадар БРЕСТ
  • Погода в Бресте от www.yr.no

    Яндекс.Погода БРЕСТ

  • Интересные ссылки

    COMPIZOMANIA

    Наш опрос
    Оцените мой сайт
    Всего ответов: 1347
    Статистика
    Анализ веб сайтов

    Яндекс.Метрика

    Рейтинг@Mail.ru Яндекс цитирования

    Russian America Top. Рейтинг ресурсов Русской Америки.

    eXTReMe Tracker

    Правильный CSS!


    Онлайн всего: 13
    Гостей: 13
    Пользователей: 0
    Locations of visitors to this page
    Форма входа
    Главная » 2014 » Февраль » 28 » Новая жизнь старого синтезатора. Часть 1
    06:26
    Новая жизнь старого синтезатора. Часть 1

    Новая жизнь старого синтезатора. Часть 1

    Внешний вид синтезатора

    Несколько лет тому назад умер смертью храбрых мой старый синтезатор Yamaha PSR-GX76. Случилось это что я по ошибке подключил к нему блок питания 24 В вместо положенных 12 В. В таком режиме синтезатор героически проработал несколько минут, после чего случился «пук», сопровождаемый аудиовизуальными спецэффектами и специфическим запахом и синтезатор больше не включался. С тех пор он пылился в коробке и ждал своего часа, который для него, наконец, настал. В нескольких статьях я расскажу как проходило движение от идеи вдохнуть в него новую жизнь до реализации и демонстрации полученных результатов.

    Вскрытие

    Типичный синтезатор состоит из нескольких основных частей: модуль звукогенератора (содержащий обычно микросхему самого звукогенератора и память с сэмплами инструментов), модуль аудио-усилителя и модуль, сканирующий клавиатурную матрицу синтезатора.

    image
    Модуль усилителя звуковой частоты (совмещен с блоком питания)

    image
    Модуль звукогенератора (видна память, сам звукогенератор на обратной стороне)

    Вскрытие показало, что в моем синтезаторе разорвало на части стабилизатор напряжения питания, ответственный за подачу напряжения на микросхемы звукогенератора и сканера клавиатурной матрицы. Увы, замена стабилизатора на новый не принесла результатов. Дальнейший анализ показал, что обе микросхемы, по всей видимости, более не функционируют: присутствуют корректные сигналы сброса и тактового генератора, однако никаких признаков жизни со стороны самих микросхем не наблюдается. Поскольку данные микросхемы были произведены специально для синтезатора компанией Yamaha, то заменить их на новые не представлялось возможным, тем более, что модель уже старая. И тут мне пришла в голову идея вместо того, чтобы отремонтировать старый модуль звукогенератора, выкинуть его и сделать свой собственный, целиком и полностью настраиваемый, с Linux-ом и Wi-Fi'ем.

    Выбор платформы — основы для нового синтезатора

    Загоревшись этой идеей, я начал подбирать платформу, на базе которой будет создаваться новый «мозг» синтезатора. Начал поиски с относительно простых отладочных плат на STM32, так как изначальная идея была в реализации с нуля прошивки, реализующий синтез звуков. Критерием отбора являлось наличие как минимум нескольких десятков мегабайт памяти, слот для SD-карты, аудиовыход и возможность подключения LCD-дисплея. Затем возникла идея использовать что-то помощнее, и я вспомнил про валяющуюся без дела Raspberry Pi. Но она не подошла в итоге по нескольким причинам: отсутствие возможности без танцев с бубном «из коробки» подключить LCD-дисплей, отсутствие достаточного количества GPIO-пинов, сравнительно низкая частота процессора. Но к тому моменту я уже понял, что нужно двигаться в направлении Linux, потому что для него уже написано немало программных синтезаторов, и в частности, особо заинтересовавшие меня LinuxSampler и FluidSynth. Поэтому я продолжил поиски, уже отбросив «маломощные» платы на STM32, и спустя несколько часов непрерывных поисков я нашел ЕГО, и понял — это то, что нужно. Итак, в качестве платформы был выбран и приобретен в Китае мини-компьютер EmbedSky E8 miniPC, в комплекте с 4.3-дюймовым резистивным сенсорным LCD-дисплеем.

    image
    Технические характеристики его представлены в таблице, цена вопроса 48 долларов США:
    Размеры 100х65х20 мм (без учета разъемов)
    Процессор Samsung S5PV210 Cortex-A8 (1 ГГц)
    Оперативная память 512 МБ *
    EMMC Flash-память 4 ГБ
    USB-порты 4 порта USB 2.0, 1 порт USB OTG
    Аудио Вход/выход до 48 КГц, WM8960
    HDMI HDMI 1.3 1080p@30 FPS
    Ethernet 100 Mbit
    Последовательный порт 3 порта 3.3V, один порт со стандартными уровнями RS232
    Часы Поддержка часов реального времени (плюс батарейка)
    Карта памяти Интерфейс для карты памяти SD
    Кнопки 2 программируемые кнопки
    Камера Специальный порт для подключения видеокамеры
    Светодиоды 4 программируемых светодиода
    IrDA Встроенный ИК-приемник
    Дисплей 40-пин FPC для подключения LCD (поддержка резистивного и емкостного экрана)
    50-пиновый разъем 17 линий GPIO, 4-х канальный ADC, SPI, 2 PWM, дополнительный интерфейс SD
    * — объем доступной в системе памяти со стандартным ядром — около 390 Мб (в дальнейшем это ограничение было снято — детали в следующей статье).

    Надо сказать, я был приятно поражен тем объемом документации, который поставляется на двух DVD-дисках вместе с мини-компьютером: на дисках присутствует полная принципиальная схема, документация на каждую используемую микросхему, включая полную документацию на процессор, руководство пользователя (на китайском, но все и так понятно) различные инструкции (например, по установке Ubuntu и даже по разработке с Qt). Кроме того, имеются исходные коды ядра Linux 3.0.8, исходный код системы Android, некоторого ПО от EmbedSky, GCC 4.4.3, исходный код Qt и еще много интересного. На плате предустановлено сразу две ОС — Linux и Android 4.0.4, выбор какую загружать осуществляется через загрузчик U-Boot. Android был мною безжалостно снесен, и вся имеющаяся eMMC Flash-память использована под простой Linux.

    Стоит отметить, что изначально плата настроена на работу с емкостным экраном. Для того, чтобы переключить ее на резистивный интерфейс, необходимо перепаять две перемычки на обратной стороне платы рядом с LCD-разъемом. Собственно, это было первое, что я и сделал с платой после проверки ее работоспособности. Далее выяснилось, что образ Linux, зашитый в eMMC тоже по-умолчанию настроен на использование емкостного датчика. Убил несколько часов, копаясь в конфигах Qt и Tslib, но в итоге тач все-таки заработал как положено.

    С платой поставляется Qt версии 4.5 — довольно старая версия. Я люблю все новое, поэтому для работы над своим проектом, я решил скомпилировать для ARM Qt последней версии 5, а поскольку много времени тратить на разработку тоже не очень хотелось, то дополнительно я решил, что буду все писать на Python, так что мне понадобилась также библиотека PyQt5. Процессор Samsung S5PV210 имеет встроенный 3D-ускоритель с поддержкой OpenGL ES 2.0, но, к сожалению, Samsung предоставляет драйвера для OpenGL только для ОС Android, поэтому использовать Qt 5 с поддержкой OpenGL ES не получилось (попытался скопировать нужные DLL с образа Android, но одна из библиотек имела зависимость от libhardware.so и далее до бесконечности), так что я остановился на LinuxFB в качестве платформы для вывода графики. С компиляцией Qt 5 особых проблем не возникло, за основу я взял конфиг для Raspberry Pi и вырезал все, что связано с OpenGL ES. Затем я собрал Python 2.7.6, используя инструкцию отсюда.

    При сборке для ARM библиотеки PyQt5 возникла проблема — оказалось, что библиотека имеет зависимость от заголовков OpenGL даже если Qt была собрана без поддержки OpenGL. Пришлось пропатчить библиотеку так, чтобы убрать зависимость. Соответствующий патч был опубликован в списке рассылки PyQt. Возможность сборки без OpenGL будет также добавлена в upstream в ближайшее время. После сборки PyQt5 я успешно протестировал на устройстве примеры из поставки Qt, портированные на Python и распространяющиеся в составе PyQt.
    image
    Мой графический интерфейс к LinuxSampler и FluidSynth, написанный на PyQt5

    Далее последовала кросс-компиляция LinuxSampler и его зависимостей: libaudiofile, libfftw, libgig, libsndfile, libsamplerate. В libsndfile была обнаружена интересная фича, названная в коде библиотеки «Ultimate sanity check» — assert на то, что тип off_t имеет размер 8 байт. В моем случае это оказалось не так. К счастью, простое удаление этой "проверки на вменяемость” полностью решило проблему. Интересно, почему она делает эту проверку во время выполнения а, не прерывается на этапе configure — все равно ведь работать не будет, зачем тогда компилировать?

    Дополнительно был скомпилирован JACK в качестве драйвера вывода звука для LinuxSampler. Для него потребовались патчи arm-timestamp.patch и atomic.patch отсюда. Также я компилировал с такими флагами для GCC, чтобы включить поддержку расширений NEON для ARM: -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ffast-math -funsafe-math-optimizations -O3.

    На данной стадии у меня работал JACK и LinuxSampler, через который я мог проигрывать MIDI-файлы с помощью jack-smf-player. Вместе с графическим интерфейсом (см. выше) был написан питоновский модуль для работы с LinuxSampler по протоколу LSCP, а также с помощью SWIG сгенерирован биндинг для libgig, которая позволяет загружать GIG-файлы, и, в частности, выяснить какие внутри есть инструменты, чтобы их можно было выбрать из списка в интерфейсе на Qt. Ближе к завершению проекта эти наработки, а также весь связанный с проектом оригинальный исходный код будет выложен на GitHub для всех желающих.

    В следующей статье я расскажу:
    • Как устроена клавиатурная матрица синтезатора
    • Как я менял сгоревший МК сканера клавиатуры на ATmega, про прошивку прямо с платы, и как микроконтроллер общается с LinuxSampler
    • Как я делал ядро с поддержкой Realtime Preemption на основе стокового и как решались многочисленные возникшие проблемы
    • Как проходило общение с техподдержкой фирмы EmbedSky Tech
    • Как удалось снизить задержку (latency) звука при нажатии на клавиши синтезатора с нескольких десятков до нескольких миллисекунд


    Все описанные в этой и следующей статье манипуляции с незначительными отличиями можно проделать также и с использованием других подходящих ARM-платформ включая Raspberry Pi, для изготовления своего собственного универсального синтезатора из старой MIDI-клавиатуры. Из преимуществ последней можно отметить наличие более мощного аппаратного FPU и возможность сборки Qt 5 с поддержкой OpenGL ES 2.0.


    http://habrahabr.ru/post/214147/
    Категория: Своими руками | Просмотров: 696 | Добавил: laptop | Рейтинг: 5.0/1
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк - единственный из зверей, который может пойти в бой на более сильного противника.
    Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...

    Праздники сегодня

    Поиск
    Календарь
    Архив записей
    Друзья сайта
  • Официальный блог
  • JEEP - the best! Mercedes - the best! Автомобильный портал города Бреста: технические характеристики с фото, авторынок, автоспорт...
    Наша кнопка
    IT новости с моего лаптопа...

    Внимание!
    Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
    Copyright Valeri N.Kravchuk © 2007-2024