Программное преобразование аудио G729 в ​​WAV PCM

У меня есть аудиофайлы в кодировке G729. Мне нужно программно преобразовать их в WAV PCM (16 бит 8 кГц моно) в потоке инструмента, который тоже делает другие вещи. У меня есть исполняемый файл, который сделает это за меня. Но создание этого внешнего процесса каждый раз, когда я конвертирую, требует слишком больших ресурсов. Особенно, если мне нужно, чтобы многие из них выполнялись параллельно. Ищу библиотеку .NET или код, который позволил бы мне вызывать это внутри моего процесса.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
8 996
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Согласно Википедии, G.729 включает несколько патентов и лицензируется Сипра, так что вам, вероятно, не повезет с поиском подходящего лоббара. Если вы не декодируете большое количество очень маленьких файлов, стоимость создания нового процесса не должна быть такой большой по сравнению со стоимостью декодирования, поэтому я бы сказал, используйте исполняемый файл, который у вас есть.

Что касается ресурсов, то да, для создания процессов требуется гораздо больше ресурсов по сравнению с использованием потоков. Это не должно иметь большого значения, если вы создаете столько процессов, сколько ядер у вас есть на вашем компьютере. Создание большего количества процессов просто тратит ресурсы и не дает вам никакого дополнительного параллелизма.

В Википедии говорится: «G.729 включает патенты нескольких компаний и лицензируется Sipro (http://www.sipro.com/). В ряде стран использование G.729 может потребовать лицензионных сборов и / или лицензионных отчислений».

Но я думаю, вы уже учли это в своем заявлении.

Если вам абсолютно необходимо быть в процессе, одним из решений (не говоря уже о том, что это лучшее) может быть использование LibAVCodec под LGPL.

Ответ принят как подходящий

Перейдите по этой ссылке: Реализация VoiceAge Open G.729. Они также предоставляют декодер и кодировщик g729, написанные на C.

Кто-нибудь знает, где можно найти еще одну копию этого? Я смотрю на сайт пару месяцев, и их ссылка на код не работает. voiceage.com/media/G729.zip

thaspius 03.04.2013 17:43

Они больше не поддерживают свою «открытую реализацию» и сообщили мне, что информация все еще есть на их веб-сайтах, но они скоро ее удалят (я не знаю, как скоро).

nightwatch 17.04.2013 11:26

Бесплатная эталонная реализация по адресу: http://www.readytechnology.co.uk/open/ipp-codecs-g729-g723.1/

Обратите внимание на патентные вопросы, поднятые другими, тот факт, что эталонная реализация работает только на процессорах Intel и что вам нужно платить Intel за распространение кода с использованием их библиотеки IPP как части коммерческого продукта.

Если в вашей системе есть кодек ACM для G729, вы можете использовать NAudio, чтобы преобразовать его в PCM. Попробуйте использовать приложение NAudioDemo, входящее в состав NAudio, которое покажет вам, какие кодеки ACM доступны в вашей системе, и расшифрует файл с их помощью.

Когда дело доходит до конвертера g729, меня в первую очередь подсказывают стандарты ITU G729-A. Один довольно громоздкий способ - преобразовать g729 в ​​pcm, сначала они добавляют заголовок wav перед вашими файлами wav. Это создает .wav из .g729. Поскольку официальный ITU g729a (и официально не поддерживает многопоточность ...) lib активно участвует в этой идее, я думаю, вам нужно учитывать параллелизм и то, как правильно программировать с кучей статических переменных в g729a lib. в небольшом проекте, таком как OP descibes, я в основном разбиваю огромные файлы g729 на куски g729 и декодирую их индивидуально, используя разумное программирование параллелизма ...

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

После загрузки извлеките файл из открытой папки и запустите EXE. Теперь выберите файл с помощью кнопки обзора, и после загрузки файла будет показана вся его информация. (Если файл не отображается в browse dialogue box, просто выберите All Files(*.*) из browse file dialogue)

Другие вопросы по теме