我的應用程序中有大約60個聲音樣本。我必須及時地以高精確度播放它。 5毫秒會更好。聲音必須響應用戶的操作而播放。所以我不知道接下來會發生什麼。對於所有聲音,我都想到了SoundEffectInstance的預先創建。創建SoundEffectInstance是否需要時間和內存?它是在內存中的SoundEffect的完整副本還是隻是一些指針信息。如果我要預先創建SoundEffectInstances,我可以改進我的應用程序嗎? XNA中有沒有其他方法可以儘快播放樣本?如何儘快播放聲音?
回答
A SoundEffect
包含實際的波形數據。它消耗了大量的內存(與波形數據所需要的一樣多)。
A SoundEffectInstance
是一個小對象,包含有關播放(位置,音量等)的數據以及已分配用於播放的「語音」句柄。
當您使用SoundEffect.Play
時,它會在內部創建一個SoundEffectInstance
。它也可以彙集這些實例 - 因此它不需要在隨後的調用中重新創建它們。
創建SoundEffectInstance
需要一些時間和內存。對於以30FPS(每幀33毫秒)運行的遊戲中的聲音效果,所涉及的延遲應該不可察覺。
如果你想通過混合不同的聲音效果,甚至在那裏5ms的事情,你需要使用DynamicSoundEffectInstance
實現自己的混音器播放音樂排序。這將確保聲音與樣本同步。
如果你想創建某種實時播放的「工具」,而你試圖讓你的輸入到輸出的延遲降低到5ms的 - 那麼現在放棄。 5毫秒是非常好的,通常需要專業設備和軟件。儘管如此,如果您需要儘可能減少輸入到輸出延遲,您可以更頻繁地輪詢輸入,而不是每幀一次。你應該仍然可以使用DSEI。我不確定DSEI是否具有可配置的回放緩衝區大小,但是如果是這樣,您應該儘可能小,而不會引入音頻干擾。
當用戶選擇一個集合時,您應該將這些聲音效果加載到字典中,以後訪問它們會更快。
但是,您不應該加載所有聲音效果,特別是那些在特定屏幕或設置中不需要的聲音效果。另外,您應該卸載您不再需要的音效。
根據要載入的大小和數量,加載這些聲音效果確實需要時間。我建議你製作一個基本的加載屏幕來加載/卸載遊戲中的內容(大多數遊戲都是這樣做的)。您將在內存中加載soundeffect(我猜是wav格式),而不僅僅是一個指針,所以這就是爲什麼音效需要保持短暫的原因。
已經加載的音效將播放得非常快(延遲是不可察覺的)。預加載將會增加應用程序的性能,代價是內存使用量。
- 1. 聲音播放和播放聲音
- 2. 如何從聲音的開始播放/暫停聲音和聲音播放?
- 3. 播放聲音?
- 4. 播放聲音
- 5. 播放聲音
- 6. 播放聲音
- 7. 播放聲音
- 8. 播放聲音
- 9. 快速點擊播放聲音android
- 10. 在快速遊樂場播放聲音
- 11. 未播放聲音
- 12. 在播放聲音
- 13. 聲音未播放
- 14. VC++播放聲音
- 15. Ruby聲音播放
- 16. 聲音未播放
- 17. Javascript播放聲音
- 18. MonoTouch:播放聲音
- 19. 聲音播放viewpager
- 20. 播放聲音在
- 21. 如何知道什麼時候使用聲音播放聲音播放
- 22. 聲音播放不播放聲音第一次it's稱爲
- 23. WP7播放聲音 - 當聲音播放完畢
- 24. 使用系統聲音播放聲音
- 25. 播放聲音作爲系統聲音
- 26. c中聲音播放後的聲音#
- 27. Python 3.6:如何播放音頻更快
- 28. childViewController不播放後播放聲音
- 29. 播放和暫停以播放聲音
- 30. 如何取消激活播放聲音
您是否需要應用程序中任何時候的所有聲音,或者是否爲不同的屏幕分配了聲音? – Msonic 2012-03-06 17:58:01
很少設置60個聲音。用戶選擇設置,那麼它可能是任何設置的聲音 – xander27 2012-03-06 18:22:38