2010-11-04 38 views
5

Tôi biết rằng SoundPool được thiết kế để xử lý các âm thanh nhỏ như fx và tôi đảm bảo 4 clip âm thanh mà tôi muốn phát một lần theo một số trình tự là đủ nhỏ.và một lần nữa về các vấn đề về bộ nhớ với SoundPool

Tôi đã sử dụng chất lượng ogg 0 và clip là 35kb, 14kb, 21kb và 23kb tổng cộng 92kb âm thanh nén. Tôi không có ý tưởng làm thế nào để ước tính kích thước không nén sẽ là gì, nhưng nó không phải là rất nhiều, phải không?

Vì vậy, khi tôi phát 4 âm thanh theo thứ tự, nó hoạt động tốt trong 9 lần đầu tiên (9 chuỗi x 4 âm thanh) nhưng bắt đầu gây ra các vấn đề về bộ nhớ trên chuỗi nines cho một trong các âm thanh. Nó luôn luôn là chuỗi 9 khi tôi bắt đầu thấy lỗi.

Cách tốt nhất để xử lý điều đó là gì? Tôi có một vài ý tưởng:

1) nén âm thanh thậm chí nhiều hơn (ogg chất lượng -1 và mono thay vì stereo)

2) dỡ bỏ và tải âm thanh thường xuyên sử dụng SoundPool.load và SoundPool.unload

3) phát hành và tạo lại thời gian cá nhân của SoundPool từ thời điểm

Tôi có thể làm gì khác không? Nó là đáng xấu hổ rằng api android không thể xử lý các clip nhỏ như vậy. Tôi tự hỏi như thế nào mọi người tạo ra trò chơi với rất nhiều hiệu ứng âm thanh ...

lỗi trông giống như rằng:

LỖI/AudioFlinger (35): không đủ bộ nhớ cho kích thước AudioTrack = 1.048.640 DEBUG/MemoryDealer (35) : AudioTrack (0x25018, size = 1048576)

Trả lời

2

Có vẻ như tôi đã có thể giải quyết vấn đề của mình sau:

1) cắt ngắn clip âm thanh của tôi từ 44 xuống 22khz. Kích thước không nén được cắt giảm một nửa (tôi đã tìm cách ước tính kích thước âm thanh không nén - xuất clip của bạn thành wav không nén). Tôi đã sử dụng công cụ mã nguồn mở đẹp Audacity

2) cắt âm thanh hơn để giảm thời gian

3) đặt try/catch xung quanh play() chỉ trong trường hợp (nó lỗi bắt khi nó cố gắng để phát âm thanh nhưng không thể)

+0

Cảm ơn nó làm việc cho tôi. Trước đó tập tin âm thanh của tôi bị cắt. Nhưng tôi đã chuyển đổi và resample rằng m4a từ 44 đến 22 và bây giờ nó hoạt động mà không bị cắt. –

0

Điều đó có vẻ lạ. SoundPool nên mở rộng các clip âm thanh của bạn vào bộ nhớ khi nó tải chúng, và một khi được nạp, tôi sẽ không mong đợi bạn chạy vào các vấn đề bộ nhớ sau này. Khi tôi gặp vấn đề về bộ nhớ, nó đã đúng ngay từ đầu, không phải sau này. Bạn chắc chắn rằng bạn không tải thêm âm thanh sau này?

Để trả lời câu hỏi khác của bạn, một số trò chơi sử dụng âm thanh JET Player và MIDI thay vì SoundPool. Chương trình mẫu JetBoy có trong SDK Android là một ví dụ tuyệt vời về cách thực hiện loại công việc âm thanh này trong ứng dụng.

+0

cảm ơn vì đã trả lời ... Tôi đã thử nghiệm ứng dụng của mình ngày hôm nay và nhận thấy rằng vấn đề xảy ra với 4 âm thanh mà tôi lặp lại bằng cách sử dụng vòng lặp soundpool. Tôi đã tải 17 clip khác và chúng hoạt động tốt nhưng sau khi ứng dụng của tôi kích hoạt một trong 4 clip được lặp lại, nó bị treo. Tôi tải trước tất cả chúng khi hoạt động được tạo và không có nơi nào khác. Tôi downsampled clip của tôi từ 44 đến 22khz và nó đã giúp một chút, nhưng ứng dụng vẫn treo với vấn đề bộ nhớ. – mishkin

+0

tôi cần phải chơi các tập tin ogg vì vậy tôi đoán JetBoy không phải là một lựa chọn cho tôi nhưng nhờ gợi ý – mishkin

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