【问题标题】:Playing sound files from expansion file从扩展文件播放声音文件
【发布时间】:2012-07-03 05:58:27
【问题描述】:

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

我到底错过了什么?任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 你能告诉我创建扩展文件的方法吗,我还需要上传mp3文件作为扩展文件并从中读取
  • 我假设您已经阅读了这些指南。 developer.android.com/guide/google/play/expansion-files.html
  • 除此之外,您可以使用 WinRar 或 WinZip 等程序。归档您需要的文件并适当地命名它们。 不要使用压缩。在 WinRar 的情况下,您会说“存档用于存储”,它将执行 0% 压缩。这对于声音文件很重要,因为它与数据有关。完成归档后,只需将文件扩展名“.zip”重命名为“.obb”。

标签: android android-mediaplayer android-resources apk-expansion-files


【解决方案1】:

第一个近似值是正确的,除非 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

【讨论】:

  • 谢谢!我一直以为问题出在扩展文件库上,造成了很多挫败感。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2014-11-06
  • 2010-09-12
相关资源
最近更新 更多