在Android中加载内存中的声音

时间:2014-11-10 13:21:42

标签: java android memory zip soundpool

有没有办法使用SoundPool.load方法从内存中加载声音样本?

不幸的是,SoundPool中提供的所有methods都使用了真实文件的参数。 问题是我想从SD卡上的zip文件加载声音,并且提取zip(如在this解决方案中)不是一个选项。

此外,还有一个solution用于从非压缩的zip文件加载,但我的文件被压缩(并且将使用密码)。

那么有没有办法让java.io.FileDescriptor代表一个虚拟文件,所以我可以实现一些抽象类来放置我自己的流?

最好的问候。

2 个答案:

答案 0 :(得分:2)

我在这个问题上得到了最终答案。 这是Android平台上缺少的功能。 Android媒体播放框架很长时间都不支持它。谷歌也注意到它,因此Android6.0(API Level23)引入了android.media.MediaDataSource,它可以用作纯内存字节数组数据源。在API Level23之前,我们仍然需要将内存数据复制到文件系统中的临时文件中。

以下网址提供了有关此问题的更多线索,其解释对于音频和视频都是正确的: how to play video from byte array in media player

答案 1 :(得分:1)

我想建议您使用MemoryFile,但在检查后,我发现MemoryFile没有getFileDescriptor()方法,这意味着我们无法将它用作SoundPool.load()中的参数。 但我发现这篇文章: what is the use of MemoryFile in android

一个人实现了MemoryFileUtil.getFileDescriptor(memFile),他在那里发布了他的代码。 如果他的代码真的可以工作,这意味着我们可以使用SoundPool.load()从内存中加载声音样本。 唯一的问题是将我们的内存数据写入该内存文件。 以下站点显示如何将内存数据(从SQLITE查询结果)写入内存文件: http://www.programcreek.com/java-api-examples/index.php?api=android.os.MemoryFile

我在测试后会给你更新。