如何更新声音池?

Posted

技术标签:

【中文标题】如何更新声音池?【英文标题】:How to update soundpool? 【发布时间】:2015-12-07 12:09:29 【问题描述】:

我对 java 和 android 很陌生,我想在按下按钮后播放一些声音。我搜索了很多并尝试了这个:

//package and imports

public class Simulador extends Activity 
int contador;
Button somar;

SoundPool som;
boolean loaded;
int comeu, comprou;

protected void onCreate(Bundle primeiroBundle) 
    super.onCreate(primeiroBundle);
    setContentView(R.layout.activity_primeira_atividade);
    contador = 0;
    somar = (Button) findViewById(R.id.som);
    som = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);

    //I removed the whole part from the other button,
    //since it's basically the same. So that's why I need to set maxStreams to 2.

    comeu = som.load(this, R.raw.comeu, 1);
    som.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() 
        public void onLoadComplete(SoundPool som, int sampleId, int status)
            loaded = true;
        
    );

    somar.setOnClickListener(new View.OnClickListener() 
        public void onClick(View v) 
            if (loaded) 
                som.play(comprou, 1, 1, 1, 0, 1f);
            
            contador += 5;
            
        
    );


protected void onPause() 
    super.onPause();
    som.release();
    som = null;


我的代码正常运行,但收到​​以下警告:

SoundPool(int, int, int)' is deprecated

所以我来here 看看如何解决并得到了这个:

此构造函数在 API 级别 21 中已弃用。请改用 SoundPool.Builder 来创建和配置 SoundPool 实例

所以我去了here,但无法将我的代码添加到这个新的构造函数,甚至阅读参考。有谁知道如何解决这个问题?

【问题讨论】:

你试过了吗? kamilabrito.com/devcontent/2015/6/2/… 这可能会有所帮助***.com/questions/28210921/… 你的另一个链接here 【参考方案1】:

我知道这个问题已经有几年了,你可能已经解决了这个问题,但希望这个答案可以帮助其他人。

对于那些担心 android 版本的向后兼容性并希望两全其美的人,这是我已经完成的一个可能的实现。

在您实例化 SoundPool 对象的 onCreate() 函数中,为 android 版本编写逻辑检查并使用相应的构造函数。

// For ADK versions 21 (Lollipop) or greater
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) 
    sounds = new SoundPool.Builder().build();
// Else use older syntax (deprecated with ADK 21)
 else 
    sounds = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

注意:从技术上讲,这仍会在您的 IDE 中因使用已弃用的方法而发出警告,但如果您担心 APK 低于 21,这可能是您的最佳选择。

实例化后,只需加载声音文件并播放声音(在按钮上的onClick() 侦听器中调用下面的playSound() 方法):

soundId = sounds.load(context, R.raw.sound, 1);

public void playSound() 
    sounds.play(soundId, 1, 1, 1, 0, 1);

【讨论】:

以上是关于如何更新声音池?的主要内容,如果未能解决你的问题,请参考以下文章

使用声音池的android多点触控

依次播放声音池中的声音

声音池未完成播放整个文件

使用媒体播放器或声音池在片段内的 onClick 中播放声音

涉及声音池的应用程序的 BpMemoryHeap 问题

Android 音池计时