【问题标题】:One Android MediaPlayer Object plays several sounds at once一个 Android MediaPlayer 对象一次播放多个声音
【发布时间】:2011-08-10 13:47:09
【问题描述】:

我有一个对象 MediaPlayer 媒体播放器。我用它来播放不同的声音,一个接一个。

mediaplayer = MediaPlayer.create(context, ResIdMusicONE);
mediaplayer.start();

// some user input

mediaplayer.release();
mediaplayer = null;

// some other user input

mediaplayer = MediaPlayer.create(context, ResIdMusicTWO);
mediaplayer.start();

// some user input

mediaplayer.release();
mediaplayer = null;

有时效果很好。但有时这两种声音会同时播放。并且在媒体播放器应该已经被释放并且等于 null 的位置。

感谢您的帮助。

【问题讨论】:

    标签: android audio media-player


    【解决方案1】:

    如果我是你,我会为此使用 SoundPool 类。使用 SoundPool,您可以设置同时播放的流数,因此通过将其设置为 1,您可以一遍又一遍地调用 play(),而最近一次调用 play() 将是您听到的唯一声音。

    不久前看看my post。它在问题中有一个 SoundPool 类的示例。

    编辑: 您是否尝试过创建一个新实例并在每次想要开始新声音时调用 prepare()?

    mediaplayer = new MediaPlayer();
    mediaplayer.setDataSource(path);
    mediaplayer.prepare();
    mediaplayer.start();
    

    虽然实际上现在我考虑了一下,但我很确定您只需要在使用来自 sdcard 的文件而不是来自您的资源的文件时才需要这样做......嗯。

    【讨论】:

    • 感谢您的快速答复。我第一次使用 soundpool,我仍然使用一些简短的、经常使用的声音。但对于音乐文件,声音池效果不佳(可能存在内存问题)。我想播放的文件有 30 - 60kb 的 ogg 格式。
    • 是的,SoundPool 并不是真的适合播放更长的声音,我也有这个问题。我用一个建议编辑了我的答案,你试过了吗?
    • 我试过了。仍然会出现同样的问题。有时,现在它根本不播放。我也试过mediaplayer.setOnPreparedListener ... start()。但后来问题就和上面一样了。
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多