2014-10-22 13 views
5

Tôi có một ứng dụng phát tệp âm thanh mỗi lần chạm vào màn hình. Đối với một số lý do, ứng dụng sẽ sụp đổ mỗi một lần trong một thời gian với các lỗi sau:Không thể tải tài nguyên âm thanh Swift SKAction

reason: 'Resource tick.mp3 can not be loaded' 

Trong trường hợp bạn cần nó, đây là cách tôi chơi các tập tin mỗi lần màn hình được khai thác:

runAction(SKAction.playSoundFileNamed("tick.mp3", waitForCompletion: false)) 

Điều này không xảy ra thường xuyên, có thể 1 trong 10 lần chạy ứng dụng. Hầu hết mọi thứ đều hoạt động như mong đợi. Tôi ước gì tôi biết mình đang làm gì để gây ra vụ tai nạn nhưng tôi không có đầu mối! Tôi chỉ cần khai thác đi dường như không có gì khác so với thời điểm nó không sụp đổ. Sau đó tất cả của một đột ngột tôi nhận được vấn đề này ...

+0

Có thể tải trước hành động âm thanh vào trợ giúp liên tục toàn cầu không? – Okapi

+0

Vui lòng cung cấp cho chúng tôi liên kết đến 'Tài nguyên tick.mp3', vì vậy tôi sẽ cố gắng giải quyết nó. (Trên DropBox chẳng hạn) –

+0

@ kartboy55 Nhật ký lỗi cũng sẽ hữu ích ... Thông báo lỗi thực sự là gì? – Whirlwind

Trả lời

3

Nếu bạn phát âm thanh qua một hàm playSound, nó sẽ làm việc

var soundFile = SKAction.playSoundFileNamed("bark.wav", waitForCompletion: false) 
playSound(soundFile) 

playSound:

func playSound(soundVariable : SKAction) 
{ 
    runAction(soundVariable) 
} 
+0

Đây là cùng một –

+5

@NikitaZernov Không có điều này không giống nhau vì vậy tôi không chắc chắn lý do tại sao bạn bỏ phiếu. Trước khi tải tập tin âm thanh và sau đó chơi nó thông qua một chức năng 'playSound' ngăn ngừa sự cố. Các câu hỏi tương tự đã được hỏi nhiều lần trước đây và điều này luôn là giải pháp. Điều này được cho là một lỗi nhanh chóng. Tôi biết nó trông giống nhau nhưng không chỉ đưa ra giả định bởi vì trong trường hợp này bạn sai. –

+1

Cảm ơn Reece Kenney! Quyết định của bạn đã giúp tôi rất tốt! –

4

Trước hết, nó có vẻ như bạn đang sử dụng file mp3 để chơi (ngắn) hiệu ứng âm thanh. Khi sử dụng mp3, âm thanh sẽ được nén. Trong bộ nhớ, nó sẽ có kích thước khác nhau, lớn hơn. Ngoài ra còn có một hiệu suất giải mã hình phạt (giải mã mất thời gian CPU). Điều quan trọng nhất, và lý do tại sao tôi đang nói về các tập tin mp3 có thể được tìm thấy trong docs:

When using hardware-assisted decoding, the device can play only a single instance of one of the supported formats at a time. For example, if you are playing a stereo MP3 sound using the hardware codec, a second simultaneous MP3 sound will use software decoding. Similarly, you cannot simultaneously play an AAC and an ALAC sound using hardware. If the iPod application is playing an AAC or MP3 sound in the background, it has claimed the hardware codec; your application then plays AAC, ALAC, and MP3 audio using software decoding.

Như bạn có thể thấy, vấn đề là chỉ có một file mp3 tại một thời điểm có thể được chơi sử dụng phần cứng. Nếu bạn chơi nhiều hơn một mp3 tại một thời điểm, chúng sẽ được giải mã bằng phần mềm và điều đó rất chậm.

Vì vậy, tôi khuyên bạn nên sử dụng các tệp .wav hoặc .caf để phát các hiệu ứng âm thanh. mp3 có lẽ sẽ tốt cho nhạc nền.

Về đâm vấn đề:

  • cố gắng sử dụng .wav hoặc .caf file thay vì .mp3
  • cố gắng để tổ chức một tham chiếu mạnh đến SKAction và tái sử dụng nó như đề xuất bởi Reece Kenney.
Các vấn đề liên quan