G729 でエンコードされたオーディオ ファイルがあります。他のことをしているツールのフローで、プログラムでそれらを WAV PCM (16bit 8kHz mono) に変換する必要があります。私はそれを行う実行可能ファイルを持っています。しかし、変換するたびにその外部プロセスを生成するのは、リソースに負担がかかりすぎます。特に、それらの多くを並行して実行する必要がある場合。プロセス内でこれを呼び出せる .NET ライブラリまたはコードを探しています。
7 に答える
このリンクに従ってください: VoiceAge Open G.729 実装。また、C で記述された g729 デコーダーとエンコーダーも提供します。
g729 コンバーターに関して最初に促されるのは、ITU G729-A 規格です。かなり面倒な方法の 1 つは、g729 を pcm に変換することです。最初に wav ファイルの前に wav ヘッダーを追加します。これにより、.g729 から .wav が構築されます。 ITU 公式の g729a (公式にはマルチスレッドをサポートしていません...) lib はこのアイデアに深く関わっているため、同時実行性と、g729a lib 内の一連の静的変数を使用して適切にプログラムする方法を考慮する必要があると思います。 OP descibesのような小さなプロジェクトで、私は基本的に巨大なg729ファイルをg729チャンクに分割し、合理的な並行プログラミングの方法で個別にデコードします...
システムに G729 用の ACM コーデックがある場合は、NAudioを使用して PCM に変換できます。NAudio に含まれている NAudioDemo アプリケーションを使ってみてください。システムで利用可能な ACM コーデックが表示され、それらを使用してファイルがデコードされます。
ウィキペディアによると、G.729 にはいくつかの特許が含まれており、Sipraによってライセンスされているため、適切なライブラリを見つけることはおそらく難しいでしょう。多数の非常に小さなファイルをデコードしていない限り、新しいプロセスを生成するコストは、デコードを行うコストと比較してそれほど大きくないはずなので、持っている実行可能ファイルを使用することをお勧めします.
リソースに関する限り、はい、プロセスを生成するには、スレッドを使用する場合と比較して、より多くのリソースが必要です。ただし、マシンにコアがあるのと同じ数のプロセスのみを生成する限り、これは実際には問題になりません。より多くのプロセスを生成すると、リソースが浪費されるだけで、追加の並列処理は得られません。
ウィキペディアは次のように述べています。「G.729 には複数の企業の特許が含まれており、Sipro ( http://www.sipro.com/ ) によってライセンスされています。多くの国では、G.729 の使用にはライセンス料が必要であり、および/またはロイヤリティ料。」
しかし、アプリケーションですでにそれを考慮していると思います。
絶対に進行中でなければならない場合、1 つの解決策 (それが最善であるとは言いません) は、LGPL の下にある LibAVCodec を使用することです。
無料で使用できる参照実装: http://www.readytechnology.co.uk/open/ipp-codecs-g729-g723.1/
他の人が提起した特許の問題、参照実装は Intel プロセッサでのみ実行されること、および商用製品の一部として IPP ライブラリを使用してコードを配布するには Intel に料金を支払う必要があることに注意してください。