制作音板并使用媒体播放器android
Posted
技术标签:
【中文标题】制作音板并使用媒体播放器android【英文标题】:Making a soundboard and using mediaplayer android 【发布时间】:2015-04-27 14:11:51 【问题描述】:我真的是编程新手,这是我第一次尝试应用程序。我有一个带有按钮的表格布局,我希望每个按钮都能播放声音(即音板)。 我可以处理得很好,但是我现在有 40 个按钮,每个按钮我都在调用一个新的媒体播放器实例,所以最终我得到了太多并且声音停止播放。
每个按钮我都有以下代码:
MediaPlayer MP1 = MediaPlayer.Create (this, Resource.Raw.sound01);
Button button1 = FindViewById<Button> (Resource.Id.button1);
button1.Click += (object sender, EventArgs e) =>
MP1.Start();
MP1.Release();
;
MediaPlayer MP2 = MediaPlayer.Create (this, Resource.Raw.sound01);
Button button2 = FindViewById<Button> (Resource.Id.button2);
button2.Click += (object sender, EventArgs e) =>
MP2.Start();
MP2.Release();
;
等等
我意识到这是非常重复和糟糕的代码。有人告诉我我需要使用 mediaplayer 的全局实例并在播放声音后释放它,但我不知道如何做这两件事。 我还找到了这样的建议:
private int buttonIds = R.id.button01, R.id.button02, R.id.button03, R.id.button04, etc ;
private int soundIds = R.raw.sound01, R.raw.sound02, R.raw.sound03, R.raw.sound04, etc ;
任何有关直接代码示例的帮助都会对我有很大帮助,谢谢
【问题讨论】:
【参考方案1】:这可能会对你有所帮助...
final MediaPlayer player = new MediaPlayer();
final Resources res = getResources();
final int[] buttonIds = R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 ;
final int[] soundIds = R.raw.s1, R.raw.s2, R.raw.s3, R.raw.s4, R.raw.s5, R.raw.s6, R.raw.s7, R.raw.s8, R.raw.s9 ;
// On Click Listener tells the button to play the sound.
View.OnClickListener listener = new View.OnClickListener()
@Override
public void onClick(View v)
for (int i = 0; i < buttonIds.length; i++)
if (v.getId() == buttonIds[i])
selectedSoundId = soundIds[i];
AssetFileDescriptor afd = res.openRawResourceFd(soundIds[i]);
player.reset();
try
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
catch (IllegalArgumentException e)
e.printStackTrace();
catch (IllegalStateException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
try
player.prepare();
catch (IllegalStateException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
player.start();
break;
;
// Matches the button with its correct sound???
for (int i = 0; i < buttonIds.length; i++)
Button soundButton = (Button)findViewById(buttonIds[i]);
registerForContextMenu(soundButton);
soundButton.setOnClickListener(listener);
把它放在你的 MainActivity.java 的 OnCreate 方法中。在代码“int selectedSoundId;”中的方法类型之外否则会出现错误。另外,请确保您使用按钮,否则您将收到另一个错误。希望这会有所帮助!!!
【讨论】:
以上是关于制作音板并使用媒体播放器android的主要内容,如果未能解决你的问题,请参考以下文章
多个 MediaPlayers 不断失败 - Android 工作室