首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >soundboard应用程序上出现mediaplayer错误

soundboard应用程序上出现mediaplayer错误
EN

Stack Overflow用户
提问于 2011-04-14 01:22:43
回答 2查看 3K关注 0票数 2

我有一个soundboard应用程序,当他们的按钮被按下时,它会调用音频文件。然而,在大多数按钮被按下并播放之后,我开始收到这些mediaplayer错误。有人知道如何检测到它并重新启动或完全阻止它发生吗?耽误您时间,实在对不起。

-colby

代码语言:javascript
运行
复制
    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();

            }
        }

        );

    }

04-13 10:11:39.873:信息/媒体播放器(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:详细/音频接收器(18229):setVolume(1.000000,1.000000)

04-13 10:11:39.873: VERBOSE/MediaPlayerService(18229):666start

04-13 10:11:39.873: DEBUG/AwesomePlayer(18229):U5B play (556)

44100-13 10:11:39.873: DEBUG/AwesomePlayer(18229):U5B play_l (562) 04-13 10:11:39.873: VERBOSE/AudioSink(18229):open(04,1,1,4)

04-13 10:11:39.873: ERROR/AudioFlinger(18229):没有更多的曲目名称可用

04-13 10:11:39.873:错误/音频轨道(18229):AudioFlinger无法创建轨道,状态: 12

04-13 10:11:39.873: ERROR/AudioSink(18229):无法创建音轨

04-13 10:11:39.873:错误/MediaPlayer(23152):错误(-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:信息/媒体播放器(23152):MediaPlayer

04-13 10:11:42.114: VERBOSE/MediaPlayerService(18229):Client(667)构造函数

EN

Stack Overflow用户

回答已采纳

发布于 2011-04-14 02:10:49

詹姆斯的想法是正确的。您在一段时间后创建了太多的MediaPlayer实例,并耗尽了内存。我之前发布的一个解决方案就是这样的:

代码语言:javascript
运行
复制
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);
}

这可能无法编译(我假设您的声音it来自res/raw文件夹),但其想法是,只有一个MediaPlayer实例,每当单击按钮时,重置该实例,将数据源设置为相应的FileDescriptor,准备它,然后开始播放。

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5653099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档