[英]Soundpool plays only first 5 secs of file. Why?
我在我的应用程序中使用Soundpool,到目前为止它运行良好,但我确实有一个10秒的wav文件。 不幸的是,soundpool只播放前5秒。 如何让soundpool播放整首曲目? 我已经将wav转换为 - ogg和mp3仍然是同样的问题。 它只播放前5秒。 任何帮助将非常感激。
//set up audio player
mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
//load fx
mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1));
//playing soundpool
case R.id.button1:
mSoundPool.stop(mStream1);
mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
UPD Last:也许有人会在这里找到并阅读它。 似乎soundpool不能播放超过5秒。 这是他的最大值,因为更长的声音使用MediaPlayer。 我希望你不会像我那样花那么多时间)
所以我认为你在SoundPool中达到了1M的限制。
SoundPool的硬编码缓冲区大小为1M,对于所有加载的文件,以pcm格式存储。
所以它不关心ogg或wav。
我们通过降低* .ogg效果采样率来解决类似的问题。 我们的初始采样率为44 kHz~且播放的声音仅为10秒,降至16 kHz,可播放性提高到30秒
在此讨论中找到了解决方案
SoundPool旨在播放短音效。 要播放音乐(大音频文件),您需要使用MediaPlayer
// R.raw.audio_file - res/raw/audio_file.mp3
mediaPlayer = MediaPlayer.create(this, R.raw.audio_file);
mediaPlayer.start();
这项活动对我有用
public class MainActivity extends Activity {
private Integer soundID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
final float volume = actualVolume / maxVolume;
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundPool.play(soundID, volume, volume, 1, 0, 1f);
try {
Thread.sleep(5000); // play twice
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
soundPool.play(soundID, volume, volume, 1, 0, 1f);
}
});
}
});
soundID = soundPool.load(this, R.raw.sound2, 1);
//load fx
//playing soundpool
}
}
您必须加载声音异步并检查音频缓存 - 它可能是溢出的。
阅读这篇文章http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html
它非常注意
你的文件可能太大了。 如果您不需要立体声,请尝试从立体声更改为单声道。 或者尝试对文件进行缩减采样。
减少文件在我的情况下工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.