首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收音频文件的插件

接收音频文件的插件
EN

Stack Overflow用户
提问于 2015-02-16 00:34:01
回答 3查看 475关注 0票数 0

我对Java和Android相当陌生,我正在尝试使用Eclipse为开发一个Android插件。

其目标是让插件播放音频文件,有效地绕过Unity的音频回放,因为移动构建的统一项目引入了调用音频回放的滞后。

我在youtube上看到了它的实现:https://www.youtube.com/watch?v=NyceOWbr7T4

我认为您可以将一个抽象文件从Unity发送到插件,问题是,如何将该文件解释为一个声音池对象(或资源)?这样它才能被播放?

*音频文件将在联合项目中,但在jar文件之外。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-18 02:19:02

因此,我仍然无法转发实际文件(wav),然后尝试将其转换为SoundPool。我所做的是不一样的:

  1. 我将音频文件放入StreamingAssets文件夹,以便在打包项目时,我仍然可以访问这些原始文件(尽管在Android中,它们被压缩成jar文件)。(就像Axiom工作室的Venkat说的那样,我希望我能早点看到这个答案,花一些时间去发现StreamingAssets是什么。)
  2. 使用WWW,我能够从jar文件中检索原始文件。这是"Application.streamingAssetsPath“写的。
  3. 使用这些文件,我将它们写入一个新目录中,该目录可以方便地使用File.WriteAllBytes插件访问。我使用了"Application.persistentDataPath“目录。
  4. 在插件端,SoundPool能够从提供的URL获取资源,该URL是目标目录+文件名。

通过这个过程,我最终能够完成我所要做的事情,而且性能的改善是巨大的。我对此很满意。

*注意:但是,这会将包内的文件复制到安装文件夹(例如/data/data/com.example.app/ files )。我相信您可以选择在编写文件之前提供检查,如果文件已经存在,那么您就可以将文件留在那里供将来使用,或者在应用程序关闭时删除它们。

票数 1
EN

Stack Overflow用户

发布于 2015-02-16 17:39:22

您可以做的是将音频文件插入项目的流资产文件夹,然后使用媒体播放器类访问和播放该文件。

不过,我要指出两点。通常,使用MediaPlayer将要求您在UI线程上运行。这意味着游戏将暂停。你得看看有没有办法

统一的音频解决方案并不是最好的,当然。但是在资产商店里有很多可用的插件是相当惊人的。

票数 1
EN

Stack Overflow用户

发布于 2018-04-14 04:41:58

我刚刚制作了本地音频资产存储插件,它可以从一个中央界面对iOS和Android最快的原生方式进行本地调用。https://www.assetstore.unity3d.com/#!/content/107067 (不过它使用的是AudioTrack而不是SoundPool,因为从我的测试来看,它更快)

两个平台都通过统一的StreamingAssets特殊文件夹接收音频文件。在Java端,下面是如何引用该文件的方法。

在统一中:Assets/StreamingAssets/Assist.wav

在Java中:

代码语言:javascript
复制
    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;
    }

现在您有了一个音频的byte[]数组。audioPath这里应该是"Assist.wav“。我想您可以把它放到SoundPool中来实例化它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28532952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档