有没有办法使用SoundPool.load
方法从内存中加载声音样本?
不幸的是,SoundPool
中提供的所有methods都使用了真实文件的参数。
问题是我想从SD卡上的zip文件加载声音,并且提取zip(如在this解决方案中)不是一个选项。
此外,还有一个solution用于从非压缩的zip文件加载,但我的文件被压缩(并且将使用密码)。
那么有没有办法让java.io.FileDescriptor
代表一个虚拟文件,所以我可以实现一些抽象类来放置我自己的流?
最好的问候。
答案 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
我在测试后会给你更新。