2014-11-10 30 views
7

Czy istnieje sposób na załadowanie próbek dźwięku z pamięci przy użyciu metody SoundPool.load?Ładowanie dźwięku z pamięci w systemie Android

Niestety, wszystkie methods dostarczone w SoundPool używają argumentów dla prawdziwych plików. Problem polega na tym, że chcę załadować dźwięki z pliku zip na karcie SD, a wyodrębnianie zip (jak w przypadku rozwiązania this) nie jest opcją.

Co więcej, istnieje solution do ładowania z nieskompresowanych plików zip, ale moje pliki są skompresowane (i będą z hasłem).

Czy jest jakiś sposób, aby java.io.FileDescriptor reprezentował wirtualny plik, więc mogę zaimplementować jakąś abstrakcyjną klasę umieszczającą moje własne strumienie?

Pozdrawiamy.

Odpowiedz

2

Dostałem ostateczną odpowiedź na to pytanie. Brak tej funkcji na platformie Android. Platforma odtwarzania multimediów na platformie Android nie obsługuje go przez bardzo długi czas. Google również to zauważa, więc Android6.0 (API Level23) wprowadza android.media.MediaDataSource, który może być używany jako źródło danych w postaci czystej tablicy bajtów pamięci. Przed API Level23 nadal musimy skopiować dane z pamięci do pliku tymczasowego w systemie plików.

następujący adres URL podać kilka więcej wskazówek na temat tego problemu, jego wyjaśnienie jest poprawne zarówno audio i video: how to play video from byte array in media player

1

Chciałem zasugerować, abyś użył MemoryFile, ale po sprawdzeniu go, znalazłem, że MemoryFile nie ma metody getFileDescriptor(), oznacza to, że nie mogliśmy użyć go jako parametru w SoundPool.load(). Ale znalazłem ten wpis: what is the use of MemoryFile in android

Jeden facet realizowane MemoryFileUtil.getFileDescriptor (memFile), on księguje swoje kody tam. Jeśli jego kody naprawdę mogłyby działać, oznacza to, że możemy załadować próbkę dźwięku z pamięci za pomocą SoundPool.load(). Jedynym problemem jest zapisywanie danych z naszej pamięci do tego pliku pamięci. Poniższa strona pokazuje jak napisać danych z pamięci (z wyniku kwerendy SQLite) do pliku pamięci: http://www.programcreek.com/java-api-examples/index.php?api=android.os.MemoryFile

dam ci aktualizacji po moim teście.

+1

Zawiodłem używać MemoryFile za deskryptora jako parametrów MediaPlayer setDataSource i SoundPool.load() , zawsze zgłasza następujące błędy: java.io.IOException: setDataSourceFD failed .: status = 0x80000000 –