【发布时间】:2023-03-18 17:43:01
【问题描述】:
我有 G729 编码的音频文件。我需要在一个也在做其他事情的工具流中以编程方式将它们转换为 WAV PCM(16 位 8kHz 单声道)。我有一个可执行文件可以为我做到这一点。但是每次我转换时产生那个外部进程对资源来说太重了。特别是如果我需要其中许多并行完成。 寻找可以让我在我的进程中调用它的 .NET 库或代码。
【问题讨论】:
我有 G729 编码的音频文件。我需要在一个也在做其他事情的工具流中以编程方式将它们转换为 WAV PCM(16 位 8kHz 单声道)。我有一个可执行文件可以为我做到这一点。但是每次我转换时产生那个外部进程对资源来说太重了。特别是如果我需要其中许多并行完成。 寻找可以让我在我的进程中调用它的 .NET 库或代码。
【问题讨论】:
点击此链接:The VoiceAge Open G.729 Implementation。他们还提供用 C 编写的 g729 解码器和编码器。
【讨论】:
根据 Wikipedia,G.729 包含多项专利,并由 Sipra 授权,因此您可能很难找到合适的库。除非您要解码大量非常小的文件,否则生成新进程的成本与进行解码的成本相比应该不会那么大,所以我会说使用您拥有的可执行文件。
就资源而言,是的,与使用线程相比,生成进程需要更多资源。不过,这并不重要,只要您生成的进程数量与机器中的内核数量一样多。生成更多进程只会浪费资源,并且不会为您带来任何额外的并行度。
【讨论】:
维基百科说:“G.729 包括来自多家公司的专利,并由 Sipro (http://www.sipro.com/) 授权。在许多国家/地区,使用 G.729 可能需要支付许可费和/或特许权使用费。”
但我猜你已经在你的应用程序中考虑到了这一点。
如果您绝对必须在进程中,一种解决方案(不是说它是最好的)可能是使用 LGPL 下的 LibAVCodec。
【讨论】:
免费使用的参考实现在:http://www.readytechnology.co.uk/open/ipp-codecs-g729-g723.1/
请注意其他人提出的专利问题,即参考实现仅在英特尔处理器上运行,并且您需要向英特尔支付费用才能使用其 IPP 库作为商业产品的一部分分发代码。
【讨论】:
如果您的系统上有 G729 的 ACM 编解码器,则可以使用 NAudio 将其转换为 PCM。尝试使用 NAudio 中包含的 NAudioDemo 应用程序,该应用程序将向您显示系统上可用的 ACM 编解码器,并使用它们解码文件。
【讨论】:
当谈到 g729 转换器时,首先提示我的是 ITU G729-A 标准。一个非常麻烦的方法是将 g729 转换为 pcm,首先它们在您的 wav 文件前面添加一个 wav 标头。从.g729.由于ITU官方g729a(并且官方不支持多线程......)lib高度参与了这个想法,我想你必须考虑并发以及如何在g729a lib.I中使用一堆静态变量正确编程曾经参与过像 OP descibes 这样的小项目,我基本上将巨大的 g729 文件拆分为 g729 块,并以合理的并发编程方式单独解码它们......
【讨论】:
如果您只想查看文件所需的编解码器,请转到GSopt并下载最新版本(您可以click here直接打开下载页面)。
下载后,解压文件打开文件夹并运行EXE,现在从浏览按钮中选择文件,文件加载后将显示其所有信息。 (如果文件未显示在browse dialogue box 中,只需从browse file dialogue 中选择All Files(*.*))
【讨论】: