制作音板并使用媒体播放器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 工作室

播放完成后如何释放我的媒体播放器?

在 Android 中制作完美的 Chromeless Youtube 播放器

android:使用默认视频播放器

Android制作简易的音乐播放器和视频播放器

Android制作简易的音乐播放器和视频播放器