我将查看libogg的c文档,并找出如何使用c执行此操作.然后使用libogg上的包装器在C#中编写几乎相同的代码.
我使用interop助手在libogg和libvorbis上创建了一个低级包装器:https: //github.com/CodesInChaos/Xiph/blob/master/LowLevel.cs
该项目还包含一些更高级别的结构,但我不认为它们对您正在做的事情有用.
顺便说一下,如果文件之间的流ID不同,您可以简单地将文件附加到另一个文件,创建一个按顺序播放两个流的有效文件.
您可能需要使用解码API以数据包方式读取输入文件,然后将数据组合输出.可能会替换之间的流ID和granulepos.
StreamID是一个整数,用于标识ogg文件中的子流.要附加多个这样的子流,您可以简单地确保它们具有不同的ID,然后写入数据.
拆分有点烦人,因为granulepos是一个依赖于编解码器的时间戳,我不记得它是如何为vorbis定义的.这里的另一个问题是,如果没有重新编码,您不能简单地在数据包中间拆分.
您可以使用libzplay执行此操作http://libzplay.sourceforge.net/执行以下操作 所需的步骤:
链接网站上的所有内容都有很好的文档记录,包括c#.
这个答案适用于花费数小时搜索并且之前答案没有帮助的所有其他人.这对于这个问题来说不是一个非常有效的解决方案,但是在搜索这个问题的过程中出现了很多次,这可能对其他人有所帮助.:)
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |