在Android中加载内存中的声音
使用SoundPool.load
方法有什么办法从内存中加载声音样本?
不幸的是, SoundPool
中提供的所有方法都是使用真实文件的参数。 问题是我想从SD卡上的zip文件加载声音,并且提取zip(如在此解决方案中)不是一个选项。
此外,还有一个从未压缩的zip文件加载的解决方案,但我的文件受到了注释(并且将使用密码)。
那么有没有办法让java.io.FileDescriptor
代表一个虚拟文件,所以我可以实现一些放置我自己的流的抽象类?
最好的祝福。
我在这个问题上得到了最终答案。 这是Android平台上的功能缺失。 Android媒体播放框架很长一段时间不支持它。 Google也注意到了它,所以Android6.0(API Level23)引入了android.media.MediaDataSource,它可以用作纯内存字节数组数据源。 在API Level23之前,我们仍然需要将内存数据复制到文件系统中的临时文件中。
以下URL提供了有关此问题的更多线索,其解释对于音频和视频都是正确的:如何从媒体播放器中的字节数组播放视频
我想建议你使用MemoryFile,但在检查它之后,我发现MemoryFile没有getFileDescriptor()方法,这意味着我们不能将它用作SoundPool.load()中的参数。 但是我发现这篇文章:Android中MemoryFile有什么用处
一个人实现了MemoryFileUtil.getFileDescriptor(memFile),他在那里发布他的代码。 如果他的代码真的可以工作,这意味着我们可以使用SoundPool.load()从内存加载声音样本。 唯一的问题是将我们的内存数据写入该内存文件。 以下站点显示如何将内存数据(从SQLITE查询结果)写入内存文件中:http://www.programcreek.com/java-api-examples/index.php?api=android.os.MemoryFile
我会在测试后给你更新。
链接地址: http://www.djcxy.com/p/23483.html