播放资源目录中的音频文件

播放资源目录中的音频文件

我有以下代码:

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");player = new MediaPlayer();player.setDataSource(afd.getFileDescriptor());player.prepare();player.start();

问题是,当我运行这段代码时,它会按字母顺序开始播放资源目录中的所有音频文件,而不是只播放我请求的音频文件。我究竟做错了什么?有没有更好的方法从资源目录播放音频文件?

后续问题:将音频文件保存在资源目录中并将它们保存在res / raw目录中是否有区别?除了他们没有获得ID,如果他们在资产目录中的事实。如果我将音频文件移动到res / raw文件夹,那么我有一个重用MediaPlayers 的问题,因为没有id参数setDataSource()。我找不到处理这类问题的好指南。


繁华开满天机
浏览 614回答 3
3回答

饮歌长啸

player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());如果您在资源目录中只有一个文件,那么您的版本将起作用。资产目录内容实际上不是磁盘上的“真实文件”。所有这些都是一个接一个地组合在一起。因此,如果您没有指定从哪里开始以及要读取多少字节,则播放器将读到最后(即,将继续播放assets目录中的所有文件)

ITMISS

这个功能会正常工作:)// MediaPlayer m; /*assume, somewhere in the global scope...*/public void playBeep() {     try {         if (m.isPlaying()) {             m.stop();             m.release();             m = new MediaPlayer();         }         AssetFileDescriptor descriptor = getAssets().openFd("beepbeep.mp3");         m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());         descriptor.close();         m.prepare();         m.setVolume(1f, 1f);         m.setLooping(true);         m.start();     } catch (Exception e) {         e.printStackTrace();     }}

互换的青春

这是我的静态版本:public static void playAssetSound(Context context, String soundFileName) {     try {         MediaPlayer mediaPlayer = new MediaPlayer();         AssetFileDescriptor descriptor = context.getAssets().openFd(soundFileName);         mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());         descriptor.close();         mediaPlayer.prepare();         mediaPlayer.setVolume(1f, 1f);         mediaPlayer.setLooping(false);         mediaPlayer.start();     } catch (Exception e) {         e.printStackTrace();     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android