Soundpool只播放前5秒的文件。 为什么?

我在我的应用程序中使用了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最后:也许有人会在这里find它并阅读它。 似乎soundpool不能发挥更多的5秒。 这是他最大的,更长的声音使用MediaPlayer。 我希望你不会像我那样花太多时间)

Solutions Collecting From Web of "Soundpool只播放前5秒的文件。 为什么?"

所以我认为你已经达到了SoundPool的1M限制。

SoundPool将缓冲区大小硬编码为1M,对于所有加载的文件,以pcm格式存储。

所以它不关心ogg或wav。

我们通过减less* .ogg效果采样率来解决类似的问题。 我们的初始采样率是44 kHz〜,只有10秒的声音播放,降低到16 kHz,可玩性提高到30秒

解决方法在这个讨论中被发现

SoundPool旨在播放短暂的声音效果。 要播放音乐(大audio文件),您需要使用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 } } 

您必须加载声音asynchronous并检查audiocaching – 它可能溢出。

阅读这篇文章http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

它非常谨慎

你的文件可能太大了。 不pipe怎样,如果你不需要立体声的话,试着从立体声转换成单声道。 或者尝试缩减您的文件。

减less文件工作在我的情况。