2011-11-16 71 views
5

我有一个OGG Vorbis格式文件,我必须做两次手术与它的工作:用的Ogg Vorbis格式

  1. 切割文件的一部分,从一个位置到另一个
  2. 合并另一个文件与现有

我怎样才能实现在C#这两个操作?

+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。

流ID是标识在OGG文件子的整数。要附加多个这样的子流,您可以简单地确保它们具有不同的ID,然后写入数据。

分裂是比较讨厌的一点,因为granulepos是编解码器相关的时间戳,我不记得它是如何为Vorbis格式定义。这里的另一个问题是,你不能简单地在没有重新编码的情况下拆分数据包。

+0

我正在使用Xiph Interop库(http://oggvorbisinterop.codeplex.com/)。我必须使用哪些方法来达到我的目的? –

+0

或我的代码中使用 –

5

你可以用libzplay做到这一点http://libzplay.sourceforge.net/ 做所需的步骤正在问:

  1. 的OpenFile
  2. 寻求
  3. SetWaveOutFile(该支持.OGG出口以及其他 格式)
  4. StartPlayback
  5. StopPlayback(在需要时)

对于多种语言(包括c#),链接网站上的所有内容都非常详细。
这个答案适用于所有其他花费了数小时搜索时间并且没有得到以前答案帮助的人。这并不是解决这个问题的一个非常有效的解决方案,但是在搜索这个问题时出现了很多次,这可能对其他人有帮助。 :)

+1

上帝保佑你ntw1103。这正是我需要的。我不知道当我花了一个星期Google和.NET的ogg vorbis时它没有出现。 – bulltorious

+0

许可证(GNU GPL)如何影响分销和销售? – jjxtra