如何在Android中无间隙地循环播放声音?

Posted

技术标签:

【中文标题】如何在Android中无间隙地循环播放声音?【英文标题】:How to loop a sound without gaps in Android? 【发布时间】:2012-11-04 18:27:39 【问题描述】:

我想在 android 中循环播放没有间隙的声音。 我尝试使用代码mediaplayer.setLooping(true)来循环播放声音,但是当第一个声音结束并开始下一个声音时,总是会有一点停顿。

【问题讨论】:

我也是新手,但我确实有一个问题。也许你的声音有差距? 【参考方案1】:

尝试在您的应用程序中为声音文件使用 .ogg 文件格式。我遇到了同样的问题,经过大量研究,我尝试了 .ogg 格式,它在 android 中循环,没有任何间隙。

.ogg 格式信息:http://en.wikipedia.org/wiki/.ogg

您可以使用流行的开源应用程序 VLC Media Player 轻松地将您的声音文件从 .mp3 或其他文件转换为 .ogg。

【讨论】:

在使用SoundPool时也有帮助 在我的情况下不起作用:/ 非常感谢它几乎救了我的命,我花了 3 天时间寻找同样的解决方案。 您需要使用一些标签编辑器向该 .ogg 添加一个新标签 (ANDROID_LOOP = true)。然后,如果您通过 mediaPlayer 运行它,它可能会在没有间隙的情况下循环播放(取决于您的声音是否真的有间隙) 注意:这样做您可能会失去对 mediaplayer.setLooping(true) 的控制。有助于使用 RingtoneManager 进行铃声循环【参考方案2】:

这是 android 操作系统中的一个错误 :( http://code.google.com/p/android/issues/detail?id=18756

【讨论】:

重复别人说过的话,使用OGG格式就可以了。我发现 Audacity 在从文件中删除任何“空白空间”并将其保存到 .OGG 方面做得很好。最好的部分是 Audacity 是免费的。 我尝试切换到使用 Audacity 创建的 .OGG,但没有发现它为我的 21 秒音频样本提供无缝播放。 您必须使用 Audacity 实际修剪音频文件以使其无间隙。 如果你的意思是确保音频文件的开头和结尾没有静音,是的,我做到了。我还在文件的开头和结尾将波形调整为“归零”。我可以使用 Audacity 的“循环播放”(shift-space)命令播放样本,没有听得见的间隙。有什么我想念的吗?【参考方案3】:

另外值得注意的是,Jelly Bean(API 级别 16)添加了无缝播放。它允许您设置一个辅助媒体播放器,该辅助媒体播放器应该用于播放下一个音频流,只要主要播放器尚未完成当前音频的播放。这也可能用于创建无间隙的“循环”。

public void setNextMediaPlayer (MediaPlayer next)

显然,这对大多数市场(目前为< 3% of the devices is running JB)没有多大帮助,但值得一提。

【讨论】:

【参考方案4】:

它通常工作得很好,除非你的手机真的很慢。

我会使用 Audacity 之类的音频编辑器仔细检查声音文件,以确认它在文件的开头或结尾没有任何静音。

【讨论】:

以上是关于如何在Android中无间隙地循环播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

循环播放无间隙的 AVAudioPlayer

为啥我的 Java 应用程序没有在每个循环中播放声音?

在至少一个同类精灵在舞台上时播放声音循环

Android声音播放延迟到while循环结束

如何延迟 For 循环直到声音在 Swift 中播放完毕

Android soundpool 循环逻辑