声音池未完成播放整个文件

Posted

技术标签:

【中文标题】声音池未完成播放整个文件【英文标题】:sound pool not finish playing entire file 【发布时间】:2013-06-13 22:04:25 【问题描述】:

我有两个问题想了解。

我正在使用soundPool 来制作我的音效,并且它的工作没有问题。 但是,当我尝试播放 cetain 文件(25 秒,约 400K)时,它不会播放整个文件,仅 3-4 秒。

为什么以及如何解决?

第二个问题是,我应该从线程播放每个效果吗?线程多好?

这是当前代码:

static void play(final int soundID )
    if(loaded)
        handler.post(new Runnable()
        
        public void run()
        
            soundpool.play(soundID, 1, 1, 1, 0, 1);
        
        );

【问题讨论】:

检查play方法的返回。来自规范:Returns non-zero streamID if successful, zero if failed 返回 1 。正如我所说,它确实会播放......持续 3-4 秒 是的,但它可能会在播放 3-4 秒后失败。它是在 3-4 秒后还是 25 秒后返回? 不知道要检查什么,它返回streamId作为播放开始... 试试这个而不是 soundpool 播放语句:MediaPlayer.create(YourActivity.this, R.raw.your_sound).start();,看看它是否能播放完整的声音。 【参考方案1】:

我的理解是SoundPool不能用于超过几秒的声音或>1MB的音频文件。在这些情况下使用MediaPlayer

每次播放声音时都使用它:

MediaPlayer.create(YourActivity.this, R.raw.your_sound).start();

或创建MediaPlayer对象,根据需要多次播放相同的声音,然后release()对象。

【讨论】:

Mediaplayer 不能多次使用而没有副作用,大多数时候,以前的 mediaplayer 都被忽略了

以上是关于声音池未完成播放整个文件的主要内容,如果未能解决你的问题,请参考以下文章

在完成播放之前再次单击播放音频文件

如何检测声音文件何时完成?

使用 system() 函数在后台播放声音

您如何检测声音文件何时完成?

编译并运行一个包含声音文件的完成项目[关闭]

下载未完全完成时限制用户播放文件