2011-11-16 10 views
5

Tengo un archivo Ogg Vorbis y tengo que hacer dos operaciones con ella:Trabajar con Ogg Vorbis

  1. cortar una parte de un archivo desde una posición a otra
  2. fusión de otro archivo con uno ya existente

¿Cómo puedo realizar estas dos operaciones en C#?

+1

Intenté leer la documentación oficial de Xiph.org pero no encontré ningún método útil para mis propósitos. –

+0

¿Qué quiere decir con "fusión"? Concatenación simple? – CodesInChaos

+0

Sí, quiero agregar simplemente un archivo nuevo al existente –

Respuesta

5

Me gustaría ver la documentación c para libogg, y averiguar cómo hacer esto con c. Y luego escriba casi el mismo código en C# usando un contenedor sobre libogg.

He creado un envoltorio de bajo nivel sobre libogg y libvorbis utilizando el asistente de interoperabilidad: https://github.com/CodesInChaos/Xiph/blob/master/LowLevel.cs

Ese proyecto también contiene algunas construcciones de más alto nivel, pero no creo que sean útiles para lo que está haciendo

BTW si las ID de flujo entre los archivos difieren, puede simplemente agregar un archivo a otro creando un archivo válido que reproduzca ambas secuencias en secuencia.

Probablemente necesite leer los paquetes de entrada sabiamente utilizando la API de decodificación, y luego escriba los paquetes de datos combinados sabio. Posiblemente reemplazando la ID del flujo y los gránulos en el medio.

StreamID es un número entero que identifica substreams en un archivo ogg. Para agregar múltiples substreams de este tipo, simplemente puede asegurarse de que tengan una ID diferente y luego escribir los datos.

La división es un poco más molesto, ya que granulepos es una marca de tiempo dependiente del códec, y no recuerdo cómo se define para vorbis. Otro problema aquí es que no puede simplemente dividirse en el medio de un paquete sin volver a codificar.

+0

Estoy usando la biblioteca Xiph Interop (http://oggvorbisinterop.codeplex.com/). ¿Qué métodos debo usar para mis propósitos? –

+0

o lo que tengo que usar en su código –

5

Usted puede hacer esto con libzplay http://libzplay.sourceforge.net/ se le está pidiendo los pasos necesarios para hacer lo que acerca de:

  1. OpenFile
  2. Seek
  3. SetWaveOutFile (.ogg esto apoya la exportación, así como otros formatos )
  4. StartPlayback
  5. StopPlayback (en el momento necesario)

Todo está extremadamente bien documentado en el sitio vinculado para varios idiomas, incluido C#.
Esta respuesta es para todas las otras personas que pasaron horas buscando y que no fueron ayudadas por las respuestas anteriores. Esta no es una solución muy eficiente para el problema aquí, pero al buscar esta pregunta surgió muchas veces, y esto podría ser útil para otros. :)

+1

God Bless you ntw1103. Esto es exactamente lo que necesitaba.No sé cómo no surgió cuando pasé una semana buscando en Google .NET y ogg vorbis. – bulltorious

+0

¿Cómo afecta la licencia (GNU GPL) la distribución y las ventas? – jjxtra