Android Soundboard 一次只有一种声音
Posted
技术标签:
【中文标题】Android Soundboard 一次只有一种声音【英文标题】:Android Soundboard only one sound at a time 【发布时间】:2014-02-14 11:12:40 【问题描述】:我正在尝试编写一个带有多个按钮的 android 音板。每个按钮都应该播放不同的声音。
我在每个按钮上都有一个 OnClickListener:
buttonAlan.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
playSound("alan");
);
每个按钮都调用以下函数。
private void playSound(String sound)
int path = getResources().getIdentifier(sound, "raw", getPackageName());
mediaplayer = MediaPlayer.create(this, path);
try
mediaplayer.prepare();
catch (IllegalStateException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
mediaplayer.start();
音板可以工作,但每次单击按钮时,它都会一遍又一遍地播放声音。我需要媒体播放器停止播放,但每次我写类似 mediaplayer.stop() 的东西时,应用程序根本无法工作。 有什么建议我应该在我的函数/代码中更改吗?
【问题讨论】:
【参考方案1】:我使用 soundpool 解决了这个问题,您还可以同时播放多个声音。 我首先初始化它并在构造函数中加载我需要的声音
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
int gameOverSound = soundPool.load(context, R.raw.gameover, 1);
然后你就可以这样玩了:
public void playSound(int soundId)
soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1);
编辑: 关于媒体播放器,您必须在开始播放另一个声音之前调用 stop() 和 release()。 你也可以设置
mPlayer.setLooping(false);
【讨论】:
你能告诉我“上下文”是什么吗?它是否与我的 MainActivity 的名称有关? 简单地说:what is a context。如果你在一个活动中,你可以使用“this”或“getContext()”作为上下文,如果你将它移动到其他一些类,你必须通过调用活动的上下文(例如,这是访问资源所必需的) 非常感谢!那成功了。现在我只需要在按下按钮时停止声音池的播放。 音板现在正在工作,但所有声音在大约 6 秒后停止。经过一番研究,我来到这个网站ignoranceisfutile.com/node/49 这里说声音文件需要是.ogg 格式,具有特定的位和采样率。有没有办法继续播放 Mp3 文件? 发现了一个类似的问题:***.com/questions/13377604/…以上是关于Android Soundboard 一次只有一种声音的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Soundboard - 播放一个按钮会关闭所有其他按钮
带有开关按钮的 Android ListView - 一次只有一个开关处于活动状态
在Android中,想要TranslateAnimation与for循环一起用,但运行结果只有最后一次循环移动,不明求教