LC3plus — это аудиокодек, а не обычный пользовательский формат наподобие MP3, который достаточно дважды щёлкнуть в проводнике и открыть в любом редакторе. Практическая работа с ним обычно состоит из нескольких этапов: определить, что именно находится в файле, декодировать сжатый битовый поток в PCM/WAV, выполнить монтаж или обработку звука, сохранить мастер-копию и при необходимости снова закодировать результат. Такой порядок особенно важен для файлов из эталонного пакета ETSI: используемый там двоичный формат предназначен только для тестирования, не является универсальным контейнером, не стандартизирован и может меняться.
Ниже разобраны три реально подтверждённых рабочих направления. В Windows основной сценарий построен вокруг эталонного декодера LC3plus и АудиоМАСТЕРа: кодек переводит поток в WAV, а редактор отвечает за визуальную обрезку, обработку и экспорт. На macOS и Unix-системах доступна библиотека Google liblc3 с утилитами elc3 и dlc3. Для автоматизации подходит FFmpeg, но его LC3plus-возможности ограничены тем, что реализовано в liblc3, поэтому он не заменяет текущий полный reference package ETSI в режимах Lossless и 1,25 мс.
Что такое LC3plus и чем он отличается от LC3
LC3plus расшифровывается как Low Complexity Communication Codec Plus. Спецификация опубликована ETSI под номером TS 103 634. Кодек рассчитан на речь и музыку, низкую задержку, устойчивость к потерям пакетов и работу при разных частотах дискретизации и битрейтах. В актуальном эталонном программном пакете перечислены частоты 8, 16, 24, 32, 44,1, 48 и 96 кГц, а 192 кГц предусмотрены для Lossless. Входной PCM поддерживается с глубиной 16 и 24 бита. Длительность кадра может составлять 10, 7,5, 5, 2,5 и 1,25 мс.
LC3 и LC3plus нельзя считать двумя названиями одного и того же режима. Bluetooth SIG использует LC3 как базовый кодек LE Audio. LC3plus стандартизован ETSI и добавляет собственные режимы и механизмы, в том числе High Resolution, расширенные низкозадержочные варианты, защиту от ошибок и Lossless. При этом 10-миллисекундный режим находится в зоне совместимости: поток с кадром 10 мс может относиться как к LC3, так и к LC3plus. Поэтому одно наличие строки «LC3» в диагностике ещё не доказывает, что задействован расширенный режим LC3plus.
Отдельно нужно различать обычную совместимость LC3/LC3plus и High Resolution в Bluetooth. LC3plus сохраняет совместимость с LC3 в применимых режимах Bluetooth LE Audio, но High Resolution — отдельный ETSI-режим; его нельзя автоматически приравнивать к обычному Bluetooth SIG LC3. Для работы с локальным тестовым файлом это различие означает следующее: программа, умеющая декодировать базовый LC3, не обязана понимать HR-битстрим LC3plus.
Основные режимы, которые нужно различать перед конвертацией
| Режим | Что важно для файла | Поддержка полного reference software | Google liblc3 / FFmpeg |
|---|---|---|---|
| Обычный LC3/LC3plus | Частота, битрейт, длительность кадра, число каналов | Да | Да в реализованном подмножестве |
| High Resolution | Нужно знать частоту и HR-флаг; для 96 кГц HR обязателен в reference tool | Да | 48 и 96 кГц; кадры, поддерживаемые liblc3 |
| Lossless | Битрейт в Lossless меняется от кадра к кадру; при заданном пределе кодер переключает отдельные кадры в HR, когда lossless-представление не укладывается в этот предел | Да, в fixed-point реализации | Полный текущий Lossless не заявлен |
| Error Protection | Нужно учитывать epmode и работу channel coder | Да | Не считать эквивалентом полного ETSI channel coder |
| G.192 test stream | Используется файл .g192 и отдельная конфигурация | Да | Не подменять обычным raw-файлом |
Эта таблица задаёт главный критерий выбора программы. Если задача связана с полным соответствием ETSI, Lossless, 1,25 мс, error protection или conformance test vectors, ориентируйтесь на reference software. Если нужен понятный монтаж уже декодированного WAV, используйте обычный аудиоредактор. liblc3 и FFmpeg удобны для автоматизации, но их возможности нельзя механически приравнивать к последнему эталонному пакету.
Почему «файл .lc3» не всегда является аудио LC3plus
Справочники по расширениям нередко смешивают три разных объекта: аудиокодек LC3plus, тестовый битстрим LC3/LC3plus и исходные файлы для учебной архитектуры LC-3. LC-3 Edit, PennSim, декомпиляторы LC-3 и редакторы исходного кода относятся к учебному процессору LC-3 и не имеют отношения к аудио. Если такой файл открыть аудиоредактором, он не станет звуковой дорожкой.
У эталонного LC3plus нет требования всегда использовать одно расширение. Encoder-only может писать результат в OUTPUT.bin, Channel Coder Converter работает с именами вида in.lc3 и out.lc3, а G.192 использует .g192. FFmpeg, в свою очередь, имеет muxer с именем lc3. Поэтому расширение — только подсказка, а не доказательство содержимого.
Как узнать reference test bitstream по заголовку
Стандартный тестовый двоичный формат reference tools начинается конфигурационным заголовком. Первое 16-битное поле file_id имеет значение 0xcc1c и хранится little-endian, то есть первые два байта в файле должны выглядеть как 1c cc. Затем идут размер заголовка, частота дискретизации, битрейт, число каналов, длительность кадра, режим защиты от ошибок, длина сигнала и HR-флаг. Структура заголовка предусматривает расширение: корректный reader учитывает поле header_size, а не использует жёстко фиксированное смещение.
В Windows первые два байта можно проверить без hex-редактора. В Windows PowerShell 5.1:
$bytes = Get-Content -Encoding Byte -TotalCount 2 .\input.bin
$bytes | ForEach-Object { '{0:x2}' -f $_ }В PowerShell 7 используйте чтение байтового потока:
$bytes = Get-Content -AsByteStream -ReadCount 2 .\input.bin | Select-Object -First 2
$bytes | ForEach-Object { '{0:x2}' -f $_ }Для ожидаемого reference-файла вывод начинается значениями 1c и cc. На macOS или Linux ту же проверку можно выполнить так:
od -An -tx1 -N2 input.binЕсли первые байты не совпадают, не запускайте reference decoder вслепую. Сначала определите фактический формат: отдельно проверяются G.192, контейнерная упаковка, текстовый LC-3 assembler source, повреждение данных и собственная упаковка конкретного устройства. Затем выбирайте декодер для подтверждённого типа потока.
Почему переименование не конвертирует LC3plus
Переименование record.bin в record.wav меняет только имя. Сжатые LC3plus-кадры не превращаются в PCM и не получают WAV-заголовок. Аналогично переименование .lc3 в .mp3 не создаёт MPEG Audio. Если программа после такого переименования всё же что-то открывает, она определила данные по содержимому либо ошибочно интерпретировала поток. Надёжный путь — декодировать LC3plus штатным decoder в WAV, а уже затем выбирать редактор и формат экспорта.
Что подготовить перед открытием и редактированием
Сохраните исходник отдельно и не редактируйте единственную копию. Для специализированных кодеков важны не только музыкальная длительность и число каналов, но и параметры транспортного потока. Если файл передан разработчиком устройства, лабораторией или коллегой, попросите вместе с ним конфигурацию: частоту дискретизации, frame duration, битрейт или профиль переключения битрейта, HR/Lossless, error protection, число каналов и версию инструмента, которым файл был создан.
- Для обычного reference binary часть параметров записана прямо в config header.
- Для G.192 эталонный encoder создаёт дополнительный файл конфигурации; его нельзя терять.
- Для потока из устройства упаковка может отличаться от test file format, даже если внутри действительно LC3plus.
- Для Bluetooth-записи наличие LC3 или LC3plus в переговорах устройств не означает, что сохранённый файл является тем же reference bitstream, который читает CLI-утилита.
Практическая цепочка для монтажа выглядит так: LC3plus bitstream → decoder → PCM/WAV → аудиоредактор → WAV/FLAC/MP3/AAC → при необходимости encoder. Промежуточный WAV нужен не ради «улучшения качества», а потому что редакторы работают с декодированными сэмплами. Декодирование не возвращает информацию, потерянную при исходном lossy-кодировании, но само по себе не добавляет новую ступень lossy-сжатия.
Windows: основной способ через АудиоМАСТЕР и ETSI reference decoder
Для Windows этот сценарий удобен тем, что роли разделены корректно. Reference software выполняет то, для чего оно создано: разбирает LC3plus test bitstream и выдаёт WAV. АудиоМАСТЕР получает уже обычный WAV, показывает волновую форму, позволяет выделять фрагменты, обрезать, менять громкость, применять эквалайзер и другие эффекты, а затем сохранить результат в распространённый аудиоформат. Нативная поддержка LC3plus в редакторе не требуется и не приписывается программе.
Шаг 1. Соберите эталонный LC3plus decoder
Для сборки reference package требуется CMake 3.13 или новее. В Windows поддерживается генератор Visual Studio 17 2022. Откройте Windows Terminal, PowerShell или Developer Command Prompt и перейдите в каталог src\fixed_point либо src\floating_point. Для стандартной сборки выполните:
cmake -B build -G "Visual Studio 17 2022"
cmake --build build --config ReleaseВместо второй команды можно открыть сгенерированное решение build\LC3plus_FX.sln для fixed-point или build\LC3plus_FL.sln для floating-point и выполнить сборку в Visual Studio. Если планируется Lossless, используйте fixed-point реализацию: этот режим реализован именно в fixed-point коде.
После сборки запустите исполняемый файл с ключом справки:
LC3plus -hПеред нестандартным режимом проверьте доступные параметры именно у собранного бинарного файла. Базовые операции выполняются следующими командами.
Шаг 2. Проверьте тип входного файла
Если файл получен как .bin или .lc3, проверьте первые два байта и происхождение. Для reference binary ожидается little-endian идентификатор 0xcc1c. Не пропускайте этот шаг, когда неизвестно, откуда получен файл: совпадение расширения с LC3 встречается и у неаудиоданных.
Если использован G.192, обычная команда -D INPUT.bin не подходит. Для G.192 нужно использовать те же параметры -formatG192 и конфигурационный файл, которые применялись при кодировании.
Шаг 3. Декодируйте reference bitstream в WAV
Базовая команда decoder-only:
LC3plus -D input.bin decoded.wavУспешный результат — обычный WAV-файл, который можно открыть редактором. Если включена защита от ошибок, decoder должен знать, что она присутствует. Для такого test bitstream используется:
LC3plus -D -epmode 1 input.bin decoded.wavЗначение на стороне decoder здесь служит признаком включённой защиты; конкретный режим channel decoder определяет сам. Если поток создавался без error protection, не добавляйте параметр ради эксперимента.
Для G.192 encoder-only команда выглядит так:
LC3plus -E -formatG192 input.wav output.g192 128000При этом создаётся дополнительный output.cfg с информацией, необходимой decoder. Для декодирования G.192 используйте те же флаги формата и соответствующий конфигурационный файл; точное имя cfg передавайте через -cfgG192 FILE.
Шаг 4. Откройте WAV в АудиоМАСТЕРе
Запустите редактор и нажмите «Открыть файл». Выберите decoded.wav. После импорта в центральной части окна появляется волновая форма; по ней можно видеть паузы, границы реплик, резкие пики и выделенный участок. Это уже декодированный звук: дальнейшие операции не зависят от того, что исходником был LC3plus.

Перед правкой сохраните исходный decoded.wav отдельно. Если нужно сделать несколько вариантов монтажа, создавайте разные выходные файлы, а не перезаписывайте единственный декодированный мастер. Это упрощает повторное сравнение с исходным LC3plus-файлом.
Шаг 5. Выделите и удалите ненужный фрагмент
На волновой форме задайте начало и конец участка мышью. Выделение отображается другим цветом, поэтому можно проверить границы до удаления. Для точной речевой правки сначала приблизьте нужный участок, затем прослушайте несколько секунд до и после предполагаемого разреза. Избегайте резкого обрыва в середине слова, атаки инструмента или длинного хвоста реверберации.

После выделения используйте стандартную команду удаления/обрезки выбранного участка в редакторе. Если задача состоит только в удалении тишины в начале и конце, не применяйте эквалайзер, нормализацию и другие эффекты без необходимости: каждый дополнительный процесс меняет сэмплы и усложняет контроль того, что именно произошло с материалом.
Шаг 6. Примените обработку только там, где она нужна
В левой панели доступны эффекты и инструменты, среди которых видны изменение темпа, изменение голоса, изменение и выравнивание громкости, возрастание и затухание громкости, эхо, реверберация, эквалайзер и частотный фильтр. Для технической записи обычно полезнее не декоративные эффекты, а точечная регулировка уровня и частот. Сначала определите конкретный дефект, затем обрабатывайте выделенный участок и сравнивайте до/после на одинаковой громкости.
Диалог изменения голоса показывает общий принцип интерфейса эффектов: слева выбирается пресет, справа находятся числовые параметры, снизу — предварительное прослушивание и кнопка применения. Для LC3plus-проекта этот экран нужен только тогда, когда изменение тембра является задачей монтажа; он не относится к декодированию кодека.

Для частотной коррекции используется отдельное окно эквалайзера с полосами частот и кнопками предварительного прослушивания/применения. Это полезнее изменения голоса, когда задача состоит в аккуратной коррекции технической или речевой записи.

При работе с длительностью доступно отдельное окно изменения темпа. Используйте его только по задаче монтажа: изменение темпа модифицирует временную структуру сигнала и не относится к декодированию LC3plus.

Если после частотной обработки речь становится металлической, исчезают согласные или появляются заметные артефакты, отмените действие и уменьшите интенсивность. Нельзя «восстановить LC3plus» эквалайзером: кодек уже декодирован в PCM, а качество ограничено исходным сигналом и параметрами кодирования.
Шаг 7. Сохраните мастер-копию
Откройте «Файл» → «Сохранить как». В «Мастере сохранения» видны форматы WAV, MP3, MP2, WMA, AAC, AC3, OGG и FLAC. Для мастер-копии после монтажа выбирайте WAV или FLAC: это исключает дополнительное lossy-кодирование до момента, когда вы окончательно определитесь с целевым форматом.

В диалоге экспорта доступны параметры дискретизации, глубины/чёткости для соответствующих форматов, стереорежима и битрейта. Не повышайте частоту дискретизации только ради большего числа в свойствах. Если LC3plus был декодирован в 48 кГц, сохранение в 96 кГц не восстанавливает дополнительные высокочастотные данные. Для последующего кодирования желательно сохранить исходную частоту и число каналов, если монтажная задача не требует их изменения.
Шаг 8. Проверьте WAV после сохранения
Прослушайте начало, несколько точек в середине и конец. Проверьте, что обрезка произошла в нужных местах, каналы не поменялись местами, уровень не клиппирует, а тишина не превратилась в постоянный шум. Для технического контроля можно использовать FFmpeg и входящий в его набор ffprobe:
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,bits_per_sample -show_entries format=duration -of default=noprint_wrappers=1 edited.wavЕсли выход остаётся WAV PCM, ожидайте PCM-кодек. Частота дискретизации и число каналов должны соответствовать выбранным параметрам. Длительность должна измениться ровно на объём удалённого или добавленного материала, а не на случайную величину.
Шаг 9. При необходимости снова закодируйте звук в LC3plus
Для обычного encoder-only режима используется:
LC3plus -E edited.wav output.bin 128000Число в конце — битрейт в битах в секунду. Не копируйте 128000 автоматически в любой проект: допустимые комбинации зависят от режима, длительности кадра, частоты и таблиц ETSI TS 103 634. Если нужно воспроизвести параметры исходного test bitstream, ориентируйтесь на его header и требования системы, которая будет принимать результат.
Для High Resolution reference software показывает отдельный параметр -hrmode. Базовый пример encoder+decoder:
LC3plus -hrmode edited.wav hr_check.wav 256000Этот вызов одновременно кодирует и декодирует сигнал и удобен для проверки результата. Для 96 кГц High Resolution обязателен. Не переносите HR-команду на 44,1 кГц: HR применяется при 48/96 кГц.
Lossless в reference software
Текущий пакет включает финальный Lossless. Он доступен для 44,1, 48, 96 и 192 кГц, длительностей кадра 10, 7,5, 5, 2,5 и 1,25 мс и работает в fixed-point коде. В режиме без ограничения битрейта программа сама определяет требуемый поток:
LC3plus -lossless edited.wav lossless_check.wavПри заданном потолке битрейта:
LC3plus -lossless edited.wav capped_check.wav 500000Если конкретный кадр не помещается в заданный бюджет, кодек переключает его в High Resolution; когда бит снова хватает, возвращается к Lossless. Поэтому файл, обработанный с ограничением, нельзя автоматически считать полностью bit-exact на каждом кадре. Для проверки именно без потерь используйте режим без cap и сравнение декодированного PCM с исходным.
Плюсы способа через АудиоМАСТЕР
- LC3plus декодируется специализированным эталонным инструментом, поэтому редактору не приписывается неподтверждённая нативная поддержка кодека.
- Монтаж выполняется визуально по волновой форме, без ручного расчёта временных диапазонов в командной строке.
- Промежуточный WAV не добавляет новую ступень lossy-сжатия до экспорта.
- Можно сохранить отдельную WAV/FLAC мастер-копию и уже из неё делать варианты MP3, AAC или повторное LC3plus-кодирование.
- Исходный bitstream остаётся неизменным и пригоден для повторной проверки.
Ограничения способа
- Нужны два инструмента: decoder и GUI-редактор.
- АудиоМАСТЕР работает с декодированным WAV, а не с LC3plus test bitstream напрямую.
- WAV занимает заметно больше места, чем сжатый поток.
- Экспорт в MP3/AAC после редактирования создаёт новую ступень сжатия с потерями.
- Для conformance, Lossless и error protection всё равно нужен reference package; GUI-редактор не заменяет кодековые тесты.
macOS: Google liblc3, Homebrew и утилиты elc3/dlc3
Google liblc3 — отдельная реализация LC3 с частью возможностей LC3plus. Она удобна для разработки и командной строки, но не покрывает весь современный LC3plus reference package: дополнительные LC3plus-возможности включают кадры 2,5 и 5 мс и High Resolution для 48/96 кГц; текущий Lossless ETSI и 1,25 мс в этом наборе не заявлены.
На macOS пакет доступен в Homebrew под именем liblc3. Формула описана как library and tools. Установка:
brew install liblc3После установки проверьте, какие исполняемые файлы доступны именно в вашей системе:
command -v elc3
command -v dlc3
elc3 -h
dlc3 -hЕсли команды найдены, можно использовать standalone encoder и decoder. elc3 принимает WAV и кодирует его в нестандартный LC3 binary test format, а dlc3 выполняет обратную операцию.
Кодирование WAV через elc3
Утилита умеет писать битстрим в стандартный вывод, если выходной файл не указан. Базовый тестовый цикл можно построить как pipe:
elc3 input.wav -b 128000 | dlc3 > roundtrip.wavТакой запуск полезен для первичной проверки установки: elc3 кодирует, dlc3 сразу декодирует, а roundtrip.wav можно сравнить с исходником по длительности, частоте и числу каналов. Это не означает, что lossy LC3plus должен быть бит-в-бит идентичен WAV; сравнение служит проверкой корректности цепочки, а не доказательством Lossless.
Декодирование отдельного test bitstream
Перед обработкой отдельного файла посмотрите dlc3 -h. Decoder умеет читать bitstream из стандартного ввода и писать WAV в стандартный вывод, поэтому для уже имеющегося файла можно использовать перенаправление:
cat input.lc3 | dlc3 > decoded.wavПеред этим убедитесь, что файл действительно относится к тому же test binary format и использует режим, поддерживаемый liblc3. Если поток создан в Lossless или с кадром 1,25 мс, Google liblc3 его не покрывает. Ошибка такого декодирования сама по себе не доказывает повреждение файла: повторите проверку в полном reference software.
Когда macOS-способ удобнее reference software
- Нужно быстро встроить LC3/LC3plus encode/decode в shell-скрипт.
- Используется подмножество функций, которое liblc3 явно поддерживает.
- Не требуется Lossless, channel coder ETSI или conformance-процедура.
- Нужен pipe без промежуточного bitstream-файла.
Для режима вне заявленного набора liblc3 не пытайтесь компенсировать ограничение подбором случайных параметров. Используйте эталонную реализацию LC3plus с нужным режимом.
Linux и автоматизация: FFmpeg с liblc3
FFmpeg удобен, когда LC3plus нужно встроить в пакетную обработку: декодировать несколько файлов, перевести результат в WAV/FLAC, задать фильтры или получить стандартный медиаконтейнер. Поддержка реализована через внешнюю Google liblc3, поэтому при конфигурации сборки нужен ключ --enable-liblc3. Поэтому факт, что на компьютере установлен FFmpeg, ещё не означает наличие LC3.
У FFmpeg нет отдельного графического окна: рабочим интерфейсом служит терминал, где после команды выводятся сведения о сборке, входных потоках, выбранных кодеках и результате преобразования. Ниже показан реальный консольный вывод FFmpeg. Скриншот иллюстрирует сам интерфейс командной строки; команда на нём относится к другому медиасценарию, поэтому параметры LC3plus нужно брать из шагов этой инструкции, а не со снимка.

Шаг 1. Убедитесь, что сборка действительно содержит LC3
На Linux или macOS:
ffmpeg -hide_banner -formats | grep -i lc3
ffmpeg -hide_banner -encoders | grep -i lc3
ffmpeg -hide_banner -decoders | grep -i lc3На Windows замените grep на findstr:
ffmpeg -hide_banner -formats | findstr /I lc3
ffmpeg -hide_banner -encoders | findstr /I lc3
ffmpeg -hide_banner -decoders | findstr /I lc3В форматах ожидается LC3 muxer/demuxer; для кодирования используется wrapper liblc3. Если списки пусты, конкретная сборка не подходит для этой инструкции. Установка другой версии «поверх» без проверки конфигурации проблему не гарантирует решить.
Шаг 2. Декодируйте LC3/LC3plus test file в WAV
FFmpeg имеет file format lc3, основанный на тестовом формате, описанном Bluetooth SIG и ETSI. Для явного выбора demuxer:
ffmpeg -f lc3 -i input.lc3 -c:a pcm_s24le decoded.wavЕсли исходный материал 16-битный и дополнительная 24-битная глубина не нужна, используйте pcm_s16le. Повышение глубины контейнера не создаёт новые детали; оно только определяет представление декодированного PCM.
При ошибке сначала посмотрите заголовок и режим. FFmpeg/liblc3 не заявляет полный современный Lossless, 1,25 мс и все функции reference package. В такой ситуации правильная альтернатива — reference decoder, а не принудительное указание другого аудиокодека.
Шаг 3. Закодируйте WAV через liblc3
Параметры encoder wrapper включают битрейт, частоту, число каналов, frame_duration и high_resolution. Пример обычного LC3plus с кадром 5 мс:
ffmpeg -i edited.wav -c:a liblc3 -b:a 128k -frame_duration 5 -f lc3 output.lc3Для High Resolution на 48 кГц:
ffmpeg -i edited.wav -ar 48000 -c:a liblc3 -b:a 256k -frame_duration 5 -high_resolution 1 -f lc3 output_hr.lc3При 96 кГц wrapper автоматически активирует HR, а при более низких частотах, где HR неприменим, отключает его. Не используйте этот пример для 192 кГц Lossless: такой режим отсутствует в заявленном LC3plus-подмножестве liblc3.
Шаг 4. Встройте декодирование в монтажный pipeline
Если нужно лишь получить мастер-файл для дальнейшего редактора, делайте один понятный переход в WAV:
ffmpeg -f lc3 -i input.lc3 -c:a pcm_s24le editing.wavЕсли задача автоматическая и монтаж ограничивается простыми операциями, фильтры FFmpeg можно применить после декодирования. Например, обрезка по времени:
ffmpeg -f lc3 -i input.lc3 -ss 00:00:05 -t 00:00:30 -c:a pcm_s24le fragment.wavТакой способ хорош, когда границы известны заранее. Если нужно визуально находить паузы, щелчки или переходы, GUI-редактор удобнее: в терминале вы не видите волновую форму.
Плюсы FFmpeg
- легко автоматизировать десятки однотипных файлов;
- можно сразу получать WAV, FLAC и другие стандартные форматы;
- есть явный muxer/demuxer LC3 test file;
- параметры LC3plus encoder можно задавать в той же команде, что и подготовку PCM.
Ограничения FFmpeg
- нужна сборка с liblc3;
- поддерживается не весь современный LC3plus;
- командная строка не заменяет визуальный монтаж;
- ошибка «не декодируется» может означать неподдерживаемый режим, а не повреждённый файл;
- нельзя использовать High Resolution или frame duration вне диапазона, поддерживаемого wrapper.
Reference LC3plus, liblc3 и FFmpeg : что выбрать
| Способ | Платформа | Главная задача | LC3plus-покрытие | Редактирование | Когда выбирать |
|---|---|---|---|---|---|
| АудиоМАСТЕР + ETSI reference decoder | Windows | Декодировать специализированным tool и отредактировать WAV визуально | Полное покрытие задаёт reference package; редактор работает после декодирования | Волновая форма, обрезка, эффекты, экспорт | Ручной монтаж и понятный GUI |
| ETSI reference LC3plus | Windows, Unix-подобные системы при сборке из исходников | Кодирование, декодирование, HR, Lossless, error protection, conformance | Эталон для TS 103 634 | Нет GUI-монтажа | Точная работа с кодеком и тестами |
| Google liblc3 / elc3 / dlc3 | macOS, Linux, Android build, WASM build | Лёгкая библиотека и CLI | Базовый LC3 + заявленная часть LC3plus | Нет визуального редактора | Скрипты, разработка, pipe |
| FFmpeg + liblc3 | Linux, macOS, Windows при подходящей сборке | Медиаконвейер, пакетная конвертация | Ограничено возможностями liblc3 | CLI-фильтры | Автоматизация и массовая обработка |
Если приоритет — сохранить полный набор возможностей конкретной версии ETSI TS 103 634, берите reference software. Если приоритет — вручную вырезать и обработать звук в Windows, первым практическим сценарием остаётся связка decoder + АудиоМАСТЕР. Для серверной обработки и скриптов удобнее FFmpeg, но до запуска нужно проверить наличие liblc3 и совместимость режима.
Как выбрать формат после декодирования
После LC3plus decoder вы работаете уже не с кодеком передачи, а с обычным аудиоматериалом. Выходной формат выбирают по следующему этапу, а не по тому, какое расширение было у исходника.
| Цель | Формат | Почему | Что учитывать |
|---|---|---|---|
| Продолжить монтаж | WAV PCM | Широкая совместимость и отсутствие нового lossy-кодирования | Большой размер |
| Хранить мастер компактнее | FLAC | Сжатие без потерь PCM | Не превращает исходный lossy LC3plus в «исходное качество» |
| Отправить или опубликовать | MP3/AAC/другой целевой кодек | Удобная совместимость и меньший размер | Повторное lossy-кодирование |
| Вернуть в LC3plus-систему | Reference binary / G.192 / транспорт, который требует система | Соответствие downstream-устройству или тесту | Нужны точные параметры и правильная реализация |
Если звук предназначен для повторного LC3plus-кодирования, не стоит сначала сохранять его в MP3. Цепочка LC3plus → MP3 → LC3plus добавляет лишнее декодирование и повторное сжатие. Сохраняйте рабочий мастер в WAV или FLAC и кодируйте целевой поток непосредственно из него.
Как работать с High Resolution
High Resolution — не переключатель «сделать звук качественнее» независимо от исходника. Режим имеет конкретные требования. Reference software указывает, что HR обязателен для 96 кГц и может использоваться при 48 кГц. FFmpeg/liblc3 также заявляет HR на 48 и 96 кГц. Если WAV имеет 44,1 кГц, простое добавление HR-флага не превращает его в настоящий 96-кГц исходник.
Перед HR-кодированием проверьте:
- частоту дискретизации мастер-файла;
- глубину PCM и число каналов;
- поддерживаемую длительность кадра конкретной реализации;
- допустимый битрейт для выбранного режима;
- требования устройства или тестовой системы, которая будет принимать поток.
Если исходный LC3plus HR декодируется в WAV для монтажа, сохраните частоту 48 или 96 кГц. Снижение до 44,1 кГц перед обратным encode меняет сигнал и уже не является нейтральным монтажом. Увеличение 48 → 96 кГц также не возвращает детали, отсутствующие в декодированном 48-кГц материале.
Как работать с Lossless
Lossless в LC3plus — отдельный режим с собственными ограничениями. Reference software заявляет 44,1, 48, 96 и 192 кГц; 192 кГц относится только к Lossless. Кадры поддерживаются от 10 до 1,25 мс. Режим реализован в fixed-point коде.
Есть два принципиально разных сценария:
- Без ограничения битрейта. Encoder выбирает столько бит, сколько требуется для bit-exact восстановления. Именно этот сценарий нужен, когда критично доказать отсутствие потерь.
- С bitrate cap. Если кадр не помещается, LC3plus бесшовно кодирует его в High Resolution. Такой поток оптимизирует качество при ограничении канала, но уже не гарантирует, что каждый кадр Lossless.
После монтажа Lossless проверяют не слухом. Декодируйте результат и сравните PCM с тем WAV, который подавался в encoder. Для 16/24-битного PCM можно сравнивать сами сэмплы либо контрольные суммы канонизированного PCM. Сравнение размеров файлов ничего не доказывает: битрейт Lossless зависит от содержимого.
Error protection и Packet Loss Concealment: зачем они нужны в файле
LC3plus рассчитан на коммуникационные системы, поэтому в стандарте есть механизмы, которых обычно нет в бытовой инструкции «конвертировать музыку». Packet Loss Concealment работает на decoder при потерях кадров. Error protection добавляет channel coding и позволяет обнаруживать или исправлять часть ошибок. Эти функции важны при тестировании беспроводного тракта, но не нужны для обычного редактирования уже корректно декодированного WAV.
Reference tool позволяет моделировать потери кадров с помощью -epf:
LC3plus -D -epf patternfile input.bin simulated.wavpatternfile содержит последовательность 16-битных значений; ненулевые элементы обозначают потерянный кадр. Для записи detection pattern используется -edf. Эти параметры полезны инженеру, который проверяет устойчивость decoder, но не являются способом «починить» произвольный повреждённый файл.
Error protection encoder-only подтверждён командой:
LC3plus -E -epmode 2 input.wav protected.bin 128000Допустимые значения encoder epmode — 0–4: от выключенной защиты до максимальной. Реальное число исправляемых ошибок зависит от распределения битовых ошибок по кадру, поэтому нельзя переводить номер режима в универсальное обещание «исправит N ошибок» без привязки к размеру и структуре кадра.
G.192 и обычный binary test format — это не одно и то же
Reference software поддерживает два тестовых представления. Обычный binary format содержит config header и последовательность кадров с длиной. Для G.192 расширение должно быть .g192, а encoder создаёт конфигурационный файл. Если в проекте есть audio.g192 и соседний audio.cfg, не удаляйте cfg и не пытайтесь переименовать G.192 в .lc3.
G.192 особенно полезен в стандартизационных и conformance-сценариях, где важна работа с битовыми ошибками и тестовыми последовательностями. Для обычного монтажа конечная цель всё равно та же — получить WAV. Но путь декодирования выбирается по фактическому transport format, а не по желаемому редактору.
Channel Coder Converter: когда нужен ccConvert
В fixed-point части reference package есть дополнительная цель ccConvert. Она предназначена для преобразования защищённых и незащищённых LC3plus payload внутри тестового потока. Сборка:
cmake -B build -S .
cmake --build build --target ccConvertНа Windows используется тот же Visual Studio generator, что и для основной программы. Подтверждённые команды:
ccConvert -pack gross_bytes ep_mode in.lc3 out.lc3
ccConvert -unpack in.lc3 out.lc3gross_bytes задаёт доступное число байт, а ep_mode — режим защиты 0–4. Этот инструмент не является аудиоредактором и не переводит LC3plus в MP3 или WAV. Он нужен для работы с channel coder в тестовом pipeline.
Android: системный LC3/LE Audio не равен редактору LC3plus-файла
На Android LC3 используется в Bluetooth LE Audio, а Google liblc3 даже предусматривает cross-compilation с Android NDK. Но это два разных уровня. Системный Bluetooth stack кодирует и декодирует поток в рамках соединения с устройством; файловый редактор должен отдельно уметь разобрать конкретный transport format и предоставить импорт/экспорт.
Мобильные «codec changer» и универсальные аудиоконвертеры не решают эту задачу без явной поддержки конкретного LC3plus transport format. Поэтому файловый workflow не следует подменять настройкой Bluetooth-кодека соединения. Такие приложения могут показывать или переключать Bluetooth-кодек соединения, но не выполняют задачу файла input.bin → WAV → монтаж → LC3plus.
Для мобильного проекта практичный путь — декодировать материал на компьютере в WAV. После этого WAV можно переносить в любой подходящий мобильный редактор, если действительно нужен монтаж на телефоне. Финальный LC3plus encode лучше выполнять той же проверенной реализацией, которая соответствует целевой системе.
iPhone и iPad: почему наличие Bluetooth-аудио не решает файловую задачу
На iPhone и iPad ситуация принципиально такая же. Поддержка кодека в беспроводной аудиосессии не создаёт общего пользовательского API «открыть любой .lc3plus-файл». Для описанного workflow нужен инструмент, который явно понимает конкретный LC3plus transport format; обычного мобильного аудиоредактора для этого недостаточно.
Не стоит выдавать универсальный аудиоконвертер за LC3plus-решение только потому, что он поддерживает WAV, AAC или Bluetooth. Он становится полезен только после того, как специализированный decoder уже превратил LC3plus в стандартный аудиофайл.
Почему универсальные онлайн-конвертеры не подходят для LC3plus
Универсальный web-конвертер нельзя считать LC3plus-конвертером только по наличию формы загрузки файлов. Для первого этапа он должен явно принимать ETSI LC3plus или совместимый LC3 test bitstream; без такой поддержки сценарий «загрузите .lc3 и получите MP3» технически необоснован. Это особенно опасно из-за того, что расширение LC3 используется и для других данных.
Онлайн-сервис допустим на следующем этапе: после локального декодирования в WAV. Например, если нужен только обычный WAV → MP3, это уже стандартная конвертация и она не требует знания LC3plus. Но такой сайт следует называть WAV/MP3-конвертером, а не LC3plus-конвертером.
Почему VLC media player и Audacity не поставлены основными способами
VLC media player и Audacity полезны после получения стандартного аудио, но для первого LC3plus-этапа этого недостаточно. Сам факт, что программа умеет воспроизводить или редактировать множество аудиоформатов, не доказывает поддержку ETSI reference bitstream, HR, Lossless или конкретного test file header.
Audacity можно использовать после получения WAV, так же как любой другой PCM-редактор. VLC media player можно использовать для прослушивания стандартного WAV или другого поддерживаемого результата. В этой инструкции они не заменяют специализированный LC3plus decoder: работа со стандартным WAV не доказывает поддержку ETSI reference bitstream, HR, Lossless или его test header.
Частые ошибки при открытии LC3plus
Ошибка 1. Файл открывается как текст
Сначала проверьте, не является ли это LC-3 assembler source. Если внутри видны инструкции, метки и текстовый код LC-3, это исходник для учебной архитектуры LC-3, а не аудиопоток LC3plus. Не устанавливайте аудиокодек ради такого файла.
Ошибка 2. Reference decoder пишет ошибку сразу после запуска
Проверьте первые байты, transport format и режим. Для обычного binary test file ожидается 1c cc. G.192 требует другой процедуры. Поток из устройства может иметь собственную упаковку и нуждаться в извлечении payload до reference decoder.
Ошибка 3. Старый decoder не читает новый Lossless
Lossless появился в поздних версиях reference software и финализирован в текущем пакете. Старый decoder может не знать новый режим. Для такого файла используйте пакет, соответствующий спецификации, которой он был создан.
Ошибка 4. liblc3 или FFmpeg не декодирует 1,25 мс
Не делайте вывод о повреждении файла. Wrapper FFmpeg перечисляет кадры 2,5/5 мс как дополнительные LC3plus-возможности и не включает 1,25 мс. Для полного режима используйте reference software.
Ошибка 5. HR включён при неподходящей частоте
В reference software HR применяется при 48/96 кГц, а для 96 кГц является обязательным. Если мастер сохранён в 44,1 кГц, используйте обычный допустимый режим либо сознательно выполняйте ресемплинг как отдельную операцию, понимая, что это меняет аудиоданные.
Ошибка 6. После монтажа файл стал намного больше
Это нормально для WAV PCM. LC3plus сжимает аудио, а WAV в описанном workflow хранит декодированные сэмплы. Размер мастер-файла не следует сравнивать с размером bitstream как показатель качества.
Ошибка 7. MP3 после монтажа звучит хуже
Причина — дополнительное lossy-кодирование. Исходный LC3plus уже мог быть lossy; экспорт в MP3 создаёт ещё одну ступень. Для мастер-копии используйте WAV/FLAC, а MP3 делайте отдельным delivery-файлом.
Ошибка 8. Переименование .bin в .lc3 помогло одному плееру, но не decoder
Расширение не меняет структуру. Один плеер мог определить поток эвристически, а decoder ожидает конкретный test header. Вернитесь к исходному имени и проверьте формат по содержимому.
Ошибка 9. FFmpeg не показывает liblc3
Проверьте ffmpeg -buildconf и списки codecs/formats. Для wrapper liblc3 при конфигурации сборки нужен --enable-liblc3. Если ключа и encoder нет, данная сборка не поддерживает нужный путь.
Ошибка 10. Lossless с bitrate cap оказался не бит-в-бит
Это ожидаемое поведение, когда бюджета не хватает. Reference codec переключает отдельные кадры в High Resolution. Для строгого bit-exact теста используйте Lossless без ограничения битрейта.
Как проверить результат после конвертации
Успешное завершение команды — только первый уровень проверки. Для технического файла нужна комбинация структурного, параметрического и слухового контроля.
1. Проверьте, что WAV читается полностью
Для FFmpeg:
ffmpeg -v error -i decoded.wav -f null -Отсутствие сообщений уровня error означает, что файл проходит декодирование целиком. Это не оценка качества, а проверка структуры.
2. Сверьте параметры
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,bits_per_sample -show_entries format=duration -of default=noprint_wrappers=1 decoded.wavСверяйте частоту, каналы, глубину и длительность с тем, что ожидалось из LC3plus header или исходной конфигурации. Если монтаж не включал ресемплинг и изменение каналов, эти параметры не должны меняться самопроизвольно.
3. Проверьте начало и конец
Ошибки delay compensation, неверного trim или повреждённого последнего кадра чаще проявляются на границах. Прослушайте первые и последние секунды и сравните длительность до и после. Reference software имеет параметр delay compensation; по умолчанию decoder компенсирует задержку.
4. Для reference build запустите test vectors
В пакете есть каталог testvec и проверка сборки по заранее рассчитанным MD5. Это сильнее простой проверки «программа запускается»: test vectors показывают, что бинарный файл на вашей системе даёт ожидаемые эталонные результаты.
5. Для Lossless сравните PCM
Декодируйте Lossless round-trip и сравните с WAV, который подавался в encoder. При истинном Lossless без cap сэмплы должны совпадать bit-exact в поддерживаемом представлении. Слуховая оценка здесь недостаточна.
6. Для lossy/HR оценивайте не только громкость
Сравнивайте артефакты на переходных процессах, шипящих согласных, тарелках, реверберационных хвостах и тихих участках. Перед A/B-сравнением выровняйте громкость, иначе более громкая версия субъективно кажется качественнее.
Практические сценарии
Нужно вырезать 20 секунд из LC3plus-записи в Windows
- Скопируйте исходный bitstream.
- Проверьте, что это reference binary или выясните transport format.
- Выполните
LC3plus -D input.bin decoded.wav. - Откройте
decoded.wavв АудиоМАСТЕРе. - Выделите ненужные 20 секунд и удалите их.
- Сохраните WAV мастер-копию с исходной частотой и каналами.
- Если downstream требует LC3plus, выполните encoder-only с согласованным битрейтом.
Нужно получить MP3 для отправки
Не кодируйте LC3plus прямо «в голове» редактора. Сначала decoder → WAV. После монтажа в «Мастере сохранения» АудиоМАСТЕРа выберите MP3 и нужный битрейт. WAV мастер оставьте отдельно: если позднее потребуется другой delivery-формат, не придётся снова перекодировать MP3.
Нужно проверить Lossless 96 кГц
Используйте fixed-point reference software. Сохраните WAV 96 кГц без ненужного ресемплинга. Запустите Lossless без bitrate cap и сравните декодированный PCM с входом. Не используйте FFmpeg/liblc3 как замену, поскольку текущий полный Lossless там не заявлен.
Нужно автоматизировать сотню файлов
Если все потоки используют режим, поддерживаемый liblc3, удобен FFmpeg или elc3/dlc3. Сначала обработайте один файл, запишите параметры и проверьте round-trip. Только после успешной контрольной выборки запускайте цикл. Если режим нестандартный или Lossless, автоматизируйте reference binary вместо подмены кодека.
Файл пришёл из Bluetooth-устройства
Уточните, что именно записано: PCM после decoder, codec payload, packet capture или тестовый export. Фраза «устройство использует LC3plus» не говорит, какой file format лежит на диске. Reference decoder читает свой test format, а не любой Bluetooth capture.
Что нельзя заключать только по имени файла
track.lc3не доказывает, что внутри LC3plus.track.binне доказывает, что это reference binary.- 96 кГц не доказывает HR или Lossless без проверки режима.
- наличие LC3 в Bluetooth-настройках не доказывает LC3plus-файл на накопителе.
- успешное открытие в одном плеере не доказывает совместимость с ETSI conformance tools.
- больший битрейт после повторного кодирования не восстанавливает уже потерянные детали.
Критерии выбора рабочего процесса
| Ситуация | Приоритет | Рабочий процесс |
|---|---|---|
| Новичок в Windows, нужен ручной монтаж | Визуальный контроль | Reference decoder → WAV → АудиоМАСТЕР |
| Инженерный тест ETSI | Соответствие спецификации | Reference fixed/floating-point software + testvec/conformance |
| Lossless | Bit-exact результат | Fixed-point reference, без bitrate cap для строгого теста |
| macOS, shell workflow | Простая CLI-цепочка | Homebrew liblc3 + elc3/dlc3 при совместимом режиме |
| Linux/server | Автоматизация | FFmpeg с liblc3 после проверки build |
| Android/iPhone | Монтаж на телефоне | Сначала декодировать LC3plus на компьютере в WAV; мобильную часть выполнять уже со стандартным аудио |
| Неизвестный .lc3 | Безошибочная идентификация | Проверка header/происхождения до выбора программы |
Контрольная карточка проекта: какие параметры записать до монтажа
Для разовой проверки достаточно декодировать поток и прослушать WAV. Для регулярной работы этого мало: после монтажа нужно понимать, какие свойства относятся к исходному LC3plus-потоку, а какие появились уже на промежуточном PCM-этапе. Поэтому перед декодированием полезно сохранить небольшую карточку проекта. Она предотвращает типичную ошибку, когда отредактированный звук кодируют с произвольными настройками и затем считают полученный файл эквивалентом исходного.
| Что зафиксировать | Где взять | Зачем это нужно |
|---|---|---|
| Тип представления потока | Происхождение файла, заголовок reference binary, наличие пары G.192 + CFG | Чтобы выбрать совместимый decoder и не подавать G.192 как обычный test binary |
| Частота дискретизации | Reference header, CFG или параметры известного encoder | Нужна для проверки декодированного WAV и выбора совместимого HR/Lossless режима |
| Число каналов | Header, конфигурация или свойства декодированного WAV | Позволяет не потерять канал при промежуточном экспорте и обнаружить неверную интерпретацию потока |
| Длительность кадра | Header/configuration, параметры encoder | Определяет совместимость с reference software, Google liblc3 и FFmpeg wrapper |
| Битрейт или режим его переключения | Параметры encoder; при reference workflow — фиксированное значение или switching file | Помогает воспроизвести требуемый профиль при обратном кодировании |
| High Resolution | Флаг HR в reference header/configuration или исходная команда encoder | Не даёт случайно заменить HR обычным режимом после монтажа |
| Lossless и bitrate cap | Команда reference encoder и параметры проекта | Позволяет отличить настоящий Lossless от режима с ограничением, где отдельные кадры могут перейти в HR |
| Error protection | epmode, параметры channel coder, сопутствующая конфигурация | Нужно, если файл используется не только как аудиозапись, но и для испытаний устойчивости передачи |
| Глубина PCM после декодирования | Свойства WAV или ffprobe | Нужна для выбора мастер-файла без бессмысленного повышения разрядности |
| Инструмент декодирования | Название reference codec, liblc3 или FFmpeg pipeline | Делает результат воспроизводимым и помогает объяснить различия между двумя декодированными файлами |
Карточку не нужно встраивать в аудиофайл. Достаточно текстовой заметки рядом с исходником и рабочим WAV. Минимальный набор для обычного монтажа — тип потока, sample rate, channels, frame duration, HR/Lossless и способ декодирования. Для испытаний канала добавьте error protection, G.192/CFG, loss pattern и параметры channel coder.
После редактирования сравните карточку с настройками обратного encoder. Совпадение длительности кадра и частоты ещё не гарантирует эквивалентный поток: отдельно проверьте HR, Lossless, bitrate cap и error protection. Если конечная задача — MP3, FLAC или WAV, возвращать LC3plus-параметры не требуется; карточка тогда остаётся журналом происхождения исходника и помогает доказать, что монтаж выполнялся уже над декодированным PCM.
FAQ
LC3plus — это формат файла или кодек?
Прежде всего кодек. Эталонные инструменты используют тестовые файловые представления, но они не эквивалентны универсальному бытовому контейнеру. Один и тот же кодек может передаваться внутри разных транспортных схем.
Какое расширение должно быть у LC3plus?
У reference workflow встречаются .bin, .lc3 и .g192 в зависимости от задачи. Поэтому расширение не заменяет проверку заголовка и конфигурации.
Можно ли открыть LC3plus напрямую в АудиоМАСТЕРе ?
Нативный LC3plus-import не подтверждён. Надёжный сценарий — decoder LC3plus → WAV → АудиоМАСТЕР. Редактор используется для того этапа, который он точно выполняет: монтажа стандартного аудио.
Можно ли сразу конвертировать LC3plus в MP3?
Да, если используемый decoder или медиаконвейер понимает конкретный bitstream, но для редактирования удобнее сначала получить WAV. При прямом LC3plus → MP3 происходит декодирование в PCM и новое lossy-кодирование MP3.
Почему WAV после декодирования весит намного больше?
Потому что LC3plus — сжатый кодек, а WAV PCM хранит развернутые сэмплы. Это ожидаемо и не означает ухудшение или повреждение.
Может ли FFmpeg работать с LC3plus?
Да, при сборке с Google liblc3. Wrapper поддерживает LC3 и часть LC3plus: дополнительные кадры 2,5/5 мс и High Resolution для 48/96 кГц. Полный текущий Lossless и весь набор reference software приписывать ему нельзя.
Поддерживает ли FFmpeg 10 мс?
Да. Для wrapper доступны 2,5, 5, 7,5 и 10 мс, причём 10 мс является общим режимом для LC3 и LC3plus. Поэтому сам frame duration 10 мс не отличает два кодека.
Можно ли использовать 1,25 мс в FFmpeg ?
В liblc3 wrapper FFmpeg 1,25 мс не предусмотрен. Такой режим есть в текущем ETSI reference software. Для него используйте reference implementation.
Чем HR отличается от Lossless?
High Resolution — высокоточный режим кодирования, но сам по себе не означает bit-exact сохранение каждого сэмпла. Lossless предназначен для точного восстановления PCM при достаточном бюджете. При bitrate cap Lossless может временно переходить в HR для кадров, которым не хватает бит.
Почему Lossless доступен только в fixed-point reference code?
Lossless реализован в fixed-point reference code, поэтому для него выбирайте src/fixed_point.
Что означает 0xcc1c?
Это file_id в конфигурационном заголовке reference binary test format. В файле little-endian первые байты выглядят как 1c cc. Это полезная проверка, но она относится именно к данному тестовому формату, а не ко всем возможным транспортам LC3plus.
Можно ли восстановить исходное качество, сохранив WAV 24/96?
Нет. Более высокий sample rate или bit depth контейнера не возвращает информацию, потерянную до декодирования. Выбирайте параметры, которые сохраняют фактический декодированный сигнал и подходят для следующего этапа.
Нужно ли ставить codec pack для Windows?
Для описанного workflow нет. Reference LC3plus собирается как собственная программа, декодирует bitstream в WAV, а дальше редактор работает со стандартным файлом. Установка случайного codec pack не заменяет конкретный decoder.
Почему онлайн-конвертер не принимает .lc3?
Универсальные сервисы часто не реализуют ETSI LC3plus test formats. Кроме того, расширение неоднозначно. Отсутствие .lc3 в списке поддерживаемых входов — основание не использовать такой сайт для первого этапа.
Можно ли редактировать сжатые LC3plus-кадры без декодирования?
Обычная обрезка по волновой форме и эффекты работают с PCM, поэтому требуется декодирование. Специализированные операции над пакетами и channel coder — другой класс задач и не заменяют аудиомонтаж.
Как проверить, что моя сборка reference codec работает правильно?
Используйте комплект test vectors и сравнение с заранее рассчитанными MD5, входящие в reference package. Это проверяет корректность реализации на конкретной системе лучше, чем один произвольный аудиофайл.
Что делать, если decoder пишет ошибку на одном файле, но работает на другом?
Сравните transport format, header, frame duration, HR/Lossless, error protection и версию encoder. Два файла с одинаковым расширением могут использовать разные режимы или вообще разные форматы.
Итоговый выбор по сценариям
Для ручного редактирования в Windows используйте LC3plus reference decoder, получите WAV и откройте его в АудиоМАСТЕРе. Это разделяет кодековую и монтажную части и не требует приписывать редактору неподтверждённый LC3plus-import. Для строгой работы с ETSI, High Resolution, Lossless, error protection и test vectors используйте reference software напрямую. На macOS удобен Google liblc3 через Homebrew, если файл относится к поддерживаемому подмножеству. Для Linux и пакетных задач подходит FFmpeg с liblc3 после обязательной проверки сборки.
Главное правило при неизвестном файле — сначала идентифицировать поток, а уже затем выбирать программу. Расширение .lc3, Bluetooth-настройка или упоминание LC3 в свойствах устройства не заменяют проверку transport format. Сохраняйте исходник, используйте WAV/FLAC как мастер после монтажа и проверяйте результат параметрами и test vectors, а для Lossless — сравнением PCM.