从 Android 上的资产中读取音频文件
Posted
技术标签:
【中文标题】从 Android 上的资产中读取音频文件【英文标题】:Read audio file from assets on Android 【发布时间】:2011-12-11 19:42:45 【问题描述】:我正在尝试播放存储在资产目录中的音频文件,但在我读取文件之前,我收到错误“错误发生 java.io.FileNotFoundException:track.mp3”。以下是我的阅读方式:
AssetFileDescriptor afd = getAssets().openFd("track.mp3");
我在互联网上阅读了很多描述,但没有成功。
【问题讨论】:
您也可以将其存储在 res 下的 raw 目录中,这样您就可以更轻松地将其加载到媒体播放器中,因为您可以提供 res id。 很遗憾,我需要播放大量文件,所以我真的不想跟踪资源中的每一个文件。 对我来说这是案例问题。文件名是资产文件夹中的 MP3 格式,但我使用的是代码中的 mp3。通过使用完全相同的名称来解决问题。 【参考方案1】:我认为这段代码应该适合你:
AssetFileDescriptor afd = getAssets().openFd("track.mp3");
MediaPlayer player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
player.prepare();
player.start();
否则,请检查文件是否在正确的文件夹中,名称是否为“track.mp3”。
【讨论】:
好吧,正如我所说,在我使用 MediaPlayer 对象之前,我得到了 FileNotFoundException。它在我打开 AssetFileDescriptor 后抛出。 这是我正在使用的代码路径,但它不起作用:***.com/questions/9124378/…【参考方案2】:右键单击“track.mp3”文件,使用“重构”>“移动”命令,将文件移动到另一个目录(例如“res”)。使用相同的命令,将其移回您的“资产”目录。对我来说,它有效。
【讨论】:
【参考方案3】:android 指南建议音频使用 res/raw
文件夹。所以确保所有的音频都在那里,当你阅读时你可以使用这个方法:
void playAudio(Context mContext, String sound)
new AudioPlayer().play(mContext, mContext.getResources().getIdentifier(
sound,"raw", mContext.getPackageName()));
如果您需要线路音频播放器,请查看MediaPlayer
【讨论】:
【参考方案4】:使用此代码
MediaPlayer mediaPlayer = new MediaPlayer();
AssetFileDescriptor afd;
try
afd = getAssets().openFd("1.mp3");
mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
catch (IOException e)
Toast.makeText(LearnActivity.this, "Error Playing audio from Asset directory",Toast.LENGTH_SHORT).show();
否则,请检查文件是否在正确的文件夹中,名称是否为“track.mp3”。
【讨论】:
纯代码答案是低质量的答案。 谢谢您的建议,先生 :)以上是关于从 Android 上的资产中读取音频文件的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将音频文件从 iPhone 的文件系统复制到资产库
如何使用 Kotlin 从 android 中的资产中读取 json 文件?