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





Согласно Википедии, G.729 включает несколько патентов и лицензируется Сипра, так что вам, вероятно, не повезет с поиском подходящего лоббара. Если вы не декодируете большое количество очень маленьких файлов, стоимость создания нового процесса не должна быть такой большой по сравнению со стоимостью декодирования, поэтому я бы сказал, используйте исполняемый файл, который у вас есть.
Что касается ресурсов, то да, для создания процессов требуется гораздо больше ресурсов по сравнению с использованием потоков. Это не должно иметь большого значения, если вы создаете столько процессов, сколько ядер у вас есть на вашем компьютере. Создание большего количества процессов просто тратит ресурсы и не дает вам никакого дополнительного параллелизма.
В Википедии говорится: «G.729 включает патенты нескольких компаний и лицензируется Sipro (http://www.sipro.com/). В ряде стран использование G.729 может потребовать лицензионных сборов и / или лицензионных отчислений».
Но я думаю, вы уже учли это в своем заявлении.
Если вам абсолютно необходимо быть в процессе, одним из решений (не говоря уже о том, что это лучшее) может быть использование LibAVCodec под LGPL.
Перейдите по этой ссылке: Реализация VoiceAge Open G.729. Они также предоставляют декодер и кодировщик g729, написанные на C.
Они больше не поддерживают свою «открытую реализацию» и сообщили мне, что информация все еще есть на их веб-сайтах, но они скоро ее удалят (я не знаю, как скоро).
Бесплатная эталонная реализация по адресу: 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)
Кто-нибудь знает, где можно найти еще одну копию этого? Я смотрю на сайт пару месяцев, и их ссылка на код не работает. voiceage.com/media/G729.zip