2014-03-28 1 views
1

AudioPlayer를 (Native-Audio NDK 샘플에 따라) 만들려고하지만 재생할 파일이 동적으로 다운로드되므로 AssetManager를 사용하지 않으므로 Assets으로 패키지되지 않습니다.OpenSL ES에서 재생하기 위해 파일을 JNI로 전달하는 방법 AudioPlayer?

// open asset as file descriptor 
off_t start, length; 
int fd = AAsset_openFileDescriptor(asset, &start, &length); 
assert(0 <= fd); 
AAsset_close(asset); 

// configure audio source 
SLDataLocator_AndroidFD loc_fd = {SL_DATALOCATOR_ANDROIDFD, fd, start, length}; 
SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED}; 
SLDataSource audioSrc = {&loc_fd, &format_mime} 

를 불행히도에 : 그것은 (AssetManager를 사용하지 않고) 아래의 예제 JNI 코드와 같은 상황에서 사용되는 JNI 자바에서 FileDescriptor에 통과 할 수 있다면

그래서 궁금 해서요 Java 측에서 FileDescriptor는 클래스이며 SLDataLocator_AndroidFD에서 사용할 int (SLuint32)가 아닙니다. 아래

생성자는 :

/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */ typedef struct SLDataLocator_AndroidFD_ { 
    SLuint32  locatorType; 
    SLint32   fd; 
    SLAint64  offset; 
    SLAint64  length; } SLDataLocator_AndroidFD; 

는 어떤 도움을 주시면 감사하겠습니다!

+0

이것을 파악한 적이 있습니까? 응답을 게시하는주의? – anakin78z

+0

불행히도, 우리는 JNI 측에서 사운드 파일을 바이트 배열로 코딩하는 것을 끝내 었습니다. –

답변

0

이 질문에 정확하게 대답할지는 모르겠지만 여기에 SD 카드에서 파일을 읽으려는 코드가 있습니다. 외부 저장소에 파일을 다운로드하는 경우이 파일이 적합합니다.

SLchar path[] = "/sdcard/audio/my_audio.mp3" ; 
SLDataLocator_URI loc_uri = {SL_DATALOCATOR_URI, path}; 
SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, 
     SL_CONTAINERTYPE_UNSPECIFIED}; 
SLDataSource audioSrc = {&loc_uri, &format_mime};