Java 接收音频文件的插件
我对Java和Android相当陌生,我正在尝试使用Eclipse为Unity制作一个Android插件 目标是让插件播放音频文件,有效地绕过Unity引擎的音频播放,因为Unity项目的移动构建在调用音频播放时引入了延迟 我在youtube上看到了它的实现: 我想你可以从Unity向插件发送一个抽象文件,问题是,你如何将该文件解释成一个声音池对象(或资源?)以便播放Java 接收音频文件的插件,java,android,eclipse,plugins,unity3d,Java,Android,Eclipse,Plugins,Unity3d,我对Java和Android相当陌生,我正在尝试使用Eclipse为Unity制作一个Android插件 目标是让插件播放音频文件,有效地绕过Unity引擎的音频播放,因为Unity项目的移动构建在调用音频播放时引入了延迟 我在youtube上看到了它的实现: 我想你可以从Unity向插件发送一个抽象文件,问题是,你如何将该文件解释成一个声音池对象(或资源?)以便播放 *音频文件将在Unity项目中,但在jar文件之外。您可以将音频文件粘贴到项目的streaming assets文件夹中,然后使
*音频文件将在Unity项目中,但在jar文件之外。您可以将音频文件粘贴到项目的streaming assets文件夹中,然后使用类访问和播放该文件 然而,我要指出两件事。 A.通常,使用MediaPlayer需要在UI线程上运行。这意味着游戏将暂停。你需要看看是否有解决办法
b。诚然,Unity的音频解决方案不是最好的。但是,在资产商店中有很多插件非常棒。因此,我仍然无法转发实际文件(wav),然后尝试将其转换为SoundPool。我所做的有些不同:
AudioTrack
而不是SoundPool
,因为从我的测试来看它更快)
两个平台都通过Unity的特殊文件夹StreamingAssets
接收音频文件。在Java端,以下是如何引用该文件
在Unity中:Assets/StreamingAssets/Assist.wav
在Java中:
Context context = UnityPlayer.currentActivity;
AssetManager assetManager = context.getAssets();
try {
AssetFileDescriptor descriptor = assetManager.openFd(audioPath);
byte[] music = new byte[(int) descriptor.getLength()];
InputStream is = assetManager.open(audioPath);
is.read(music);
is.close();
//Do whatever you want with "music"
} catch (IOException e) {
Log("Error reading audio file " + audioPath);
e.printStackTrace();
return -1;
}
现在您有了一个
字节[]
音频数组<代码>音频路径这里只有“Assist.wav”。我想你可以把它放到SoundPool
来实例化它。为什么你需要通过插件来实现呢?Unity有自己的音响系统,而且非常直截了当。@JuanjoVega移动设备上的音频播放滞后是荒谬的,用户界面按钮的按下和声音效果不会在点上播放,这只是对用户体验的干扰。然而,我确实找到了一种不同的方法来实现这一点。我们的解决方案中类似的是使用StreamingAssets。请投那个一票!呜呜!(但我还没有足够的代表投票)