如何循环一个音频文件在android没有任何延迟?

pcww981p  于 2023-03-16  发布在  Android
关注(0)|答案(5)|浏览(162)

我已使用以下内容启动android.media.MediaPlayer文件:

mp1.start()

然后使用以下命令尝试循环:

setLooping(true);

但是这以再次播放文件的延迟而结束。
我正在尝试运行一个mp3文件,其中包含一个具有设定克里思的节奏。有没有更好的方法来循环它,使节奏计时不会受到干扰,节奏播放无缝,没有任何口吃/延迟?
我应该使用SoundPool吗?

iq0todco

iq0todco1#

大多数针对这种特殊情况的最佳实践建议使用.ogg格式。您可以使用VNC媒体播放器轻松转换文件。
.ogg文件格式Wiki-http://en.wikipedia.org/wiki/.ogg
另一个解决方案是SoundPool,第三个是使用Audacity,从音频文件中剪切安静/“空白声音”。

polkgigr

polkgigr2#

如果你的音频不长,那么使用SoundPool来进行低延迟的媒体播放,而不是MediaPlayer。另外,正如其他人已经指出的那样,将它转换为ogg。
编辑:如果它只是一个克里思,而不是一个连续的声音,那么也许你也可以测量延迟,并在此基础上寻找你的音频,但我不确定你会得到更好的结果这样做。

sycxhyv7

sycxhyv73#

媒体播放器解决方案:

如果您坚持使用MediaPlayer,那么您可以:
1.或者在音频文件的结尾裁剪声音,这样在两个播放循环之间就没有声音间隙
1.或者像here所描述的那样自己创建一个自定义解决方案。

声池备选方案:

现在,从我个人的经验,如果你想循环文件的大小和持续时间小,不超过1MB,那么Soundpool是更方便,似乎没有任何相关的问题报告相反的MediaPlayer.有很多投诉时,尝试使用MediaPlayer循环声音,所以一般来说,Soundpool通常是首选循环.

声池大小限制:

如果你担心Soundpool的大小限制,请记住,它有1Mb的缓冲区大小限制每轨道。但这个限制不适用于文件大小,但解压缩的原始PCM数据。Soundpool将解压缩加载的音频到PCM数据,以便它可以立即播放,没有解码的延迟。如果你加载的音频压缩严重,如MP3,那就可能会被炸得很厉害。

提高性能:

另外,正如另一个答案中所建议的,根据许多来源,类型为“.ogg”的文件通常比“.mp3”的文件性能更好。所以,您应该尝试转换您的文件以获得更好的性能,但我不认为您会看到循环方面的改进。
要转换文件,您可以使用this之类的联机工具。如果要转换文件,请记住同时进行以下更改:
1.将声音文件的采样率更改为16000 Hz
1.将音频通道更改为单声道,而不是立体声。
1.确保这些过程后的文件大小小于1 MB。

nfeuvbwi

nfeuvbwi4#

回路代码
////////////////////////////////////

soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

                int soundID = soundPool.load(OktavaOsnovna.this, raw.looperman, 1);

                soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener()

                {
                    public void onLoadComplete(SoundPool soundPool, int sampleId,
                                               int status) {

                        soundPool.play(soundID, 0.5f, 0.5f, 1, -1, 1f);
                    }

                });
myzjeezk

myzjeezk5#

请试着这样做。

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

相关问题