2010-02-25 38 views
12

Phiên bản ngắn: Cách tốt nhất để lấy dữ liệu được mã hóa bằng MP3 (và lý tưởng là trong AAC/Ogg/WMA) vào một mảng Java hoặc ByteBuffer sau đó tôi có thể thao tác?Giải mã dữ liệu âm thanh được mã hóa (MP3, v.v.) trên Android mà không cần chơi nó

Tôi đang tập hợp một chương trình làm chậm và tăng tốc các tệp âm thanh làm một trong các tính năng của nó. Điều này làm việc tốt cho các tệp WAV, là tiêu đề cộng với dữ liệu nhị phân chính xác cần được gửi đến loa và bây giờ tôi cần triển khai nó cho MP3 (lý tưởng, cũng sẽ hỗ trợ AAC, Ogg và WMA , nhưng vì những định dạng này ít phổ biến hơn, nên không cần đến các định dạng này là ). Android không hiển thị giao diện để giải mã MP3 mà không phát, vì vậy tôi cần tạo giao diện .

Ba tùy chọn thể hiện mình, mặc dù tôi mở cho người khác:

1) Viết giải mã của riêng tôi. Tôi đã có một máy dò khung chức năng mà tôi đã hy vọng sử dụng cho tùy chọn (3), và bây giờ chỉ cần triển khai bảng giải mã Huffman.

2) Sử dụng JLayer hoặc thư viện Java tương đương, để xử lý giải mã . Tôi không hoàn toàn rõ ràng về những gì các nhánh giấy phép đang ở đây.

3) Kết nối với thư viện libmedia/MediaPlayerService. Đây là nội dung của SoundPool và số lượng sử dụng dịch vụ đó làm cho tôi tin rằng rằng mặc dù chính thức không ổn định nhưng việc triển khai đó sẽ không thực hiện ở bất kỳ đâu. Điều này có nghĩa là viết mã JNI để kết nối với dịch vụ, nhưng Tôi thấy rằng đó là một lỗ thỏ sâu. Trên bề mặt, tôi là gặp sự cố với mẫu sp <>.

+0

Bất kỳ sự may mắn nào với vấn đề này? – twk

+0

bạn có thành công trong việc giải mã dữ liệu âm thanh không? Nếu vậy, làm thế nào bạn làm điều đó? –

Trả lời

1

Tôi đã làm điều đó với libmad và NDK. JLayer là cách để làm chậm và khung phương tiện truyền thông là một mục tiêu di động. Bạn có thể tìm thông tin và mã nguồn tại http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231

+1

Điều này có vẻ như một giải pháp có phần hạn chế, vì libmad được cấp phép theo GPL; có nghĩa là để sử dụng nó, tôi sẽ cần phải cấp giấy phép cho ứng dụng của tôi theo GPL, đó không phải là thứ mà tôi đã lên kế hoạch thực hiện (và có vẻ như bạn có thể ở cùng một chiếc thuyền). Đây là một phần của những gì làm cho JLayer hấp dẫn: Đó là giấy phép LGPL. Android được Apache cấp phép, vì vậy bạn thực sự rõ ràng. Một phần quan trọng của tôi nghi ngờ rằng khung phương tiện truyền thông là một mục tiêu di động: Tại thời điểm này, nó được ăn sâu vào nhiều đối tượng cấp cao hơn (MediaPlayer và SoundPool, chủ yếu) mà tôi nghi ngờ chúng sẽ bị xóa. –

1

Tôi chưa thử, nhưng mp3transform là LGPL.

+2

không hỗ trợ android javax.sound. lib này sử dụng nó, vì vậy nó không hữu ích cho android – Adem

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