Tôi có hai thiết bị tôi có thể thử nghiệm trò chơi của mình: Điện thoại Celluar của Mỹ (SCH-R880) và Kindle Fire, Kindle Fire mạnh hơn rất nhiều so với điện thoại.Mediaplayer Cắt âm thanh quá sớm
Tôi có một số hiệu ứng âm thanh ngắn (Ít hơn hoặc khoảng 1 giây). Để tiết kiệm bộ nhớ, tôi tải, phát và phát hành một số hiệu ứng âm thanh này. Trên điện thoại họ chơi (chủ yếu) như mong đợi. Tuy nhiên, trên Kindle Fire, chúng bị cắt ngắn. Những âm thanh ngắn thực sự bị cắt đứt nhanh đến nỗi tôi không nghe thấy gì cả. Những người được tải tại thiết lập và vẫn còn, tuy nhiên, chơi tốt.
Bất kỳ ai có ý tưởng gì đang xảy ra ở đây? Tôi bằng cách nào đó phát hành phương tiện truyền thông của tôi quá sớm? Dưới đây là một ví dụ về điều này. Trên điện thoại, tôi nghe thấy "Cấp hai!" nhưng trên Kindle tôi nghe thấy một cái gì đó như "Lev tw."
mpNum = null;
try
{
switch (level)
{
case 2:
mpNum = MediaPlayer.create(contxt, R.raw.l2); break;
case 3:
mpNum = MediaPlayer.create(contxt, R.raw.l3); break;
case 4:
mpNum = MediaPlayer.create(contxt, R.raw.l4); break;
case 5:
mpNum = MediaPlayer.create(contxt, R.raw.l5); break;
case 6:
mpNum = MediaPlayer.create(contxt, R.raw.l6); break;
case 7:
mpNum = MediaPlayer.create(contxt, R.raw.l7); break;
case 8:
mpNum = MediaPlayer.create(contxt, R.raw.l8); break;
default:
return;
}
MediaPlayer vLevel = MediaPlayer.create(contxt, R.raw.level);
vLevel.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
public void onPrepared(MediaPlayer mp)
{
mp.start();
}
});
vLevel.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mpl)
{
mpNum.start();
mpl.release();
}
});
mpNum.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
mp.release();
}
});
}
catch (Exception e) {}
Để cố khắc phục điều này, tôi đã thử SoundPool nhưng không hoạt động; Tôi chẳng nghe được gì cả. Dưới đây là những gì tôi đã làm để cố gắng để chơi nhạc với Soundpool:
SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundPool.load(contxt, R.raw.song2, 1);
AudioManager mgr = (AudioManager)contxt.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeMax;
soundPool.play(1, volume, volume, 1, 5, 2);
CẬP NHẬT
tôi đã nhận thấy khi một âm thanh cần được chơi (nhưng không) có lỗi này mà đến lên:
AudioPolicyManager: stopOutput() oldDevice 2
AudioPolicyManager: [getDeviceForStrategy] strategy : 0,forceUse(0)
Tôi nhận thấy sự cố này trên thiết bị Nexus 5. Về cơ bản ứng dụng của tôi truyền trực tuyến âm thanh và MediaPlayer đang cắt giảm khoảng. 1- 5 giây quá sớm. Bất cứ ai khác nhận thấy điều này? – clu
Ứng dụng tôi đang làm việc cũng có vấn đề này, điều đó khiến tôi phát điên vì tôi không thể tái tạo nó với các điện thoại tôi có, nhưng có vẻ như thất bại trên Galaxy S4. Dường như lỗi này đã được giới thiệu trong kitkat và chỉ xuất hiện trong những trường hợp rất đặc biệt. – German