我有一个包含一系列声音文件的扩展文件。较长的是.mp3文件,而较短的声音效果是.wav文件。我将它们打包在一个没有压缩的.zip文件中。我使用Google提供的Zip文件阅读器和下载程序库。
我正在打开声音文件:
MediaPlayer mPlayer;
...
AssetFileDescript asd = expansionFile.getAssFileDescriptor(fileName);
FileDescriptor soundFile = asd.getFileDescriptor();
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(soundFile);
mPlayer.prepare();
mPlayer.start();
奇怪的是它每次播放相同的声音文件。它似乎是它首先发现的。 asd.getDeclaredLength()
和asd.getLength()
的字节大小正是应该的大小。这意味着文件描述符至少找到了文件,但由于某种原因,MediaPlayer会播放它决定的任何随机文件。
我到底错过了什么?任何帮助将不胜感激。
感谢。
答案 0 :(得分:4)
第一个近似是正确的,除了当zip文件包含多个文件时,你应该使用:
mPlayer.setDataSource(asd.getFileDescriptor(), asd.getStartOffset(), asd.getLength());
您可以从其他问题中获取更多信息: Play audio file from the assets directory
请还记得在setDataSource之后关闭AssetFileDescriptor到媒体播放器:
asd.close();