2015-01-19 23 views
6

Uygulamamda arka plan müziği için onCreate uygulamasında ve döngülerinde başlayan oldukça standart bir mediaplayer nesnesine sahibim. Dosya olağandışı büyük değil, 6MB MP3. Bu eski telefonlar, Samsung Galaxy Tab 2 10" tablet ve hatta bir Nexus 4.Android mediaplayer ses dosyaları/sadece yeni cihazlarda kekemelikler

Ne yazık ki, yaşıyorum sorunlar da dahil olmak üzere benim test cihazlarının çoğunda gayet güzel çalışıyor

MediaPlayer mp; 
mp = MediaPlayer.create(MainActivity.this, R.raw.lostmexicancity); 
mp.setLooping(true); 
mp.setVolume(0.4f, 0.4f); 
mp.start(); 

: onCreate Gönderen Nexus 5 ve daha yeni Nexus 10'da ses kırışımı/kekemeyle karşılaştığım yeni cihazlarla özel olarak. Bu sorunlar SADECE yeni cihazlarda oluyor, genellikle doğru oynatmanın birkaç saniyesinden sonra değil, hemen Nexus 4 ve 5'in her ikisi de Android'i çalıştırıyor. 4.4.4 ve henüz sorun yalnızca 5.

Bu sorunlar wh şiddetlenir gibi görünüyor Nexus olur jw.org tr Mediaplayer nesnesini duraklatırım ve kısa bir süre için farklı bir oyun oynarım (oyunda kısa dövüşler için savaş müziği) ancak bu ek komplikasyon olmadan bile glitching olur.

Ben Android'in daha yeni versiyonları Mediaplayer ile sorunları neden olduğunu okudum ama bir düzeltme ya da öneri üzerine gelmedik.

Düzeltme veya çalışma önerisinde bulunabilecek başka bir kişi bu sorunu yaşadı mı? Zaman ayırdığın için teşekkürler!

+0

bu sorun için herhangi bir çözüm aldınız mı? –

+0

Hayır, maalesef. – regomar

cevap

0

Bunun Android cihazımda da olduğunu fark ettim.

Ses çalmadan önce önemli bir işlev olan Prepare() aramıyorsunuz. DÜZENLEME - yalnızca bir MediaPlayer.Create() ile değil, yeni kullanarak MediaPlayer oluştururken hazırlanacak bir çağrı gereklidir.

Kaynaklar arasında geçiş yaparken sorununuzla ilgili olarak, SeekTo() işlevini çalmak istediğiniz seste tam olarak aramanızı ve bu konumu SeekComplete dinleyicisi ile beklemenizi öneririz. Yorumlarda, aramanın başlamasına kadar mediaPlayer'daki ses seviyesini ayarlayan küçük bir hacky kodu var. Bu, kekeliği azaltıyor gibi görünüyor, ancak sesin ilk küçük bölümünü kaybedebilirsiniz.

Ben Xamarin Studio C# kullanıyorum, ama bu bile Java kullanıyorsanız, bu aynı yaklaşım çalışmalıdır.

MediaPlayer mediaPlayer = new MediaPlayer(); 
mediaPlayer.SetAudioStreamType (Android.Media.Stream.Music); 
mediaPlayer.SetDataSource ("dataSourcePath"); 

mediaPlayer.Looping = true; 

//It is necessary to call prepare after setting the data source 
mediaPlayer.Prepare(); 

//Ensure the audio has seeked to the position you need 
bool seekingComplete = false; 
mediaPlayer.SeekComplete += (object sender, EventArgs e) => { 
    seekingComplete = true; 
}; 

mediaPlayer.SeekTo(0); 

//Forces the audio to complete seeking 
while(seekingComplete == false) 
{ 
    //Here, you just wait 2 milliseconds at a time 
    //for this buffering and seeking to complete 
    await Task.Delay(2); 
} 

mediaPlayer.Start(); 

//Hacky way to prevent the glitch sound at the start is to set the 
//volume after calling start 
//mediaPlayer.SetVolume(0.4f, 0.4f); 
+0

MediaPlayer.create() 'işlevini çağırmak, sesi otomatik olarak hazırlar. Kesinlikle tekrar aramamalısın. Dokümanlar : "Verilen bir Uri için MediaPlayer oluşturmak için Kolaylık yöntemiyle Başarı halinde, zaten denilen olacaktır) (hazırlayıp yine aradı edilmemelidir." –

İlgili konular