5

ogg vorbis ファイルがあり、2 つの操作を行う必要があります。

  1. ファイルの一部をある位置から別の位置に切り取る
  2. 別のファイルを既存のファイルとマージする

これら 2 つの操作を C# で行うにはどうすればよいですか?

4

2 に答える 2

6

libzplay http://libzplay.sourceforge.net/でこれを行うことができます 。

  1. ファイルを開く
  2. 求める
  3. SetWaveOutFile (これは .ogg エクスポートと他の形式をサポートします)
  4. StartPlayback
  5. StopPlayback(必要なときに)

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

于 2012-02-02T02:32:22.310 に答える
5

libogg の c ドキュメントを調べて、c でこれを行う方法を見つけます。次に、libogg のラッパーを使用して C# でほぼ同じコードを記述します。

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

そのプロジェクトにはいくつかの高レベルの構成要素も含まれていますが、それらがあなたがやっていることには役に立たないと思います。

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

おそらく、デコード API を使用して入力ファイルをパケットごとに読み取り、結合されたデータをパケットごとに書き込む必要があります。ストリーム ID とグラニュレポスをその間で置き換える可能性があります。

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

分割は少し厄介です。granlepos はコーデックに依存するタイムスタンプであり、vorbis でどのように定義されているか覚えていません。ここでのもう 1 つの問題は、再エンコードせずにパケットの途中で単純に分割できないことです。

于 2011-11-16T14:09:16.013 に答える