在音板的应用程序媒体播放器的错误 [英] mediaplayer error on soundboard app

查看:104
本文介绍了在音板的应用程序媒体播放器的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个音板的应用程序,调用,调用音频文件时,他们的按钮pssed $ P $。然而,在大部分按钮havebeen pressed和发挥,我开始让这些媒体播放器的错误。有谁知道如何检测,并发生只需重新启动或停止它彻底?谢谢你的时间。

I have a soundboard app that calls that calls audio files when their button is pressed. However, after most of the buttons havebeen pressed and played, I start to get these mediaplayer errors. Does anyone know How to detect it and just restart or stop it completely from happening? Thanks for your time.

-colby

    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        ImageButton button = (ImageButton) findViewById(entry.getKey());
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    int sound = map.get(v.getId());
                    mp = MediaPlayer.create(myMain.this, sound);
                    mp.prepare();
                } catch (IllegalStateException e) {



                } catch (IOException e) {

                }
                mp.seekTo(0);
                mp.start();

            }
        }

        );

    }

10月4号至13号:11:39.873:信息/ MediaPlayer的(23152):启动媒体播放器()
10月4日日至13日:11:39.873:VERBOSE / MediaPlayerService(18229):[666] setLooping(0)
10月4日日至13日:11:39.873:VERBOSE / MediaPlayerService(18229):[666] setVolume(1.000000,1.000000)
10月4日日至13日:11:39.873:VERBOSE / AudioSink(18229):setVolume(1.000000,1.000000)
10月4日日至13日:11:39.873:VERBOSE / MediaPlayerService(18229):[666]启动
10月4日日至13日:11:39.873:DEBUG / AwesomePlayer(18229):[U5B]打(556)
10月4日日至13日:11:39.873:DEBUG / AwesomePlayer(18229):[U5B] play_l(562) 10月4日日至13日:11:39.873:VERBOSE / AudioSink(18229):开放(44100,1,1,4)
10月4日日至13日:11:39.873:ERROR / AudioFlinger(18229):没有更多的曲目名称可用
10月4日日至13日:11:39.873:ERROR / AudioTrack(18229):AudioFlinger无法创建跟踪,状态:12
10月4日日至13日:11:39.873:ERROR / AudioSink(18229):无法创建音轨
10月4日日至13日:11:39.873:ERROR / MediaPlayer的(23152):错误(-19,0)
10月4日日至13日:11:39.894:信息/ MediaPlayer的(23152):MediaPlayer的什么的handleMessage = 5
10月4日日至13日:11:39.894:信息/ MediaPlayer的(23152)的MediaPlayer的handleMessage什么= 1
10月4日日至13日:11:39.894:信息/ MediaPlayer的(23152):MediaPlayer的什么的handleMessage = 4
10月4日日至13日:11:42.114:信息/ MediaPlayer的(23152):MediaPlayer的创建()
10月4日日至13日:11:42.114:信息/ MediaPlayer的(23152):MediaPlayer的
10月4日日至13日:11:42.114:VERBOSE / MediaPlayerService(18229):客户端(667)构造

04-13 10:11:39.873: INFO/MediaPlayer(23152): MediaPlayer start()
04-13 10:11:39.873: VERBOSE/MediaPlayerService(18229): [666] setLooping(0)
04-13 10:11:39.873: VERBOSE/MediaPlayerService(18229): [666] setVolume(1.000000, 1.000000)
04-13 10:11:39.873: VERBOSE/AudioSink(18229): setVolume(1.000000, 1.000000)
04-13 10:11:39.873: VERBOSE/MediaPlayerService(18229): [666] start
04-13 10:11:39.873: DEBUG/AwesomePlayer(18229): [U5B] play (556)
04-13 10:11:39.873: DEBUG/AwesomePlayer(18229): [U5B] play_l (562) 04-13 10:11:39.873: VERBOSE/AudioSink(18229): open(44100, 1, 1, 4)
04-13 10:11:39.873: ERROR/AudioFlinger(18229): no more track names available
04-13 10:11:39.873: ERROR/AudioTrack(18229): AudioFlinger could not create track, status: 12
04-13 10:11:39.873: ERROR/AudioSink(18229): Unable to create audio track
04-13 10:11:39.873: ERROR/MediaPlayer(23152): error (-19, 0)
04-13 10:11:39.894: INFO/MediaPlayer(23152): MediaPlayer handleMessage what=5
04-13 10:11:39.894: INFO/MediaPlayer(23152): MediaPlayer handleMessage what=1
04-13 10:11:39.894: INFO/MediaPlayer(23152): MediaPlayer handleMessage what=4
04-13 10:11:42.114: INFO/MediaPlayer(23152): MediaPlayer create()
04-13 10:11:42.114: INFO/MediaPlayer(23152): MediaPlayer
04-13 10:11:42.114: VERBOSE/MediaPlayerService(18229): Client(667) constructor

推荐答案

詹姆斯有正确的想法。你创造了太多的MediaPlayer实例了一段时间后,运行内存不足。一个解决方案,我张贴previously是东西这种效果:

James has the right idea. You're creating too many MediaPlayer instances after a while, and running out of memory. A solution I posted previously was something to this effect:

public MediaPlayer mp;
public Resources res = getResources();

View.OnClickListener listener = new View.OnClickListener() {
    public void onClick(View v) {
        try {
            int sound = map.get(v.getId());
            AssetFileDescriptor afd = res.openRawResourceFd(sound);

            mp.reset();
            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            mp.prepare();
            mp.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
    ImageButton button = (ImageButton)findViewById(entry.getKey());
    button.setOnClickListener(listener);
}

这可能无法编译(我假设你的声音ID是从RES /原始文件夹),但这个想法是,只要有一个MediaPlayer的实例,只要单击一个按钮,复位该实例,设置数据源到相应的FileDescriptor,prepare它,并开始播放。

This might not compile (I'm assuming your sound IDs are from the res/raw folder), but the idea is, just have ONE MediaPlayer instance, and whenever a button is clicked, reset that instance, set the data source to the corresponding FileDescriptor, prepare it, and start playback.

这篇关于在音板的应用程序媒体播放器的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆