2011-11-16 20 views
5

Tôi có một file ogg vorbis và tôi phải làm hai cuộc phẫu thuật với nó:Làm việc với Ogg Vorbis

  1. cắt một phần của một tập tin từ một vị trí khác
  2. sáp nhập tập tin khác với một
  3. hiện

Làm cách nào tôi có thể nhận ra hai hoạt động này trong C#?

+1

Tôi đã cố gắng đọc tài liệu chính thức của Xiph.org nhưng tôi không tìm thấy bất kỳ phương pháp hữu ích nào cho mục đích của mình. –

+0

Bạn có ý nghĩa gì khi "hợp nhất"? Nối đơn giản? – CodesInChaos

+0

Có, tôi muốn chỉ cần nối thêm tệp mới vào tệp hiện có –

Trả lời

5

Tôi sẽ xem tài liệu c cho libogg và tìm hiểu cách thực hiện điều này với c. Và sau đó viết gần như cùng một mã trong C# bằng cách sử dụng một wrapper qua libogg.

Tôi đã tạo một wrapper mức thấp hơn libogg và libvorbis sử dụng trợ lý interop: https://github.com/CodesInChaos/Xiph/blob/master/LowLevel.cs

dự án đó cũng chứa một số cấu trúc cấp cao hơn, nhưng tôi không nghĩ rằng họ sẽ có ích cho những gì bạn đang làm.

BTW nếu ID luồng giữa các tệp khác nhau, bạn có thể chỉ cần thêm tệp vào tệp khác tạo tệp hợp lệ phát cả hai luồng theo thứ tự.

Bạn có thể cần phải đọc các tập tin đầu vào gói khôn ngoan bằng cách sử dụng API giải mã, và sau đó viết dữ liệu kết hợp ra gói khôn ngoan. Có thể thay thế ID luồng và granulepos ở giữa.

StreamID là số nguyên xác định các dòng phụ trong tệp ogg. Để nối thêm nhiều substream như vậy, bạn có thể chỉ cần đảm bảo rằng chúng có một ID khác và sau đó ghi dữ liệu.

Tách nhỏ gây khó chịu hơn một chút vì granulepos là dấu thời gian phụ thuộc codec và tôi không nhớ cách xác định thời gian được định nghĩa cho vorbis. Một vấn đề khác ở đây là bạn không thể chỉ đơn giản là tách ở giữa một gói mà không cần mã hóa lại.

+0

Tôi đang sử dụng Thư viện Interiph Xiph (http://oggvorbisinterop.codeplex.com/). Tôi phải sử dụng phương pháp nào cho mục đích của mình? –

+0

hoặc những gì tôi phải sử dụng trong mã của bạn –

5

Bạn có thể làm điều này với libzplay http://libzplay.sourceforge.net/ Các bước cần thiết để làm những gì đang được hỏi về:

  1. OpenFile
  2. Seek
  3. SetWaveOutFile (điều này hỗ trợ .ogg xuất khẩu cũng như các định dạng khác)
  4. StartPlayback
  5. StopPlayback (tại thời điểm cần thiết)

Mọi thứ được ghi lại rất tốt trên trang web được liên kết cho nhiều ngôn ngữ, bao gồm cả C#.
Câu trả lời này dành cho tất cả những người khác dành hàng giờ tìm kiếm và không được các câu trả lời trước đó giúp đỡ. Đây không phải là một giải pháp rất hiệu quả cho vấn đề ở đây, nhưng trong khi tìm kiếm câu hỏi này đã xuất hiện nhiều lần, và điều này có thể hữu ích cho người khác. :)

+1

Xin Chúa ban phước cho bạn ntw1103. Đây chính xác là những gì tôi cần.Tôi không biết làm thế nào nó không xuất hiện khi tôi dành một tuần như Googling .NET và ogg vorbis. – bulltorious

+0

Giấy phép (GNU GPL) ảnh hưởng đến phân phối và bán hàng như thế nào? – jjxtra

Các vấn đề liên quan