1

(Native-Audio NDK サンプルに従って) AudioPlayer を作成しようとしていますが、再生するファイルが動的にダウンロードされるため、AssetManager を使用せずにアセットとしてパッケージ化されていません。

そこで、Java から JNI に FileDescriptor を渡して、以下のサンプル JNI コードのような状況で (AssetManager を使用せずに) 使用できるかどうか疑問に思っていました。

// 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}

残念ながら 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;

どんな助けでも大歓迎です!

4

1 に答える 1

1

これが質問に正確に答えるかどうかはわかりませんが、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};
于 2014-09-25T17:32:58.793 に答える