当前位置: 首页 > 知识库问答 >
问题:

Android:为什么MediaPlayer播放同样的声音比SoundPool大?

梁楷
2023-03-14

你可以在Android上用MediaPlayer或SoundPool播放声音。当使用MediaPlayer时,我们的两个Android设备播放相同的声音要大得多。在第三个设备上,音量听起来相同。

private void playSoundPool() {
    int MAX_STREAMS = 2;
    SoundPool soundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int soundId, int status) {
            int loop = 0;
            int priority = 0;
            float rate = 1.f;
            soundPool.play(soundId, 1, 1, priority, loop, rate);                    
        }
    });
    soundPool.load(this, R.raw.test, 1);
}

代码:用MediaPlayer播放mp3声音

private void playMediaPlayer() {
    MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.test);
    mediaPlayer.setVolume(1, 1);
    mediaPlayer.start();
}

欢迎下载测试项目。

共有1个答案

谢宸
2023-03-14

可能的解决办法

您需要创建AudioManager来获取,改变用户在电话中设置的全球媒体音量,并通过在Soundpool中改变流音量来独立改变我们自己的应用程序的音量。

AudioManager mgr = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);

int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);

streamVolume = streamVolume / AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);

注:

    null
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.test);
mediaPlayer.setVolume(streamVolume,streamVolume);
mediaPlayer.start();

MediaPlayer是为较长的声音文件或流设计的,这是最适合音乐文件或较大的文件。每次调用create时将从磁盘加载文件,这将节省内存空间,但会引入一个小延迟(并不明显)。

裁判:所以

 类似资料:
  • 问题内容: 我正在Android上创建游戏,并且已经将这个问题搁置了一段时间,现在又回到了问题上。在我的游戏中,我有背景音乐,枪声,爆炸声等,而且我需要能够同时玩它们。现在,当我在SoundPool类上调用play时,当前正在播放的声音被打断,新的声音开始播放。下面是我的SoundManager类及其用法。任何帮助将不胜感激,因为这确实是我需要拥有如此多音效的第一款游戏。谢谢! …这是我如何使用该

  • 如何在按钮点击时发出随机的声音? 我对编程世界很陌生,我以前检查过上面的链接,试图用它作为播放随机声音的参考。我使用SoundPool因为我知道它比MediaPlayer更擅长播放短片段。我总共有四个声音。

  • 本文向大家介绍Android MediaPlayer 播放音频的方式,包括了Android MediaPlayer 播放音频的方式的使用技巧和注意事项,需要的朋友参考一下 主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。 为了方便表达,定义变量名为mediaPlayer。 MediaPlay

  • 嗯,我使用SoundPool在ImageView声音上进行onClick,其中一些声音开始了另一个活动。像这样: 有什么建议吗? UPD:日志:

  • 我想用MediaPlayer或SoundPool播放URL中的短声音,但当我尝试播放时,什么都没有发生。 我有此MP3链接格式:“http://www.universal-soundbank.com/802a/805020000000000000000000000pkjn800000000000000000000000000000090/g/85055050505050505050505/k/98

  • 今天,我制作了一个在Android中播放音乐的应用程序。 使用MediaPlayer播放音频文件时失败;它无法播放任何文件音频。此异常引发日志cat,如: E/MediaPlayer:错误(1,-2147483648) 带系统。错误:java。io。IOException:准备失败:状态=0x1 W/System.err:android.media.MediaPlayer.prepare(本机方法