воскресенье, 28 сентября 2008 г.

Статья: NeoFreerunner overview

Недавно привезли NeoFreerunner - opensource/openhardware-смартфон. По этому поводу решил написать небольшой обзор по этому устройству. Вот он: http://highcat.by.ru/freerunner_overview/freerunner.html

вторник, 12 февраля 2008 г.

FLTK2: Win, Lin & Mac

Выкладываю скриншоты одной своей программы, скомпилированной под 3 популярные платформы. Программа рисует забавные узоры по формуле, которую можно вписать во время выполнения. Написана с использованием GUI библиотеки FLTK2: www.fltk.org. FLTK (новая версия FLTK2) отличается небольшим размером, хорошим дизайном, кроссплатформенностью и высокой производительностью. Виджеты рисуются нативными средствами каждой платформы - WinAPI/Xlib/Carbon, то есть скорость перерисовки максимальна.

Вот такие получились скриншоты:

Linux:

Mac OS X:

Windows:


Вторая версия библиотеки - FLTK2 - фактически ещё в стадии разработки. Однако, ей уже вполне можно пользоваться. Версия под Мак отстаёт от остальных - на на картинке можно увидеть баг - неправильный размер кнопки. Лично я при переходе на вторую версию обнаружил, что многие моменты, которые мне казались неудобными, были переделаны как раз так, как мне хотелось =)

понедельник, 7 января 2008 г.

ASIO: All we need is Music!

Итак. Если мы хотим получить музыку в реальном времени, чтобы заставить играть собственноручно написанный гениальный программный синтезатор от клавиатуры, midi-клавиатуры, midi-диджериду, терменвокса или линейки со звукоснимателем, подключенным к lpt-порту, - простыми средствами нам не обойтись. Нужно быстрое время отклика, т.е. низкая латентность.

Под Lin у нас есть Jack. And it's amazing. 1.33 милисекунды задержки на встроенной звуковой карте получаются без проблем.
У кого нет Lin, придётся использовать Win.Под Win нам придётся использовать ASIO. На Portaudio пока забъём. (по определённым причинам)

.. Пытался скомпилировать стандартный пример из ASIO SDK. Хм. С помощью GCC + MinGW.
Хм. =). Даже собрался. Даже запускается. И виснет.
GCC + MS Platform SDK. Виснет.
MSVC + MS Platform SDK. Работает.

Оказывается, ASIO работает только с программами-клиентами, собранными MSVC, т.к. используется только MSVC'шная схема вызовов (т.н. thiscall в C++). Другие компиляторы пытаются выполнить вызовы по своей схеме, и в результате приложение падает/виснет.
В Portaudio, которая поддерживает ASIO, эту проблему решили с помощью специальной обёртки: http://www.audiomulch.com/~rossb/code/calliasio/ - вручную эмулируются вызовы MSVC, ассемблерными вставками.
Xм, я в сомнениях, будет ли эта обёртка обновляться постоянно, и будет ли работать под x86_64. Не будем связываться с ассемблером. Будем компилировать MSVC.

Ах да. Это же известная проблема с C++ под Win. Бинарный интерфейс (ABI) для C открыт, С-шные библиотеки собранные MSVC можно слинковать с любым кодом. Для C++ - закрыт (проприетарен). Поэтому из-за чужих бинарных C++-библиотек приходится собирать свой проект компилятором от Майкрософт.