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

制作音板和使用mediaplayer android

尤钱明
2023-03-14

我对编程很陌生,这是我第一次尝试应用程序。我有一个表格布局与按钮,我希望每个按钮播放一个声音(即音板)。我可以很好地处理,但我现在有40个按钮,每一个我都调用一个mediaplayer的新实例,所以最终我结束了太多,声音停止播放。

我对每个按钮都有以下代码:

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个答案

蓬祺
2023-03-14

这也许能帮你点忙...

    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;”中的方法类型之外否则将出现错误。此外,请确保使用按钮,否则会出现另一个错误。希望这有帮助!!!

 类似资料:
  • 问题内容: 当我尝试使用粘贴到单元格时,我要粘贴的单元格保持空白,但setValueAt()似乎可以正常工作。另外,当我尝试从一个单元格剪切或复制JPopupMenu时,如果要粘贴到另一个单元格,则我的“粘贴”选项将保持禁用状态。我不知道为什么。我的代码如下。 Here’s my code for 问题答案: 根据您的示例代码,并且必须填写空白,它对 我有用… Now, maybe you’d l

  • 本文向大家介绍Python3使用PyQt5制作简单的画板/手写板实例,包括了Python3使用PyQt5制作简单的画板/手写板实例的使用技巧和注意事项,需要的朋友参考一下 1.前言 版本:Python3.6.1 + PyQt5 写一个程序的时候需要用到画板/手写板,只需要最简单的那种。原以为网上到处都是,结果找了好几天,都没有找到想要的结果。 网上的要么是非python版的qt程序(要知道qt版本

  • 我能够在MediaCodec和MediaMuxer的帮助下录制(编码)视频。接下来,我需要在MediaCodec和MediaMuxer的帮助下处理音频部分和带视频的mux音频。 我面临两个问题: > 如何将音频和视频数据传递给MediaMuxer(因为writeSampleData()方法一次只接受一种类型的数据)? 我提到了MediaMuxerTest,但它使用的是MediaExtractor。

  • 我正在开发一个应用程序,它可以使用语音控制音乐播放器。例如,当我说"play"音乐播放器播放歌曲,或者说"Next"音乐播放器将播放下一首歌曲,等等。我已经谷歌了,但没有找到任何想法或源代码。 问题: > 使用语音控制音乐播放器的想法 源代码示例。 提前感谢。 可能相关:Android-语音控制-媒体意图

  • 模板文件:User/register.html <form class="form-horizontal js-ajax-form" action="{:U('user/register/doregister')}" method="post"> <label class="control-label" for="input_username">账号</label> <input

  • 模板文件:User/login.html <form class="js-ajax-form" action="{:U('user/login/dologin')}" method="post"> <label for="input_username">账号</label> <input type="text" id="input_username" name="username"