我播放这样的声音(这是在SCNNode子类中):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_article, menu);
/* Search results in new activity, clicked article passed back to articleActivity
Associate searchable configuration with the SearchView */
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
ComponentName componentName = new ComponentName(this, SearchResultsActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));
return true;
}
第一次调用它时,我会遇到严重的延迟,并且会被抛出。 当我禁用All_Expection_Breakpoint时,我注意到滞后。
我可以对此做些什么?
答案 0 :(得分:1)
C ++异常来自SceneKit音频层使用的AVAudioEngine。 AVAudio *框架在内部使用C ++异常,因此如果在Xcode中设置了断点,以便在抛出C ++异常时中断,Xcode将在AVAudio *代码中破坏很多(主要是在初始化时)。您可以放心地忽略这些,因为它们在到达您的代码之前就被框架捕获了。
如果您不想要延迟,可以在启动时实例化音频源并加载它: 让audioSource = SCNAudioSource(命名:" coin.wav") audioSource.load()
然后在以后需要时添加播放器: 让audioPlayer = SCNAudioPlayer(来源:audioSource) self.addAudioPlayer(audioPlayer)
顺便说一句,玩家会被缓存和回收,所以你不必过多担心内存被无用。
另请注意,SCNAction使用与您完全相同的API,因此如果您使用.load()创建一个之前未加载到内存中的声音的动作,您也会遇到延迟。 / p>
希望这有帮助,
S上。
答案 1 :(得分:0)
这实际上仅适用于大气,环境和背景环境中的各种声音,可以通过角色循环和移动,也可以附加到瀑布的位置或类似的位置。
它不是一个高性能的即时声音播放器,可立即实现低延迟的声音效果。
为此,您最好在需要时使用SCNAction将音频作为动作播放,或者使用专为低延迟声音播放而设计的Fmod。
我不知道我怎么知道这件事。