2

我有一个包含一系列声音文件的扩展文件。较长的是 .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 会播放它决定的任何随机文件。

我到底在这里想念什么?任何帮助将不胜感激。

谢谢。

4

1 回答 1

5

第一个近似值是正确的,除非 zip 文件包含多个文件,否则您应该使用:

mPlayer.setDataSource(asd.getFileDescriptor(), asd.getStartOffset(), asd.getLength());

您可以从其他问题中获得更多信息: Play audio file from the assets directory

请记住在 setDataSource 到媒体播放器之后关闭 AssetFileDescriptor:

asd.close();

http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource%28java.io.FileDescriptor,%20long,%20long%29

于 2012-07-04T21:17:22.357 回答