2011-11-16 6 views
5

私はOGGのvorbisのファイルを持っていると私はそれで2つの操作を行う必要がある。のOgg Vorbisのを使用した作業

  1. 既存の
  2. で別のファイルをマージする別の
  3. に一つの位置からファイルの一部を切断

どのようにC#でこれらの2つの操作を実現できますか?

+1

私は公式のXiph.orgのドキュメントを読もうとしましたが、私の目的には役に立たない方法が見つかりませんでした。 –

+0

「マージ」とはどういう意味ですか?シンプルな連結? – CodesInChaos

+0

はい、既存のファイルに新しいファイルを追加するだけです –

答えて

5

私はliboggのcドキュメントを調べて、cでこれを行う方法を理解します。そして、libogg上のラッパーを使ってC#でほぼ同じコードを書いてください。

私は相互運用アシスタントを使用してliboggとlibvorbisを超える低レベルのラッパーを作成しました: https://github.com/CodesInChaos/Xiph/blob/master/LowLevel.cs

プロジェクトはまた、いくつかのより高いレベルの構造が含まれていますが、私は彼らが何のために有用であるだろうとは思わないことやっている。

BTWファイル間のストリームIDが異なる場合、ファイルを別のファイルに追加するだけで、両方のストリームを順番に再生する有効なファイルを作成することができます。

デコードAPIを使用して入力ファイルをパケット単位で読み込み、結合されたデータをパケット単位で出力する必要があります。間におそらくストリームIDとgranuleposを置き換えます。

StreamIDは、oggファイル内のサブストリームを識別する整数です。そのような複数のサブストリームを追加するには、異なるIDを持つことを確認してから、データを書き込んでください。

granuleposはコーデックに依存するタイムスタンプであり、vorbisの定義方法は覚えていないので、分割は少し面倒です。もう1つの問題は、パケットの途中で単純に分割して再エンコードすることができないことです。あなたはlibzplayについて聞かれているものを行うために必要なhttp://libzplay.sourceforge.net/ の手順でこれを行うことができます

+0

私はXiph Interop Library(http://oggvorbisinterop.codeplex.com/)を使用しています。私の目的のために使うべき方法は? –

+0

またはあなたのコードで使用するもの –

5

  1. のOpenFile
  2. が、これは、エクスポート.OGGだけでなく、他の フォーマットをサポートしています(
  3. SetWaveOutFileを求めます)
  4. StartPlayback
  5. StopPlayback(必要時)

すべてのことは、リンクされたサイトで、c#を含む複数の言語について非常によく文書化されています。
この回答は、何時間もの検索に費やされ、以前の回答によって助けられなかった他のすべての人々のためのものです。これはここの問題に対する非常に効率的な解決策ではありませんが、この質問の検索は何度も出てきましたが、これは他の人に役立つかもしれません。 :)

+1

神はあなたにntw1103を祝福します。これはまさに私が必要としていたものです。.NETとogg vorbisのグーグル・グーグルのように過ごしたときに、どうやってそれが起こらなかったのか分かりません。 – bulltorious

+0

ライセンス(GNU GPL)は販売および販売にどのように影響しますか? – jjxtra

関連する問題