2012-05-06 22 views
10

Tôi đang cố gắng sử dụng decodeAudioData để giải mã và phát lại phần ban đầu của tệp mp3 lớn hơn, trong javascript. Cách tiếp cận đầu tiên, thô lỗ của tôi là cắt một số byte ra khỏi đầu mp3 và cho chúng giải mãAudioData. Không ngạc nhiên là điều này không thành công.Xác định 'chunk mp3 hợp lệ' cho decodeAudioData (API WebAudio)

Sau một số lần đào, có vẻ như decodeAudioData chỉ có thể hoạt động với 'các đoạn mp3 hợp lệ' như được ghi trong tài liệu Fair Dinkum Thinkum, here.

Tuy nhiên không có sự giải thích rõ về cấu trúc của một đoạn mp3 hợp lệ (tác giả của bài nói trên không đi sâu vào điều này). Tôi nhận thức được các bộ tách mp3 khác nhau tồn tại ở đó nhưng tôi muốn tiếp cận chương trình này. (Tôi đang cố gắng để thực hiện một loại 'người đàn ông nghèo của streaming' bằng cách sử dụng nodejs ở phía máy chủ).

Vì vậy, chia nhỏ trên tiêu đề khung mp3 là đủ hay tôi cần phải làm nhiều hơn? (có lẽ 'đóng' mỗi đoạn bằng cách chắp thêm một số dữ liệu vào cuối?) Làm thế nào về 'hồ chứa byte'? Điều này có gây ra vấn đề không? Đối với hồ sơ, tôi hiện đang làm việc với 128kbps cbr mp3s. Điều này có đơn giản hóa quá trình theo bất kỳ cách nào không?

Mọi thông tin về những gì decodeAudioData mong đợi là dữ liệu vaild sẽ được đánh giá cao.

Cảm ơn bạn.

PS: Tôi nhận ra rằng đây có lẽ là một yêu cầu để làm rõ trên Fair Dinkum Thinkum's post nhưng danh tiếng thấp của tôi là giữ cho tôi không đăng một bình luận. Vì vậy, tôi không thể thấy cách khác để làm điều đó nhưng với một câu hỏi mới. Cảm ơn một lần nữa.

+2

Đoạn mp3 là một khung hình, đại diện cho 0,028 giây âm thanh. Kích thước của khung đó là biến, tùy thuộc vào tốc độ bit của âm thanh được mã hóa. CBR mp3 làm cho mọi việc trở nên dễ dàng hơn, vì kích thước khung hình sẽ không đổi trong suốt tệp và bạn có thể tính toán sai số của bất kỳ dấu thời gian cụ thể nào trong âm thanh. –

+0

Biến điều này không đúng, ví dụ, các tệp mp3 128kbps chứa các khung hình 417 byte cũng như các khung 418 byte. (một số khung chứa byte thừa như đệm) – biril

Trả lời

5

Sau khi thử nghiệm nhiều hơn với decodeAudioData (trên Chrome) đây là những gì tôi đã tìm thấy:

  • Bất kỳ ban đầu mp3 đoạn sẽ được giải mã thành công miễn là nó được chia trên một ranh giới khung mp3. Việc tìm thấy ranh giới đó có thể không phải lúc nào cũng tầm thường (ví dụ: liên quan đến phân tích cú pháp tiêu đề mp3) vì thậm chí các bitrate bitrate không đổi luôn không chứa các khung có kích thước không đổi. Ví dụ: các tệp mp3 128kbps chứa khung hình có kích thước 417 byte cũng như khung 418 byte. (một số khung chứa một byte thừa làm đệm).
  • Đoạn mp3 tùy ý là không phải đảm bảo có thể giải mã được ngay cả khi được chia thành các ranh giới khung chính xác trên 'cả hai mặt'. Một số phần của loại này có thể được giải mã nhưng một số khác gây ra decodeAudioData để ném một lỗi. Tôi đoán điều này đã làm với mp3 bit reservoir mà tạo ra một sự phụ thuộc giữa các khung hình mp3.
4

Nếu bạn chia tệp thành nhiều phần bắt đầu với các tiêu đề MP3 hợp lệ (12 bit của '1' được căn chỉnh trên ranh giới byte: FF Fx), bạn có thể sẽ ổn thôi.

+0

Đó là những gì tôi nghĩ, nhưng kết quả của tôi cho đến nay hiển thị khác: Hiện tại tôi chỉ đang cố gắng giải quyết trường hợp đơn giản hơn khi phát lại đoạn _initial_ của mp3. Bất kỳ khung tìm thấy trong phân đoạn ban đầu này rõ ràng bắt đầu với một tiêu đề hợp lệ nhưng vẫn decodeAudioData không thành công ... – biril

+2

những gì về cuối của đoạn, nó kết thúc ngay trước khi tiêu đề FFFx tiếp theo bắt đầu?nếu bạn để lại một số dữ liệu bổ sung hoặc cắt quá ngắn, nó có thể ảnh hưởng đến phát lại. – lenik

+0

Vâng, điều đó có vẻ như là lừa. Cảm ơn và tôi sẽ đăng bất kỳ phát hiện mới nào. – biril

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