{"id":50947523,"url":"https://github.com/agushaos/wha","last_synced_at":"2026-06-17T22:00:14.668Z","repository":{"id":361500889,"uuid":"1245719646","full_name":"AgushaOS/WHA","owner":"AgushaOS","description":"Репозиторий проекта WHA","archived":false,"fork":false,"pushed_at":"2026-06-17T20:00:09.000Z","size":255,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T22:00:12.010Z","etag":null,"topics":["audio","audiocodec","dsp","wavelet"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AgushaOS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-21T13:44:05.000Z","updated_at":"2026-06-15T17:33:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AgushaOS/WHA","commit_stats":null,"previous_names":["agushaos/wha"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/AgushaOS/WHA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AgushaOS%2FWHA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AgushaOS%2FWHA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AgushaOS%2FWHA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AgushaOS%2FWHA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AgushaOS","download_url":"https://codeload.github.com/AgushaOS/WHA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AgushaOS%2FWHA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34466929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audiocodec","dsp","wavelet"],"created_at":"2026-06-17T22:00:13.338Z","updated_at":"2026-06-17T22:00:14.648Z","avatar_url":"https://github.com/AgushaOS.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wavelet Hierarchical Audio\n\nWHA (Wavelet Hierarchical Audio, Вейвлет-иерархическое Аудио) -- это низколатентный высокопроизводительный кадровый аудиокодек, основанный на вейвлет-пакетном разложении сигнала. \n\n## Характеристики кодека\n\n- Алгоритмическая задержка: ~22 мс на блок\n- Скорость кодирования превышает MP3 LIB3LAME в ~5.3 раза, AAC-LC в ~5.3 раз, Opus в ~4 раза\n- Скорость декодирования сравнима с MP3\n- Прозрачное качество достигается на битрейтах 160 - 192 кбит/с для большинства треков\n- Перекрытие между блоками: ~4.56%\n- Поддержка: 44.1 кГц, 88.2 кГц\n- Плавное затухание частот выше 16 кГц с сохранением формы спектра\n- Стерео, моно\n- Работает в режиме CVBR \n\n## Описание алгоритма\n\nВ аудиокодеке используется вейвлет-пакетное разложение (WPT), вместо модифицированного косинусного преобразования (MDCT).\n\nТакже вместо фильтр-банки используется лифтинг схема с длиной предсказания и обновления 6 и 4 точки соответственно, что позволяет достичь быстрого разложения сигнала на субполосы.\n\nПосле упорядочивания по Грэй-коду (Gray-code) и степенного сжатия (power-law), происходит кодирование совместного стерео (Joint Stereo), где для каждой пары субполос из разных каналов выбирается LR/MS/IS.\n\nВ качестве психоакустики была использована система приоритетно-перцептивного взвешивания энергии субполосы, что позволяет достаточно точно и быстро распределять биты.\n\nШаг квантования на субполосу определяется из количества выданных ей битов, что позволяет почти всегда упаковывать блок в выданный бит-бюджет.\n\nНа уже квантованные значения применяется декорреляционная и энтропийная системы. Для первых 2-х субполос подбираются наилучшие фиксированными LPC предикторы, для оставшихся они по умолчанию берутся равные 0.\n\nВ качестве энтропийного кодировщика используются райс-коды (Rice code) с адаптивным k на субполосу.\n\nСистема бит-резервуара между блоками устроена по принципу \"выигрыш с предыдущего переместить на нынешний\" с ограничителем в не более 20% от заданного бит-бюджета.\n\nВ качестве пост-обработки используется TPDF дизеринг для субполос, имеющих бит на сэмпл меньшее либо равное 3.\n\n## Сохранение ВЧ (частот \u003e 16 кГц)\n\nБлагодаря неидеальной частотной локализации фильтров и перекрытию субполос, что в АЧХ вейвлета направлены с ВЧ-\u003eНЧ/СЧ, высокочастотная энергия частично распределяется в соседние низшие диапазоны.\n\nЭто позволяет сохранять форму спектра и временную структуру сигнала в высокочастотной области, обеспечивая более плавное затухание высоких частот вместо жёсткого обрезания (brick-wall), характерного для традиционных кодеков, даже при частичном подавлении или низком битрейте.\n\nДиапазон сохранения энергии ВЧ:\n- на 192 кбит/с: 25% - 97%\n- на 160 кбит/с: 23% - 74%\n- на 128 кбит/с: 20% - 60%\n\n## Перцептивная модель\n\nКодек оптимизирован на сохранение:\n- спектральной огибающей сигнала\n- транзиентной структуры\n- высокочастотной текстуры без резких cutoff-артефактов\n- быстрое сжатие с хорошим качеством\n\n## Обработка транзиентов и артефакты пост/пре эха\n\nБлагодаря вейвлет-пакетному разложению (WPT), транзиенты локализируются естественным образом внутри временно-частотных субполос, без необходимости отдельных детекций. \n\nАртефакты пост-эха и пре-эха не были зафиксированы на тестовых сигналах с резкими атаками (включая хлопки).\n\n## Межблочная устойчивость\n\nДля декодирования текущего блока требуется только небольшая часть данных предыдущего блока (~4.56%), используемая для коррекции граничных эффектов при восстановлении сигнала.\n\nОсновная часть блока декодируется независимо, что позволяет выполнять потоковое воспроизведение с низкой алгоритмической задержкой (~22 мс) и минимальным буфером (не более одного блока).\n\nТакая схема обеспечивает локальную межблочную связность без полной зависимости от предыдущих блоков, что ограничивает распространение ошибок и сохраняет стабильность декодирования при частичной потере данных.\n\n## Устойчивость к потере данных\n\nПотеря отдельных блоков локализуется в пределах текущего фрейма и не приводит к распространению ошибки на последующие блоки.\n\n## Масштабируемость\n\nКодек поддерживает работу с произвольным целевым битрейтом, задаваемым при инициализации, начиная от 48 кбит/с.\n\nПоддерживаемые частоты дискретизации: 44.1 кГц и 88.2 кГц.\n\n## Поведение при снижении битрейта\n\nПри снижении битрейта качество деградирует постепенно без резких пороговых артефактов.\n\nОсновной характер искажений:\n- ослабление высокочастотной энергии\n- упрощение шумовой составляющей\n- сохранение временной структуры сигнала\n- сохранение транзиентной структуры сигнала\n- возможное искажение чистых синусоидальных сигналов \n\n## Известные артефакты\n\nПри экстремально низких битрейтах (ниже 128 кбит/с) могут наблюдаться:\n- упрощение шумовой текстуры\n- частичная потеря высокочастотной детализации\n- смазывание инструментов\n\n## Ограничения \n\nКодек плохо справляется с битрейтами ниже 128 кбит/с для стерео аудио файла, а также наблюдается снижение эффективности при работе с частотой дискретизации равной 48 кГц. \n\n## Асимптотика алгоритма\n\nБлагодаря неглубокому вейвлет-пакетному разложению (WPT) асимптотика алгоритма в пределах O(N).\n\nСложность кодирования и декодирования линейно зависит от количество сэмплов в сигнале, без итеративных этапов оптимизации.\n\n# Результаты ABX тестирований\n\nРезультаты ABX тестирования проводились используя наушники DT770-Pro 32 Ohm и плеер FiiO JM21 на тихой и средней громкостях. \n\nУчаствовало 5 человек возрастом от 16 до 17 лет, в числе которых были 2 музыканта. \n\nБыла использована 5 балльная шкала:\n- 1 -- ужасный результат\n- 2 -- плохой результат\n- 3 -- терпимый результат\n- 4 -- нормальный результат\n- 4+ -- хороший результат\n- 5- -- почти прозрачный результат\n- 5 -- прозрачный результат\n\nРезультаты тестирований:\n- 192 кбит/с: 5- (1 человек) и 5 (4 человека). Прозрачно для большинства треков (5) и почти-прозрачно для крайних случаев (5-)\n- 160 кбит/с: 5- (2 человека) и 5 (3 человека). Прозрачно для большинства треков (5) и почти-прозрачно для крайних случаев и сложной стерео сцены (5-)\n- 128 кбит/с: 4+ (3 человека) и 5- (2 человека). Хорошее (4+) или почти прозрачное (5-) качество для большинства треков\n\nПримечание: результаты представляют собой неформальную ABX-оценку и не соответствуют стандартизированному тестированию ITU-R BS.1116.\n\n# Как запускать кодек\n\nВ файлах есть скрипт setup.sh -- он отвечает за компилирование кодека, его бинарника кодирования (code) и его бинарника декодирования (decode). И\n\nнтерфейсы функций следующие:\n- ./code \"example.wav\" [bitrate] (на выходе файл фПормата .wha)\n- ./decode \"example.wha\" \"output.wav\"\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagushaos%2Fwha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagushaos%2Fwha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagushaos%2Fwha/lists"}