2011-04-12 19 views
6

Şu anda canlı ses akışları açmak ve kullanıcıya geri oynatabilirsiniz Android cihazınızda bir uygulama uygulanması gereğini var. Bu büyük bir anlaşma değil ve bir akış sunucusunu başarıyla kurdum ve bir dosya için çalıştım. Benim sorum şu ki, birden fazla ses dosyasını aynı anda nasıl akıtırım ve oynatırım?Android - Çoklu, eşzamanlı Streaming Audio

Birden fazla akım (kullanarak MediaPlayer) aç ve hazırlamak ve her dosyayı oynatmak zaman, ben sadece bir dosyadan ses duyuyor. Bunun şu anda mümkün olduğundan emin değilim, ama umuyorum ki.

Ben SoundPool kullanarak içine baktım, ancak yalnızca yerel medya için gibi görünüyor ve onu plaback hızı (hayır bekleme süresi, vs.) için önemli olduğu gibi, bu akış SAHİP OLMALIDIR.

Herhangi bir yardım veya fikir büyük takdir edilir! Şimdiden teşekkürler!

+1

ile ses akışları dışarı haritalama ama am edilir oluyor u aynı anda oynamak istedi neden .......? – viv

+1

Çok-ortamlı belgeler oluşturmayı ve uygulamayı oluşturdum ve kullanıcı aynı anda birden çok ses dosyasını oynatmak istiyorsa, izin vermek isterdim. Örneğin, başka bir şarkı ortaya çıktığında bir şarkıyı soldur. –

+0

Birden fazla sesle denemedim ...... ama MediaPlayer.create() veya yeni MediaPlayer() kullandınız mı? – viv

cevap

1

Daha önce bir uygulama ile müdahalesi oldu ve ben benzer bir sorunu vardı ve ses akışı değildi dışında düzeltmek başardı. Umarım bu yardımcı olabilir, kendi amaçları için değişiklik yapması gerekir:

import android.media.AudioManager; 
import android.media.SoundPool; 
import android.media.SoundPool.OnLoadCompleteListener; 
import android.util.SparseIntArray; 

Burada ses dosyalarını kullanıyorum bir SoundPool ve SparseIntArray somutlaştırın, bu bölümü değiştirmek zorunda kalacaktır.

private static SoundPool soundPool; 
private static SparseIntArray soundPoolMap; 
public static final int S1 = R.raw.good_1, S2 = R.raw.bad_1, 
     P1 = R.raw.power_1, 
     P2 = R.raw.power_2, 
     P3 = R.raw.power_3, 
     P4 = R.raw.power_4, 
     P5 = R.raw.power_5, 
     WIN = R.raw.round_win; 

ses

public static void playSound(Context context, int soundID) 
{ 
    float volume = 1; 
    if(soundPool == null || soundPoolMap == null) 
    { 
     initSounds(context); 
    } 
    soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f); 
} 

bir örnek Play sesleri başlat ve harita

public static void initSounds(Context context) 
{ 
    soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100); 
    soundPoolMap = new SparseIntArray(8);  

    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
     public void onLoadComplete(SoundPool soundPool, int sampleId, 
       int status) { 
      loaded = true; 
     } 
    }); 
    soundPoolMap.put(S1, soundPool.load(context, R.raw.good_1, 1)); 
    soundPoolMap.put(S2, soundPool.load(context, R.raw.bad_1, 2)); 

    soundPoolMap.put(P1, soundPool.load(context, R.raw.power_1, 3)); 
    soundPoolMap.put(P2, soundPool.load(context, R.raw.power_2, 4)); 
    soundPoolMap.put(P3, soundPool.load(context, R.raw.power_3, 5)); 
    soundPoolMap.put(P4, soundPool.load(context, R.raw.power_4, 6)); 
    soundPoolMap.put(P5, soundPool.load(context, R.raw.power_5, 7)); 

    soundPoolMap.put(WIN, soundPool.load(context, R.raw.round_win, 8)); 
} 

ekleyebilirsiniz: PlaySound (bu, P1);

nedir ben SoundPool sınıfını kullanarak ve daha sonra bir SparseIntArray

+0

Teşekkür ile çalışan bir test olsun. Ancak, eşzamanlı ses dosyalarını, yalnızca siz oynatmadığınız zamanlarda oynatmak için kullanabildim. Akış her şeyi kırıyor gibi görünüyordu. Ancak, Android'de çalışmamdan beri biraz zaman geçti ve eminim ki API'lar çok gelişti. Belki örneğiniz şimdi akış için çalışacaktır. –