Pull to refresh
  • by relevance
  • by date
  • by rating

Чудо селекции — Traktor + Ableton

Sound
Пора выполнять обещания :)

Итак, что мы имеем? Имеем две софтины, обе признанные лидеры индустрии, но каждой чего-нибудь не хватает для счастья. У Ableton не совсем удобная транспортная часть, зато почти полная свобода действия с маршрутизацией аудио и подключаемыми VST-эффектами. У Traktor же наоборот: очень удобная и интуитивно понятная панель управления транспортом, а вот с эффектами напряг. Встроенные, конечно, довольно неплохи по-своему, но их хватает далеко не для всех нужд. Еще для Аблтона треки надо особым образом готовить, а это не всяким по душе, к тому же, иные считают что сводить в Аблтоне слишком просто и не труъ. :)
Напрашивается мысль — надо их как-то скрестить. Поднапряжем мозги — Трактор позволяет раскидать вывод аудио на разные каналы, а Аблтон позволяет собрать аудио с разных входов. Уже что-то.
Читать дальше →
Total votes 25: ↑21 and ↓4 +17
Views 17K
Comments 52

Как вернуть качественный звук в Windows 7 — побитовый вывод, аппаратные эффекты (EAX и пр.)

Sound
Sandbox
Хочу поделиться опытом по теме звука в Windows 7.
На самом деле, всё не так плохо, как сначала кажется, и я вам сейчас это продемонстрирую.
Читать дальше →
Total votes 230: ↑220 and ↓10 +210
Views 265K
Comments 190

Nested Diagnostic Context, log4cpp и Boost asio

Programming *C++ *
В данной статье я хочу показать, как можно использовать NDC в асинхронных операциях на примере log4cpp и boost.asio

Nested Diagnostic Context (NDC) — контекст, который добавляется в лог. Этот контекст может использоваться для дальнейшей фильтрации лог файла. Особенно это полезно, если производится несколько операций, и эти операции связаны между собой, например: выборка данных из БД, обработка, упаковка в сообщение, передача сообщения по сети клиенту и т.д… Если таких операций много и происходят они параллельно (или асинхронно), то по логу иногда бывает тяжело восстановить последовательность операций. Для этого и используется NDC: вначале мы создаем уникальный(псевдо) идентификатор, и затем помечаем каждую операцию логгирования в нашей цепочке этим идентификатором.

В теории все хорошо: генерируем уникальный ID и передаем его в логгер, однако на практике возникает несколько проблем:
  • Реализация NDC в библиотеке log4cpp основана на механизме Thread Local Storage (Thread Specific Ptr), таким образом NDC хранится только для одного потока. Соответственно встает вопрос передачи NDC между потоками
  • Из первого пункта также вытекает следующая проблема: асинхронные операции, например в boost::asio::io_service. Так как asio позволяет в одном (или нескольких) потоках выполнять множество асинхронных операций, то из-за особенностей log4cpp мы не сможем увидеть в логе правильный NDC. Нужен специальный механизм, который обеспечит корректность NDC в асинхронных операциях asio


решением второй проблемы мы и займемся
Total votes 6: ↑6 and ↓0 +6
Views 5.4K
Comments 3

Защищенное TLS-соединение с использованием Boost.Asio и OpenSSL под Windows

C++ *
Tutorial

Введение


Однажды мне потребовалось создать защищенный канал связи между своим сервером и своим приложением. Я помнил, что в документации к Boost Asio упоминалось, что он может работать с защищенными соединениями, используя OpenSSL. Я начал искать информацию по этой теме, но, увы, мало что нашел, тем более под Windows. Так что теперь, разобравшись с этим вопросом, я решил написать эту инструкцию, чтобы другим людям было проще разобраться.
Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Views 44K
Comments 8

Использование Boost.Asio с Coroutines TS

C++ *
Sandbox

Введение


Использование функций обратного вызова (callback) — популярный подход к построению сетевых приложений с использованием библиотеки Boost.Asio (и не только ее). Проблемой этого подхода является ухудшение читабельности и поддерживаемости кода при усложнении логики протокола обмена данными [1].


Как альтернатива коллбекам, сопрограммы (coroutines) можно применить для написания асинхронного кода, уровень читабельности которого будет близок к читабельности синхронного кода. Boost.Asio поддерживает такой подход, предоставляя возможность использования библиотеки Boost.Coroutine для обработки коллбеков.


Boost.Coroutine реализует сопрограммы с помощью сохранения контекста выполнения текущего потока. Этот подход конкурировал за включение в следующую редакцию стандарта C++ с предложением от Microsoft, которое вводит новые ключевые слова co_return, co_yield и co_await. Предложение Microsoft получило статус Technical Specification (TS) [2] и имеет высокие шансы стать стандартом.


Статья [3] демонстрирует использование Boost.Asio с Coroutines TS и boost::future. В своей статье я хочу показать, как можно обойтись без boost::future. Мы возьмем за основу пример асинхронного TCP эхо-сервера из Boost.Asio и будем его модифицировать, используя сопрограммы из Coroutines TS.


Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 13K
Comments 16

Реверс-инжиниринг «Казаков 3», часть сетевая: создаём локальный сервер

C++ *Game development *Reverse engineering *


Недавно в разговоре с коллегами обсуждали различные игры жанра RTS, и я задумался, почему же релиз третьих «Казаков» прошёл мимо меня. Пару минут и один поисковый запрос спустя я вспомнил — помимо крайне сырого раннего релиза, реинкарнация этой классической стратегии отличилась невозможностью многопользовательской игры без постоянного соединения с официальным сервером. Многочисленные просьбы игроков «добавить LAN» на форумах разной степени свежести намекают, что изменений ждать не стоит.

Что ж, если гора не идёт к Магомету…
то он достаёт Wireshark
Total votes 38: ↑38 and ↓0 +38
Views 14K
Comments 7

Зачем нужно ASIO для аудиофилов?

Soundpal corporate blog Sound
Каждый, кто сталкивался с вопросом о качественном воспроизведении звука рано или поздно встречается с аббревиатурой ASIO, как важной и необходимой опцией.



Что это и в чем практический смысл?
Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Views 198K
Comments 46

Приятное с полезным или разработка под ASIO на C++

Programming *C++ *Sound
Tutorial

Будучи потенциальным программистом и любителем электрогитар, я не мог остаться в стороне от разработки музыкального ПО. Все кто когда-либо пытался подключить электрогитару к компьютеру на ОС Windows, используя какой-либо гитарный процессор, знают, что зачастую для этих целей требуется наличие интерфейса ASIO (Возможно и другие, но ASIO наиболее популярен). Это связано с тем, что для обработки звукового ввода и вывода тратится значительное время, и, как следствие, при игре на инструменте слышно неприятную задержку, которая весьма сильно затрудняет игру. ASIO позволяет пропустить этап микширования звука при его выводе и, соответственно, значительно уменьшить задержку. Подробнее об этом здесь.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 9.4K
Comments 26

VSTi-плагин ASIO-хоста для подключения входа дополнительного ASIO-драйвера в DAW

Programming *Sound

Столкнулся я как-то с ситуацией, когда, при наличии основной звуковой карты со своим ASIO-драйвером, необходимо было в DAW подключить USB-микрофон со своим ASIO-драйвером. А DAW не поддерживает подключение двух ASIO-драйверов одновременно. Поиском наткнулся на VST-плагин "VST interfaced ASIO-Host", написанный на Delphi. К сожалению, хоть и плагин увиделся через jBridge, нормально он так и не заработал. Таким образом, пришлось писать подобный плагин самому. В итоге, за 10 дней был написан плагин ASIOInput с открытым исходным кодом. В этой статье я расскажу о некоторых особенностях его разработки и архитектуры.

Читать далее
Total votes 8: ↑8 and ↓0 +8
Views 2.2K
Comments 6