微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有任何延迟的情况下在android中循环音频文件?

如何解决如何在没有任何延迟的情况下在android中循环音频文件?

我已经启动了一个 android.media.MediaPlayer 文件

mp1.start()

然后尝试循环:

setLooping(true);

但这最终导致再次播放文件的延迟。

我正在尝试以设定的速度运行包含节奏的 mp3 文件。有没有更好的循环方式,使节奏时间不会受到干扰,并且节奏可以无缝播放而没有任何口吃/延迟?

我应该改用 SoundPool 吗?

解决方法

请尝试这样做。

audio = MediaPlayer.create(this,R.raw.pl);
audio.setLooping(true);
audio.start();
,

针对这种特殊情况的大多数最佳做法都建议使用 .ogg 格式。您可以使用 VNC 媒体播放器轻松转换文件。

.ogg 文件格式的 Wiki - http://en.wikipedia.org/wiki/.ogg

另一个解决方案是 SoundPool,第三个解决方案是使用 Audacity 并从您的音频文件中删除安静/“空白”。

,

媒体播放器解决方案:

如果您坚持使用 MediaPlayer,那么您可以:

  1. 要么在音频文件的末尾裁剪声音,这样两个播放循环之间就没有声音间隔

  2. 或按照 here 中描述的那样自行创建自定义解决方案。

Soundpool 替代方案:

现在,从我个人的经验来看,如果你想循环文件的大小和持续时间都比较小,不超过 1MB,那么 Soundpool 更方便,而且似乎没有任何相关问题与媒体播放器。尝试使用 MediaPlayer 循环播放声音时有很多抱怨,因此通常首选 Soundpool 循环播放。

音池大小限制:

如果您担心 Sounpool 的大小限制,请记住它对每个轨道的缓冲区大小限制为 1Mb。但此限制不适用于文件大小,而是适用于解压缩的原始 PCM 数据。 SoundPool 会将加载的音频解压缩为 PCM 数据,因此它可以立即播放而没有解码延迟。如果您加载的音频被大量压缩,例如 MP3,那么它可能会被放大很多。

提高性能:

此外,正如另一个答案中所建议的,根据许多来源,“.ogg”类型的文件通常比“.mp3”表现更好。因此,您应该尝试转换文件以获得更好的性能,但我认为您不会看到有关循环的改进。

要转换文件,您可以使用在线工具,例如 this。如果您转换文件,请记住也进行这些更改:

  1. 将声音文件的采样率更改为 16000 Hz
  2. 将您的音频通道改为单声道,而不是立体声。
  3. 确保经过这些过程后您的文件小于 1 mb。
,

如果您的音频不长,则使用 SoundPool 进行低延迟媒体播放,而不是 MediaPlayer。也将其转换为 ogg,正如其他人已经指出的那样。

编辑:如果它只是一个节奏,而不是一个连续的声音,那么也许您也可以测量延迟并基于此寻找您的音频,但我不确定您会以这种方式获得更好的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。