为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2019-08-17 14:48:11
播放资源目录中的音频文件我有以下代码: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()。我找不到处理这类问题的好指南。
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

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


查看完整回答
反对 回复 2019-08-17
?
ITMISS

TA贡献1871条经验 获得超8个赞

这个功能会正常工作:)

// 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();
    }}


查看完整回答
反对 回复 2019-08-17
?
互换的青春

TA贡献1797条经验 获得超6个赞

这是我的静态版本:

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();
    }}


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 613 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信