Java 如何将文件传递给JNI以便在OpenSL ES AudioPlayer中播放?
我尝试创建AudioPlayer(根据本机Audio NDK示例),但不使用AssetManager,因为要播放的文件是动态下载的,因此不会打包为ASSET 因此,我想知道是否可以将FileDescriptor从Java传递到JNI,以便在以下示例JNI代码中使用(不使用AssetManager):Java 如何将文件传递给JNI以便在OpenSL ES AudioPlayer中播放?,java,c,android-ndk,java-native-interface,opensl,Java,C,Android Ndk,Java Native Interface,Opensl,我尝试创建AudioPlayer(根据本机Audio NDK示例),但不使用AssetManager,因为要播放的文件是动态下载的,因此不会打包为ASSET 因此,我想知道是否可以将FileDescriptor从Java传递到JNI,以便在以下示例JNI代码中使用(不使用AssetManager): 任何帮助都将不胜感激 不确定这是否准确地回答了这个问题,但下面是我找到的一些从sd卡读取文件的代码。如果您要将文件下载到外部存储器,这应该适用于您: SLchar path[] = "/sdcard
任何帮助都将不胜感激 不确定这是否准确地回答了这个问题,但下面是我找到的一些从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};
你有没有想过?想发布答案吗?我没有,不幸的是,我们只是在JNI端将声音文件硬编码为字节数组。
/** 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;
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};