gpt4 book ai didi

android - 使用 SoundPool 的无缝循环

转载 作者:行者123 更新时间:2023-11-29 21:22:19 25 4
gpt4 key购买 nike

我想使用 MediaPlayer 循环播放此轨道,但它在结尾处会产生这种奇怪的故障噪音,该轨道在 Audacity 中似乎工作正常并且它使用 .OGG,我尝试使用 SoundPool 但我似乎无法正常工作.

SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
AssetFileDescriptor lfd = this.getResourc es().openRawResourceFd(R.raw.dishwasherloop);
//mediaPlayer = new MediaPlayer();
try
{
//mediaPlayer.setDataSource(lfd.getFileDescriptor(),lfd.getStartOffset(), lfd.getLength());
//mediaPlayer.prepare();
//mediaPlayer.start();

int dish = pool.load(lfd,1);
pool.play(dish,0.5f,0.5f,1,-1,1.0f);
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()
{
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
int soundID = soundPool.load(this, R.raw.dishwasherloop, 1);
soundPool.play(soundID, 0.5f, 0.5f, 1, 0, 1f);

最佳答案

你需要移动:

soundPool.play(soundID, 0.5f, 0.5f, 1, 0, 1f);

进入 onLoadComplete 处理程序,否则 SoundPool 将在实际加载之前尝试播放声音。所以像这样:

soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()
{
public void onLoadComplete(SoundPool soundPool, int sampleId, int status)
{
loaded = true;
soundPool.play(sampleId, 0.5f, 0.5f, 1, 0, 1f);
}
});

注意:传递给 onLoadComplete 处理程序的 sampleId 是加载的 soundId

此外,在 SoundPool.play(...) 中,您将循环标志设置为 0,这意味着从不循环。如果您希望声音循环播放,则需要为 -1:

soundPool.play(sampleId, 0.5f, 0.5f, 1, -1, 1f);

希望对您有所帮助。

关于android - 使用 SoundPool 的无缝循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com