2014-11-10 2 views
7

SoundPool.load 메서드를 사용하여 메모리에서 사운드 샘플을로드하는 방법이 있습니까?Android의 메모리에서 사운드로드

불행히도 SoundPool에 제공된 methods은 모두 실제 파일에 대해 인수를 사용하고 있습니다. 문제는 SDcard의 zip 파일에서 사운드를로드하고 zip을 추출하려는 것입니다 (예 : this 솔루션) 옵션이 아닙니다.

또한 압축되지 않은 zip 파일에서로드하기 위해 solution이 있지만 내 파일이 고의적이며 암호로 표시됩니다.

따라서 가상 파일을 나타내는 java.io.FileDescriptor을 가질 수있는 방법이 있습니까? 그래서 내 자신의 스트림을 배치하는 추상 클래스를 구현할 수 있습니까?

감사합니다.

답변

2

이 질문에 대한 최종 답변을 얻었습니다. Android 플랫폼에서이 기능이 누락되었습니다. 안드로이드 미디어 재생 프레임 워크는 오랫동안 그것을 지원하지 않습니다. Google은 또한이를 고지하므로 Android6.0 (API 레벨 23)에는 순수 메모리 바이트 배열 데이터 소스로 사용될 수있는 android.media.MediaDataSource가 도입되었습니다. API 레벨 23 이전에는 메모리 데이터를 파일 시스템의 임시 파일에 복사해야합니다. 내가 MediaPlayer를 setDataSource 및 SoundPool.load에 대한 매개 변수로 MemoryFile의 FileDescriptor에를 사용하는 데 실패했습니다 how to play video from byte array in media player

1

MemoryFile을 사용하라고 제안했지만 확인한 후에 MemoryFile에 getFileDescriptor() 메소드가 없다는 것을 알게되었습니다. 즉, SoundFool.load()에서 매개 변수로 사용할 수 없다는 것을 알았습니다. 하지만이 게시물을 발견 : what is the use of MemoryFile in android

한 사람 구현 MemoryFileUtil.getFileDescriptor (memFile)는, 그는 거기에 자신의 코드를 게시합니다. 코드가 실제로 작동하면 SoundPool.load()를 사용하여 메모리에서 사운드 샘플을로드 할 수 있음을 의미합니다. 유일한 문제는 메모리 데이터를 해당 메모리 파일에 쓰는 것입니다. 다음 사이트는 메모리 파일로 (SQLite는 쿼리 결과에서) 메모리에 데이터를 기록하는 방법을 보여줍니다 http://www.programcreek.com/java-api-examples/index.php?api=android.os.MemoryFile

나는 내 테스트 후 당신에게 업데이트를 줄 것이다.

+1

() : 다음 URL은이 문제에 좀 더 많은 단서를 제공

은 그 설명은 오디오 및 비디오에 대한 올바른 , 항상 다음 오류를보고합니다. java.io.IOException : setDataSourceFD 실패 : 상태 = 0x80000000 –