2011-12-05 26 views
12

Tôi gặp sự cố với lớp soundpool. Ở đây nó đi:Lỗi SoundPool: không còn tên theo dõi nào nữa

Trong ứng dụng trò chơi của tôi (ứng dụng âm nhạc btw) Tôi cần để tái tạo ít nhất 32 âm thanh ngắn cùng một lúc, vì vậy tôi tuyên bố Soundpool của tôi như thế:

private SoundPool sp; 
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0); 

Sau đó tôi tải tất cả các âm thanh MP3 cần thiết, khoảng 80 âm thanh của mỗi 55KB. Tôi không gặp khó khăn khi tải tất cả các âm thanh, nhưng nó chậm! Nó không có vấn đề gì. Vấn đề thực sự là khi tôi chơi khoảng 20 âm thanh cùng một lúc, có một lỗi trong log của tôi:

ERROR/AudioFlinger(59): no more track names available 
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12 
ERROR/SoundPool(26349): Error creating AudioTrack 

Sau đó mọi âm thanh mà tôi cố gắng để chơi ném những lỗi tương tự, và không có âm thanh có thể được chơi. Thậm chí không có âm thanh của Hoạt động/soundpool khác. Tôi không có đầu mối về những gì đang xảy ra hoặc cách sửa chữa nó! Tôi có nên thay đổi định dạng của các tập tin âm thanh không? Tôi có nên giải phóng bộ nhớ hay thứ gì đó sau khi phát âm thanh không?

(Tôi đang thử nghiệm trên Samsung Galaxy S I9000, 2.3.3 hệ thống hệ điều hành. Các ứng dụng là 2.1)

+0

Có lẽ bạn cần triển khai SoundPool.OnLoadCompleteListener? – Codeman

+0

để gọi phát hành() cho mỗi AudioTracks? – Codeman

+0

Đảm bảo rằng chế độ vòng lặp không được bật, không có bản nhạc nào được đặt ở chế độ tạm dừng và mọi mp3 thực sự ngắn như bạn nghĩ (không có sự im lặng ở cuối). Vì có một số lượng hạn chế các bản âm thanh có sẵn, bạn phải giữ số lượng bản nhạc đang chạy thấp. Có thể có ít hơn 32 bản nhạc có sẵn, vì vậy bạn không thể phát nhiều âm thanh cùng một lúc. Ngoài ra một số triển khai là lỗi, và có thể treo trên một số bài hát (có thể phụ thuộc vào một tập tin mp3 xấu hoặc một cái gì đó) do đó các bài hát có sẵn được sử dụng hết khá nhanh. Nếu ứng dụng gặp sự cố, đôi khi các bản nhạc không được giải phóng, do đó không có âm thanh. – dronus

Trả lời

1

Một vài suy nghĩ ở đây. Một: tham số đầu tiên cho hàm tạo SoundPool không phải là số lượng âm thanh bạn muốn tải vào đó, đó là số lượng luồng đồng thời tối đa mà bạn sẽ phát. Thứ hai, SoundPool có bộ nhớ giới hạn cho âm thanh, khoảng 1MB. Vì vậy, tôi sẽ không ngạc nhiên nếu bạn nhấn một số giới hạn không có giấy tờ về số lượng bản nhạc bạn có thể tải cùng một lúc. Lưu ý rằng 80 lần âm thanh 55k cho mỗi âm thanh chắc chắn là hơn 1MB. Và giới hạn đó là cho sau khi các tập tin mp3 đã được giải nén vào dữ liệu âm thanh bên trong SoundPool.

4

thấy this (in android group)

Đối với âm thanh, có một giới hạn cứng của 32 đối tượng AudioTrack tích cực mỗi thiết bị (không cho mỗi ứng dụng: bạn cần chia sẻ những 32 với phần còn lại của hệ thống),

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