Обновить
256K+

C++ *

Типизированный язык программирования

463,21
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Mix Hub в свой VST3-плагин: анализ конфликтов между дорожками

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели907

Привет, Хабр! Меня зовут Артур Валиев. Я продолжаю делать свой VST3-плагин Mix Teacher AI.

В прошлый раз я рассказывал про идею плагина: поставить его на дорожку, посмотреть уровни, пики, RMS, примерный LUFS, частотные зоны и получить простую подсказку человеческим языком.

Но довольно быстро стало понятно, что анализировать только одну дорожку мало.

Потому что в сведении часто проблема не в одной дорожке.

Кик сам по себе нормальный.
Бас сам по себе нормальный.
Вокал сам по себе нормальный.
Барабаны вроде тоже нормальные.

А вместе всё почему-то не звучит.

И вот тут начинается самая интересная часть: конфликты между дорожками.

Читать далее

Новости

OSDEV: Itanium ABI часть 1: Array Operator new Cookies

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.4K

Приветствую!

Код тут

Реализация new cookies в соответствии с C++ Itanium ABI зависит только от osdev-libstdc

Погнали!

Mix Teacher: как я сделал VST3-плагин-помощник для сведения

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели8K

Привет, Хабр!

Я веду свой блог и обычно пишу про кодеки и про удаленный доступ. Эта статья — немного особенная: она не только как разработчика, но и как музыканта.

Сейчас с нейросетями стало проще писать решения. Ну, «проще» - это громко сказано. Скорее, стало проще быстрее доходить до прототипа, проверять идеи, не бояться больших кодовых баз и собирать вокруг своей боли рабочий инструмент. Но сама боль от этого никуда не исчезает.

Теперь рассказываю от имени электронного продюсера:

У меня много лет была одна постоянная проблема: цифровая громкость.

Когда я был моложе и писал музыку во FL Studio, я часто задавался вопросом: почему у меня во Fruity Loops звук такой жирный, а в других DAW — какой-то другой? Почему одни сэмплы сразу звучат «мощно», а другие теряются? Почему пресет в синтезаторе вроде бы крутой, но в миксе всё разваливается?

Со временем я понял неприятную вещь: очень часто дело не в магии DAW, не в секретном плагине и не в «аналоговом тепле». Дело в громкости, gain staging и клиппинге. В перегрузе. В том, что сигнал уже на входе почти упирается в цифровой потолок.
Сэмплы, которые мы скачиваем, часто нормализованы почти в 0 dBFS: -0.1, -0.05, иногда вообще около -0.01. Пресеты в синтезаторах могут быть перегружены ещё до того, как вы повесили первый EQ. Потом сверху добавляется компрессия, сатурация, лимитер, ещё один «улучшайзер», и внезапно микс вроде громкий, но не звучит.

Я устал постоянно вручную следить за уровнями, пиками, RMS, динамикой и частотными зонами. Поэтому начал писать свой плагин — Mix Teacher AI.

Читать далее

Паттерны доступа к данным, которые выбесят ваш процессор

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели9.2K

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

Читать далее

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть-1 — Основы

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели7.1K

Это начало цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Я расскажу про то, как пришел к созданию этой библиотеки, а также постараюсь максимально понятно и просто описать общие принципы её работы и архитектуру.

Цель всего цикла материалов — дать представление о том, как устроены подобные проекты, начиная от открытия контекстного окна и управления его состоянием, заканчивая рисованием графических примитивов. Надеюсь, что весь цикл материалов окажется полезным как для тех, кто начинает свой путь в разработке приложений с графическим интерфейсом, так и для опытных разработчиков.

Читать далее

Быстрые и компактные структуры данных для RMQ

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели5.8K

Range minimum query – это классическая задача, в этой заметке решаем статический вариант. Есть массив A[0..n-1]; нужно построить структуру данных, которая умеет быстро находить минимум и его позицию на произвольном интервале [l, r). Я собрал несколько практических наработок и сделал из них два очень компактных и быстрых варианта:

вариант с 1.05n дополнительных бит, которому иногда нужно обращаться к исходному массиву;

вариант с 2.1n дополнительных бит, который отвечает на запросы без доступа к исходному массиву.

Обе реализации очень быстры на практике: на случайных запросах по массиву размера 10^9 элементов они работают в среднем за 20–30 нс на запрос.

Для ориентира: туториал Codeforces по блочному RMQ описывает структуру, которая отрабатывает запрос за 100 нс для массивов длины 10^7 с 32-битными целыми числами, при этом используя 32n дополнительных бит.

Читать далее

Как начать программировать на C++: обзор бесплатной части курса

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.6K

C++ — один из самых востребованных языков в мире: на нём пишут игры, операционные системы, браузеры, высоконагруженные сервисы и даже микрокод для медицинских устройств. Язык входит в тройку самых популярных по индексу TIOBE, а создать «убийцу C++» пока не удалось никому — попытки были. При этом язык это непростой — с нуля к нему бывает сложно подступиться.

В Яндекс Практикуме у курса «Разработчик C++» есть бесплатная вводная часть — она помогает плавно войти в профессию и понять, подходит ли вам этот язык и формат обучения. Помимо изучения теории вас ждёт очень много практики: будете работать в интерактивном тренажёре, решать задачи и делать первые шаги в программировании. Рассказываем подробнее, что внутри.

Читать далее

Худший язык программирования всех времён /s

Уровень сложностиПростой
Время на прочтение28 мин
Охват и читатели41K

Есть на ютубе видео на пятьдесят минут с хвостиком, с гордым названием «худший язык программирования всех времён». Не удивлюсь, если вы подумаете, что оно про C++. Оно действительно про плюсы и я его смотрел где-то с полгода назад, ну как смотрел... пробежался на x2 с перемотками, мало ли что обиженный джун там наговорил, но добрый @alyokhinопять про него напомнил, и теперь я его посмотрел полностью. И знаете что самое неприятное? Если убрать интонацию обиженного джуна и оставить только аргументы, то процентов семьдесят там будет правды. Не «спорно», не «зависит от контекста», а буквально правда, которую любой разработчик, проведший с языком пару лет, подтвердит вам не задумываясь.

Парадокс в том, что это видео сняли про язык, на котором написана половина мира вокруг нас. Браузер, в котором вы это читаете, движок игры, куда уж без игр в моих статьях, в которую вы вчера играли, прошивка железа, на котором всё это крутится, и компилятор, которым собрали и браузер, и движок, и прошивку.

Жанр «почему C++ ужасен» на Хабре выжжен дотла и про Init-зоопарк, перегруженный static, vector названный неправильно, std::move который не move, супер медленный regex, медленный unordered_map вы всё читали раз по двадцать. Сам по себе список этих болей давно не новость, от себя добавлю, что все жалобы и примеры ниже - это следствия одного решения, и я к нему приду. Или открывайте спойлеры, там скрыта история, почему каждая часть языка получалась так, как получалась.

С++ is the best ever programming language

Direct 2D #14. Разбиение на блоки и сжатие. Оптимизация текстур

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.6K

Здравствуйте! Продолжается серия статей по Direct2D. Теперь мы рассмотрели довольно интересную тему - оптимизацию размеров текстур и тому подобное

Читать далее

Как «ужать» мегаполис до размеров iPhone 4

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели16K

Помните времена, когда трава была зеленее, мобильный интернет помегабайтным, а Apple осваивала непаханые поля смартфоно-игровых ферм? Начало 2010-х было очень интересным временем, когда мобильные студии создавали целые новые жанры, пытались перенести или адаптировать старые концепции и игры, попутно решая задачи, от которой у десктопного разработчика начинал дергаться глаз. Вот и EA решили взять культовые франшизы SimCity и The Sims со всеми их терабайтами ассетов, сложнейшей симуляцией дорог, пробок и отдельных симов, и попробовать затолкнуть это в карман.

В кармане у пользователя тогда лежал условный iPhone 4 или 5 с уже тогда куцым бюджетом оперативной памяти в районе 100–300 МБ на всё про всё, но айфоновладельцы были "платящей" аудиторией, поэтому игровое подразделение метило в основном в них. Как не превратить смартфон в обогреватель и словить ООМ в первые минуты игры? Выкинуть честную симуляцию на помойку, превратить симов в конечные автоматы, а город сделать хитрой иллюзией из текстурных атласов и таймеров. Раскажу немного как устроены SimCity BuildIt и The Sims Mobile с инженерной изнанки, кода почти не будет, да он и не нужен тут для понимания, а еще будет немного грустинки по российскому подразделению EA, и фотки с закрытия офиса в 2016.

Читать далее

Direct2D #13. Command Lists. Запись графических команд

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.9K

Ну что сказать… Продолжаем! Рассматриваем очередную полезную тему - Command Lists - и, как обычно, с объяснениями

Читать далее

Как уместить 26 типов виджетов, RTL и веб‑сокет в килобайты флеша ESP32 — и при чём тут ИИ

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели10K

Каждый мой проект на ESP32 заканчивался одинаково: микроконтроллер готов, датчики читаются, реле щёлкают — а дальше надо руками писать HTML, CSS, JS и протокол поверх веб‑сокета, чтобы увидеть пару графиков в браузере. На третий раз я решил, что хватит, и сделал библиотеку RisalDash: интерфейс описывается на C++ в несколько строк, а весь фронтенд и протокол генерируются сами и отдаются самим контроллером.

Читать далее

Что лучше — C++ или C#?

Уровень сложностиПростой
Время на прочтение39 мин
Охват и читатели10K

Самым фатальным недостатком C++ является то, что он скоро умрёт. То, что C++ скоро умрёт — это истина, проверенная временем. 30 лет назад все говорили, что C++ скоро умрёт, потому что появилась Java. 20 лет назад ему пророчили скорую смерть, потому что к Джаве присоединился C#. 10 лет назад C++ должен был умереть, потому что появился Rust. 3 года назад его снова принялись хоронить, когда АНБ выпустило спорную рекомендацию «переходить на memory-safe языки» везде, где это возможно, и я думаю, что ещё через 30 лет тоже все будут говорить, что C++ скоро умрёт.

Откуда столько пессимизма? Считается, что C++ неудобен в использовании, и из-за неочевидных правил языка на нём слишком легко написать опасный и забагованный код. В этой статье я сравню C++ и C# в тех аспектах, которые определяют простоту и удобство использования — насколько легко и приятно писать на этих языках, и какой из них вызывает наименьшее количество боли.

Я не собираюсь ничего набрасывать на вентилятор или разводить холивар, а просто хочу объективно и беспристрастно ответить, наконец, на вечный вопрос: что же всё-таки лучше — C++ или C#?

Объективное и беспристрастное сравнение

Ближайшие события

Симулятор логических схем с программируемыми гейтами на Lua

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5K

Всем привет, недавно я написал симулятор логических гейтов или вентилей на С++ (sfml для графики + sol2 для интеграции луа скриптов), которые можно программировать на луа таким образом: ```

Читать далее

C3D Collision Detection: быстрое выявление коллизий в 3D-сценах

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.1K

Роман Садовников, к.т.н., программист C3D Solver, C3D Labs, рассказывает о нововведениях в модуле C3D Collision Detection.

Модуль C3D Collision Detection применяется в различных отраслях, включая авиационную и автомобильную промышленность, где он служит для управления движением беспилотных транспортных средств (рис. 1). В робототехнике модуль обеспечивает безопасное перемещение станков ЧПУ в динамичной среде, автоматизацию упаковки и предотвращение столкновений с людьми. В игровых и медицинских приложениях модуль отвечает за обработку столкновений виртуальных объектов и используется в тренажерах для обучения проведению операций. В строительстве и логистике C3D Collision Detection помогает контролировать зазоры, реализовывать 3D-проектирование и автоматизировать строительные процессы.

Читать далее

Отрежьте мне миллиард символов: как C++20, string_view и шаблонный ад могут скрывать баг годами

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели11K

Вы наверно знаете что высший пилотаж он же Высокий Слог С++ это шаблоны и метапрограммирование. Вы обязательно должны нагородить кучу несовместимых типов и самозабвенно искать для них универсальный алгоритм.

Вот очередная статья о том что метапрограммирование и код с шаблонами не такие уж и плохие.

Но я хочу рассказать вам историю одного детективного расследования в недрах крупного OpenBMC-проекта (экосистема серверных платформ swtSyst). Это история о том, как безудержное желание перенести всё в compile-time (constexpr), помноженное на ультрасовременный синтаксис C++20, породило идеальный «молчаливый баг» (silent failure). Он мог бы годами жить в продакшене, успешно компилировался, не выдавал ни одного ворнинга, но полностью ломал логику работы приложения.

Если вы любите метапрограммирование, шаблоны, операторы свёртки (fold expressions) и тонкости работы с памятью в C++ — устраивайтесь поудобнее. Мы отправляемся в шаблонный ад.

Читать далее

Direct 2D #12. Слои и эффекты

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели10K

Здравствуйте! Продолжается серия статей по Direct 2D. В них были рассмотрены такие темы, как "Слои" и "Эффект", а также в конце приведён список всех тем по Direct 2D, которые я планирую рассмотреть

Читать далее

Делаем свое контекстное меню для полей ввода в Qt на мобильных устройствах

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.5K

Не так давно возникла задача в Qt QML проекте обработать вставку изображения в поле ввода. Понимаю, что не каждый день приходится писать кроссплатформенные клиенты для настольных и мобильных систем, но если у тебя была похожая задача, то данная статья может быть тебе интересна.

Читать далее

Как я свертки ускорял

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

После написания статьи про NormIs-1 я решил углубиться в тему оптимизации модели. Архитектура была неплохой и показала адекватные результаты на метриках интеллекта, но скорость сильно проседала. Проблема была в Depthwise Conv, а именно - множестве обращений к памяти. Между блоком внимания и FFN стоял небольшой блок сверток и тормозил все вычисления. Именно его я и решил ускорить.

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

Нет, все будет 'проще' - мелкая CNN + кастомное MLX-ядро для инференса + бенчмарки скорости

Читать далее

Шаблоны C++ как инструмент архитектуры: compile-time dispatch, type traits и type erasure

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

Всех приветствую! Я неоднократно встречал разработчиков, которые говорили, что метапрограммирование — это моветон, а шаблоны только усложняют код. Я понимаю, откуда берётся такое мнение потому, что при неаккуратном использовании шаблоны действительно могут сделать код сложным и тяжёлым для чтения.

Но, на мой взгляд, проблема не в самом инструменте, а в том, как именно его применяют.

Шаблоны в C++ - это не только std::vector и универсальные функции. В серьёзном C++ они часто используются как архитектурный механизм, позволяют переносить часть решений из runtime в compile-time, задавать контракты на уровне типов, собирать поведение из политик и писать обобщённый код без лишней runtime-стоимости.

Читать далее
1
23 ...