2014-11-10 15 views
7

Có cách nào để tải một mẫu âm thanh từ bộ nhớ sử dụng SoundPool.load phương pháp?tải âm thanh từ bộ nhớ trong Android

Unfortunatelly, tất cả methods được cung cấp trong SoundPool đang sử dụng đối số cho tệp thực. Vấn đề là tôi muốn tải âm thanh từ tệp zip trên SDcard và giải nén zip (như trong giải pháp this) không phải là một tùy chọn.

Ngoài ra, còn có solution để tải từ các tệp zip không nén, nhưng tệp của tôi bị nén (và sẽ có mật khẩu).

Vì vậy, có cách nào để có java.io.FileDescriptor đại diện cho tệp ảo, vì vậy tôi có thể triển khai một số lớp trừu tượng đặt luồng của riêng mình không?

Trân trọng.

Trả lời

2

tôi có câu trả lời cuối cùng về câu hỏi này. Đây là tính năng bị thiếu trên nền tảng Android. Khung phát lại phương tiện truyền thông Android không hỗ trợ nó trong một thời gian rất dài. Google cũng chú ý đến nó, vì vậy Android6.0 (API Level23) giới thiệu android.media.MediaDataSource có thể được sử dụng như một nguồn dữ liệu mảng byte bộ nhớ thuần túy. Trước API Level23, chúng tôi vẫn cần sao chép dữ liệu bộ nhớ vào một tệp tạm thời trong hệ thống tệp.

URL sau đây cung cấp một số manh mối hơn về vấn đề này, lời giải thích của mình là chính xác cho cả âm thanh và video: how to play video from byte array in media player

1

Tôi muốn đề nghị bạn sử dụng MemoryFile, nhưng sau khi kiểm tra nó, tôi thấy MemoryFile không có phương thức getFileDescriptor(), có nghĩa là chúng ta không thể dùng nó làm tham số trong SoundPool.load(). Nhưng tôi đã tìm thấy bài đăng này: what is the use of MemoryFile in android

Một anh chàng đã triển khai MemoryFileUtil.getFileDescriptor (memFile), anh ấy đăng mã của anh ấy ở đó. Nếu mã của anh ấy thực sự có thể hoạt động, điều đó có nghĩa là chúng tôi có thể tải mẫu âm thanh từ bộ nhớ bằng SoundPool.load(). Vấn đề duy nhất là ghi dữ liệu bộ nhớ của chúng tôi vào tệp bộ nhớ đó. Trang sau đây cho biết cách ghi dữ liệu bộ nhớ (từ kết quả truy vấn SQLITE) vào tệp bộ nhớ: http://www.programcreek.com/java-api-examples/index.php?api=android.os.MemoryFile

Tôi sẽ cập nhật cho bạn sau khi thử nghiệm.

+1

Tôi đã thất bại trong việc sử dụng đặc tả tập tin MemoryFile như các tham số cho MediaPlayer setDataSource và SoundPool.load() , nó luôn báo cáo các lỗi sau: java.io.IOException: setDataSourceFD không thành công .: status = 0x80000000 –

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