react-native-queue-player 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/QueuePlayer.podspec +114 -0
- package/README.md +194 -0
- package/android/CMakeLists.txt +41 -0
- package/android/build.gradle +257 -0
- package/android/src/androidTest/java/com/margelo/nitro/queueplayer/SignalsmithStretchNativeTest.kt +136 -0
- package/android/src/main/AndroidManifest.xml +173 -0
- package/android/src/main/cpp/CMakeLists.txt +221 -0
- package/android/src/main/cpp/THIRD_PARTY_LICENSES +128 -0
- package/android/src/main/cpp/THIRD_PARTY_VERSIONS.txt +32 -0
- package/android/src/main/cpp/airplay2_audio.c +537 -0
- package/android/src/main/cpp/airplay2_audio.h +66 -0
- package/android/src/main/cpp/airplay2_control.c +680 -0
- package/android/src/main/cpp/airplay2_control.h +101 -0
- package/android/src/main/cpp/airplay2_crypto.c +548 -0
- package/android/src/main/cpp/airplay2_crypto.h +213 -0
- package/android/src/main/cpp/airplay2_dmap.c +81 -0
- package/android/src/main/cpp/airplay2_dmap.h +53 -0
- package/android/src/main/cpp/airplay2_filelog.h +100 -0
- package/android/src/main/cpp/airplay2_jni.cpp +579 -0
- package/android/src/main/cpp/airplay2_ntp.c +203 -0
- package/android/src/main/cpp/airplay2_ntp.h +39 -0
- package/android/src/main/cpp/airplay2_pair.c +653 -0
- package/android/src/main/cpp/airplay2_pair.h +114 -0
- package/android/src/main/cpp/airplay2_plist.c +840 -0
- package/android/src/main/cpp/airplay2_plist.h +184 -0
- package/android/src/main/cpp/airplay2_ptp.c +509 -0
- package/android/src/main/cpp/airplay2_ptp.h +40 -0
- package/android/src/main/cpp/airplay2_rtsp.c +693 -0
- package/android/src/main/cpp/airplay2_rtsp.h +90 -0
- package/android/src/main/cpp/airplay2_session.c +196 -0
- package/android/src/main/cpp/airplay2_session.h +197 -0
- package/android/src/main/cpp/airplay2_tlv.c +135 -0
- package/android/src/main/cpp/airplay2_tlv.h +87 -0
- package/android/src/main/cpp/airplay_jni.cpp +589 -0
- package/android/src/main/cpp/build-openssl-android.sh +94 -0
- package/android/src/main/cpp/cpp-adapter.cpp +11 -0
- package/android/src/main/cpp/prebuilt/libsodium/arm64-v8a/lib/libsodium.a +0 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/core.h +28 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_aead_aegis128l.h +92 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_aead_aegis256.h +92 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_aead_aes256gcm.h +179 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_aead_chacha20poly1305.h +180 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h +100 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_auth.h +46 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_auth_hmacsha256.h +70 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_auth_hmacsha512.h +68 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_auth_hmacsha512256.h +65 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_box.h +177 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h +164 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h +112 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_ed25519.h +104 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_hchacha20.h +36 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_hsalsa20.h +36 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_ristretto255.h +100 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_salsa20.h +36 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_salsa2012.h +36 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_core_salsa208.h +40 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_generichash.h +84 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_generichash_blake2b.h +122 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_hash.h +40 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_hash_sha256.h +60 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_hash_sha512.h +60 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_kdf.h +53 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_kdf_blake2b.h +44 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_kdf_hkdf_sha256.h +74 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_kdf_hkdf_sha512.h +75 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_kx.h +66 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_onetimeauth.h +65 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_onetimeauth_poly1305.h +72 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_pwhash.h +147 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_pwhash_argon2i.h +122 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_pwhash_argon2id.h +122 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h +120 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_scalarmult.h +46 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_scalarmult_curve25519.h +42 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_scalarmult_ed25519.h +51 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_scalarmult_ristretto255.h +43 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_secretbox.h +93 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h +70 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h +69 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h +108 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_shorthash.h +41 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_shorthash_siphash24.h +50 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_sign.h +107 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_sign_ed25519.h +124 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h +55 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream.h +59 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_chacha20.h +106 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_salsa20.h +61 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_salsa2012.h +53 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_salsa208.h +56 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_xchacha20.h +61 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_stream_xsalsa20.h +61 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_verify_16.h +23 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_verify_32.h +23 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/crypto_verify_64.h +23 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/export.h +57 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/randombytes.h +72 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/randombytes_internal_random.h +22 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/randombytes_sysrandom.h +19 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/runtime.h +55 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/utils.h +179 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium/version.h +33 -0
- package/android/src/main/cpp/prebuilt/libsodium/include/sodium.h +75 -0
- package/android/src/main/cpp/prebuilt/libsodium/x86_64/lib/libsodium.a +0 -0
- package/android/src/main/cpp/prebuilt/openssl/arm64-v8a/lib/libcrypto.a +0 -0
- package/android/src/main/cpp/prebuilt/openssl/arm64-v8a/lib/libssl.a +0 -0
- package/android/src/main/cpp/prebuilt/openssl/x86_64/lib/libcrypto.a +0 -0
- package/android/src/main/cpp/prebuilt/openssl/x86_64/lib/libssl.a +0 -0
- package/android/src/main/cpp/stretch_jni.cpp +171 -0
- package/android/src/main/cpp/third_party/alac/addons/alac_wrapper.cpp +198 -0
- package/android/src/main/cpp/third_party/alac/addons/alac_wrapper.h +46 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACAudioTypes.h +197 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACBitUtilities.c +260 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACBitUtilities.h +104 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACDecoder.cpp +730 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACDecoder.h +65 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACEncoder.cpp +1425 -0
- package/android/src/main/cpp/third_party/alac/codec/ALACEncoder.h +92 -0
- package/android/src/main/cpp/third_party/alac/codec/EndianPortable.c +181 -0
- package/android/src/main/cpp/third_party/alac/codec/EndianPortable.h +59 -0
- package/android/src/main/cpp/third_party/alac/codec/ag_dec.c +362 -0
- package/android/src/main/cpp/third_party/alac/codec/ag_enc.c +370 -0
- package/android/src/main/cpp/third_party/alac/codec/aglib.h +81 -0
- package/android/src/main/cpp/third_party/alac/codec/dp_dec.c +381 -0
- package/android/src/main/cpp/third_party/alac/codec/dp_enc.c +386 -0
- package/android/src/main/cpp/third_party/alac/codec/dplib.h +61 -0
- package/android/src/main/cpp/third_party/alac/codec/matrix_dec.c +390 -0
- package/android/src/main/cpp/third_party/alac/codec/matrix_enc.c +342 -0
- package/android/src/main/cpp/third_party/alac/codec/matrixlib.h +80 -0
- package/android/src/main/cpp/third_party/crosstools/cross_log.c +95 -0
- package/android/src/main/cpp/third_party/crosstools/cross_log.h +25 -0
- package/android/src/main/cpp/third_party/crosstools/cross_net.c +1139 -0
- package/android/src/main/cpp/third_party/crosstools/cross_net.h +51 -0
- package/android/src/main/cpp/third_party/crosstools/cross_ssl.c +371 -0
- package/android/src/main/cpp/third_party/crosstools/cross_ssl.h +15 -0
- package/android/src/main/cpp/third_party/crosstools/cross_thread.c +134 -0
- package/android/src/main/cpp/third_party/crosstools/cross_thread.h +20 -0
- package/android/src/main/cpp/third_party/crosstools/cross_util.c +753 -0
- package/android/src/main/cpp/third_party/crosstools/cross_util.h +125 -0
- package/android/src/main/cpp/third_party/crosstools/platform.c +227 -0
- package/android/src/main/cpp/third_party/crosstools/platform.h +127 -0
- package/android/src/main/cpp/third_party/curve25519/include/curve25519_dh.h +53 -0
- package/android/src/main/cpp/third_party/curve25519/include/ed25519_signature.h +98 -0
- package/android/src/main/cpp/third_party/curve25519/include/external_calls.h +36 -0
- package/android/src/main/cpp/third_party/curve25519/source/BaseTypes.h +125 -0
- package/android/src/main/cpp/third_party/curve25519/source/base_folding8.h +1288 -0
- package/android/src/main/cpp/third_party/curve25519/source/curve25519_dh.c +208 -0
- package/android/src/main/cpp/third_party/curve25519/source/curve25519_mehdi.c +410 -0
- package/android/src/main/cpp/third_party/curve25519/source/curve25519_mehdi.h +175 -0
- package/android/src/main/cpp/third_party/curve25519/source/curve25519_order.c +155 -0
- package/android/src/main/cpp/third_party/curve25519/source/curve25519_utils.c +153 -0
- package/android/src/main/cpp/third_party/curve25519/source/custom_blind.c +27 -0
- package/android/src/main/cpp/third_party/curve25519/source/custom_blind.h +11 -0
- package/android/src/main/cpp/third_party/curve25519/source/ed25519_sign.c +419 -0
- package/android/src/main/cpp/third_party/curve25519/source/ed25519_signature.h +98 -0
- package/android/src/main/cpp/third_party/curve25519/source/ed25519_verify.c +313 -0
- package/android/src/main/cpp/third_party/curve25519/source/sha512.c +294 -0
- package/android/src/main/cpp/third_party/curve25519/source/sha512.h +93 -0
- package/android/src/main/cpp/third_party/dmap-parser/dmap_parser.c +545 -0
- package/android/src/main/cpp/third_party/dmap-parser/dmap_parser.h +90 -0
- package/android/src/main/cpp/third_party/libraop/aes.c +863 -0
- package/android/src/main/cpp/third_party/libraop/aes.h +18 -0
- package/android/src/main/cpp/third_party/libraop/aes_ctr.c +89 -0
- package/android/src/main/cpp/third_party/libraop/aes_ctr.h +59 -0
- package/android/src/main/cpp/third_party/libraop/alac.c +1135 -0
- package/android/src/main/cpp/third_party/libraop/alac.h +55 -0
- package/android/src/main/cpp/third_party/libraop/raop_client.c +1500 -0
- package/android/src/main/cpp/third_party/libraop/raop_client.h +178 -0
- package/android/src/main/cpp/third_party/libraop/rtsp_client.c +743 -0
- package/android/src/main/cpp/third_party/libraop/rtsp_client.h +50 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/aes.h +111 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asn1.h +1134 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asn1.h.in +967 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asn1err.h +142 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asn1t.h +946 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asn1t.h.in +923 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/async.h +104 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/asyncerr.h +29 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/bio.h +1022 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/bio.h.in +999 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/bioerr.h +72 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/blowfish.h +78 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/bn.h +590 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/bnerr.h +47 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/buffer.h +62 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/buffererr.h +25 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/byteorder.h +339 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/camellia.h +117 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cast.h +71 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmac.h +52 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmp.h +727 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmp.h.in +584 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmp_util.h +56 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmperr.h +134 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cms.h +511 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cms.h.in +413 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cmserr.h +126 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/comp.h +98 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/comp.h.in +76 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/comperr.h +38 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/conf.h +214 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/conf.h.in +177 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/conf_api.h +46 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/conferr.h +52 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/configuration.h +212 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/configuration.h.in +75 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/conftypes.h +44 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/core.h +236 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/core_dispatch.h +1141 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/core_names.h +575 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/core_names.h.in +126 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/core_object.h +41 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/crmf.h +278 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/crmf.h.in +207 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/crmferr.h +57 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/crypto.h +583 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/crypto.h.in +560 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cryptoerr.h +56 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cryptoerr_legacy.h +1466 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ct.h +573 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ct.h.in +525 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/cterr.h +45 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/decoder.h +133 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/decodererr.h +28 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/des.h +211 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/dh.h +339 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/dherr.h +59 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/dsa.h +280 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/dsaerr.h +44 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/dtls1.h +57 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/e_os2.h +310 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/e_ostime.h +38 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ebcdic.h +39 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ec.h +1588 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ecdh.h +10 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ecdsa.h +10 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ecerr.h +104 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/encoder.h +124 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/encodererr.h +28 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/engine.h +833 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/engineerr.h +63 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/err.h +512 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/err.h.in +501 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ess.h +128 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ess.h.in +81 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/esserr.h +32 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/evp.h +2310 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/evperr.h +142 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/fips_names.h +50 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/fipskey.h +41 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/fipskey.h.in +40 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/hmac.h +62 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/hpke.h +169 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/http.h +119 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/httperr.h +56 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/idea.h +82 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/indicator.h +31 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/kdf.h +138 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/kdferr.h +16 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/lhash.h +398 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/lhash.h.in +373 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/macros.h +349 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/md2.h +56 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/md4.h +63 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/md5.h +62 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/mdc2.h +55 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ml_kem.h +31 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/modes.h +219 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/obj_mac.h +6636 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/objects.h +184 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/objectserr.h +28 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ocsp.h +483 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ocsp.h.in +387 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ocsperr.h +53 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/opensslconf.h +17 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/opensslv.h +114 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/opensslv.h.in +113 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ossl_typ.h +16 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/param_build.h +63 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/params.h +163 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pem.h +547 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pem2.h +19 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pemerr.h +59 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs12.h +366 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs12.h.in +343 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs12err.h +46 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs7.h +430 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs7.h.in +359 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/pkcs7err.h +63 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/prov_ssl.h +38 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/proverr.h +169 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/provider.h +94 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/quic.h +75 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rand.h +131 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/randerr.h +70 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rc2.h +68 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rc4.h +47 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rc5.h +79 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ripemd.h +59 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rsa.h +615 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/rsaerr.h +107 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/safestack.h +297 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/safestack.h.in +227 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/seed.h +113 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/self_test.h +112 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/sha.h +139 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/srp.h +285 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/srp.h.in +214 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/srtp.h +68 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ssl.h +2933 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ssl.h.in +2886 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ssl2.h +30 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ssl3.h +358 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/sslerr.h +382 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/sslerr_legacy.h +467 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/stack.h +90 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/store.h +377 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/storeerr.h +49 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/symhacks.h +39 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/thread.h +31 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/tls1.h +1220 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/trace.h +321 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ts.h +522 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/tserr.h +67 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/txt_db.h +63 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/types.h +248 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ui.h +407 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/ui.h.in +384 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/uierr.h +38 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/whrlpool.h +62 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509.h +1303 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509.h.in +1109 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509_acert.h +294 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509_acert.h.in +199 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509_vfy.h +903 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509_vfy.h.in +806 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509err.h +70 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509v3.h +1968 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509v3.h.in +1367 -0
- package/android/src/main/cpp/third_party/openssl/include/openssl/x509v3err.h +97 -0
- package/android/src/main/cpp/third_party/pair_ap/pair-internal.h +390 -0
- package/android/src/main/cpp/third_party/pair_ap/pair-tlv.c +221 -0
- package/android/src/main/cpp/third_party/pair_ap/pair-tlv.h +77 -0
- package/android/src/main/cpp/third_party/pair_ap/pair.c +806 -0
- package/android/src/main/cpp/third_party/pair_ap/pair.h +266 -0
- package/android/src/main/cpp/third_party/pair_ap/pair_fruit_stub.c +36 -0
- package/android/src/main/cpp/third_party/pair_ap/pair_homekit.c +3190 -0
- package/android/src/main/cpp/third_party/signalsmith/LICENSE-signalsmith-linear.txt +21 -0
- package/android/src/main/cpp/third_party/signalsmith/LICENSE-signalsmith-stretch.txt +21 -0
- package/android/src/main/cpp/third_party/signalsmith/THIRD_PARTY_VERSIONS.txt +9 -0
- package/android/src/main/cpp/third_party/signalsmith/include/signalsmith-linear/fft.h +1380 -0
- package/android/src/main/cpp/third_party/signalsmith/include/signalsmith-linear/linear.h +1075 -0
- package/android/src/main/cpp/third_party/signalsmith/include/signalsmith-linear/stft.h +643 -0
- package/android/src/main/cpp/third_party/signalsmith/include/signalsmith-stretch.h +1060 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/AirPlayEngine.kt +314 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ArtworkContentProvider.kt +124 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/AudioFocusErrorMapping.kt +89 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/AudioPipelineRenderersFactory.kt +60 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/BrowseCallbackRegistry.kt +136 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/BrowseDataProvider.kt +128 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/BufferStateTranslator.kt +35 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/CacheMimeTypes.kt +79 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/CastManager.kt +629 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/CrossfadeEngine.kt +1350 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/CrossfadeForwardingPlayer.kt +66 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/CustomPresetStore.kt +100 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/Equalizer.kt +348 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/EqualizerEngine.kt +222 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/EqualizerLegacyEngine.kt +213 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/EqualizerPresets.kt +45 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/FFTProcessorTee.kt +173 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/FifoCacheEvictor.kt +96 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/GaplessEngine.kt +587 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/HeadlessJsMediaService.kt +220 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/IEqualizerEngine.kt +97 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ListenerRegistry.kt +59 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/LookaheadCache.kt +343 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/LookaheadCacheWriter.kt +533 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MediaButtonDispatch.kt +88 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MediaItemBuilder.kt +281 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MediaItemMapper.kt +76 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MilestoneTracker.kt +66 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MimeCapturingDataSource.kt +64 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/MultiplexingAudioBufferSink.kt +92 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/NotificationProvider.kt +37 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/NowPlayingFormatExtractor.kt +166 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PendingBrowseRequests.kt +70 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PendingIntentBuffer.kt +82 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PitchAwareAudioProcessorChain.kt +69 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PitchCorrection.kt +27 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderArtwork.kt +65 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoader.kt +75 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackEngine.kt +336 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackErrorMapping.kt +175 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackModeStateMachine.kt +127 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackService.kt +1716 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackServiceCallback.kt +755 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ProgressEmissionGate.kt +70 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/QueueMutationArithmetic.kt +131 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/QueuePlayerPackage.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/QueueSkipArithmetic.kt +113 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/RadixTwoFFT.kt +176 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/RemoteCommandDeduper.kt +81 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ReplayGainAudioProcessor.kt +84 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ReplayGainConfig.kt +34 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ReplayGainData.kt +44 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ReplayGainExtractor.kt +209 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/ReplayGainGain.kt +34 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/SearchResultCache.kt +72 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/SessionCommandForwardingPlayer.kt +167 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/SignalsmithStretchAudioProcessor.kt +225 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/SignalsmithStretchNative.kt +93 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/SleepTimerCore.kt +125 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/TrackPlayer.kt +4242 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/TransportStateTranslator.kt +70 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/UrlSchemes.kt +9 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/VisualizationGate.kt +35 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/Visualizer.kt +240 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/VisualizerTeeBuilder.kt +63 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/VoiceSearchExtrasParser.kt +103 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/AudioRouteState.kt +202 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/AuthRequiredException.kt +14 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastBackend.kt +41 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastBackends.kt +56 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastEventBridge.kt +122 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastMediaItem.kt +20 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastSession.kt +193 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastSinkRouter.kt +95 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/CastTransportRouter.kt +151 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/DiscoveryState.kt +53 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/MetadataAwareSession.kt +17 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/PlaybackStateRouter.kt +65 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/Receiver.kt +35 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlay2JNI.kt +129 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlay2MetadataSync.kt +189 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlay2Session.kt +123 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlay2Sink.kt +205 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayBackend.kt +585 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayBackendInitializer.kt +43 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayDiscovery.kt +511 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayDiscoveryLifecycleObserver.kt +57 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayMetadataSync.kt +199 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayReceiverMapper.kt +42 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayRenderersFactory.kt +43 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlaySession.kt +101 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlaySink.kt +265 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayTxtParser.kt +203 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/AirplayJNI.kt +106 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/airplay/MulticastLockHolder.kt +75 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/CastMediaItemConverter.kt +67 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/CastVolumeForwardingPlayer.kt +156 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/ChromecastBackend.kt +171 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/ChromecastOptionsProvider.kt +51 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/ChromecastReceiverMapper.kt +44 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/ChromecastSession.kt +544 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/MediaInfoBuilder.kt +92 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/chromecast/RemoteMediaCallbacks.kt +113 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/http/LocalMediaServer.kt +160 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/http/LocalMediaServerLifecycle.kt +15 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/http/MediaServerHandle.kt +44 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/http/MediaTokenRegistry.kt +37 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/http/MimeTypes.kt +27 -0
- package/android/src/main/java/com/margelo/nitro/queueplayer/cast/net/LocalAddressMonitor.kt +86 -0
- package/android/src/main/res/raw/rnqp_placeholder.jpg +0 -0
- package/android/src/main/res/values/cast_strings.xml +15 -0
- package/android/src/main/res/values/strings.xml +24 -0
- package/android/src/main/res/xml/automotive_app_desc.xml +15 -0
- package/android/src/test/java/androidx/media3/session/MediaSessionControllerRequestTestSeam.kt +27 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ArtworkContentProviderTest.kt +124 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/AudioFocusErrorMappingTest.kt +122 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/AudioPipelineRenderersFactoryTest.kt +57 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/AvrcpMetadataTest.kt +264 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/BrowseCallbackRegistryTest.kt +104 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/BrowseDataProviderTest.kt +276 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/BufferStateTranslatorTest.kt +58 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/CacheMimeTypesTest.kt +116 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/CrossfadeEngineLifecycleTest.kt +214 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/CrossfadeEngineReplayGainTest.kt +180 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/CustomPresetStoreTest.kt +128 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerEngineTest.kt +223 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerKtTest.kt +274 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerLegacyEngineTest.kt +214 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerPresetsTest.kt +89 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/FFTProcessorTeeTest.kt +185 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/FifoCacheEvictorTest.kt +112 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ForwardingPlayerTestAccess.kt +21 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/GaplessEngineLifecycleTest.kt +65 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/GaplessEngineReplayGainTest.kt +154 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/HeadlessJsMediaServiceTest.kt +106 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/LookaheadCacheTest.kt +183 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/LookaheadCacheWriterTest.kt +649 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/MediaButtonDispatchTest.kt +192 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/MediaItemBuilderTest.kt +389 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/MediaItemMapperTest.kt +145 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/MilestoneTrackerTest.kt +81 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/MultiplexingAudioBufferSinkTest.kt +112 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/NotificationProviderTest.kt +86 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/NowPlayingFormatExtractorTest.kt +106 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PendingBrowseRequestsTest.kt +82 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PendingIntentBufferTest.kt +192 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PitchAwareAudioProcessorChainTest.kt +147 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PitchCorrectionTest.kt +55 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaceholderFallbackBitmapLoaderTest.kt +187 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackEngineInterfaceTest.kt +134 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackModeStateMachineTest.kt +157 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceArtworkLoaderTest.kt +95 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackBrowseTest.kt +480 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackSearchTest.kt +171 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackTest.kt +773 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCastBindTest.kt +100 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceLifecycleTest.kt +315 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceSessionActivityTest.kt +121 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/PlayerCommandsForTest.kt +246 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ProgressEmissionGateTest.kt +113 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/QueueMutationArithmeticTest.kt +252 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/QueueSkipArithmeticTest.kt +343 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/RadixTwoFFTTest.kt +109 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/RemoteCommandDeduperTest.kt +106 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ReplayGainAudioProcessorTest.kt +141 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ReplayGainConfigTest.kt +103 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ReplayGainExtractorTest.kt +469 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ReplayGainGainTest.kt +129 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/RobolectricServiceBindHelper.kt +83 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/SearchResultCacheTest.kt +128 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/ServiceReadyReasonTest.kt +42 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/SessionCommandForwardingPlayerTest.kt +521 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/SleepTimerCoreTest.kt +125 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/SmokeTest.kt +27 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAirPlayMetadataWiringTest.kt +305 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerAudioFocusTest.kt +179 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerEventsTest.kt +497 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLifecycleTest.kt +209 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerLookaheadConfigTest.kt +417 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerMutationTest.kt +473 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerPitchCorrectionTest.kt +61 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerPlaybackModeTest.kt +28 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerProgressThrottleTest.kt +89 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerQueueTest.kt +290 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerReadersTest.kt +151 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerReplayGainTest.kt +69 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipCapabilityTest.kt +324 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSkipTest.kt +287 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerSourceClassifierTest.kt +82 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerTransportTest.kt +222 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/TransportStateTranslatorTest.kt +287 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/VisualizationGateTest.kt +96 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/VisualizerKtTest.kt +202 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/VoiceSearchExtrasParserTest.kt +211 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/CastSinkRouterTest.kt +120 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/FakeRemotePlayer.kt +62 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/PlaybackStateRouterTest.kt +43 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayDiscoveryFilterTest.kt +86 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/airplay/AirPlayTxtParserClassificationTest.kt +34 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/chromecast/CastMediaItemConverterTest.kt +78 -0
- package/android/src/test/java/com/margelo/nitro/queueplayer/cast/chromecast/CastVolumeForwardingPlayerTest.kt +176 -0
- package/app.plugin.js +466 -0
- package/ios/AVPlayerItemQueueItemId.swift +61 -0
- package/ios/AVQueueBuilder.swift +200 -0
- package/ios/Array+SafeSubscript.swift +6 -0
- package/ios/ArtworkLoader.swift +136 -0
- package/ios/ArtworkResolver.swift +87 -0
- package/ios/AudioCategoryMapping.swift +48 -0
- package/ios/AudioSession.swift +220 -0
- package/ios/AudioSessionError.swift +44 -0
- package/ios/AudioTapProvider.swift +647 -0
- package/ios/BiquadCoefficients.swift +80 -0
- package/ios/CarPlayBridge.swift +178 -0
- package/ios/CarPlayBrowseBuilder.swift +368 -0
- package/ios/CarPlayBrowseDataProvider.swift +162 -0
- package/ios/CarPlayCoordinator.swift +42 -0
- package/ios/CarPlaySceneDelegate.swift +199 -0
- package/ios/Cast/AirPlayRouteState.swift +281 -0
- package/ios/Cast/Chromecast/ChromecastDiscoveryAdapter.swift +27 -0
- package/ios/Cast/Chromecast/ChromecastReceiverMapper.swift +48 -0
- package/ios/Cast/Chromecast/ChromecastSession.swift +740 -0
- package/ios/Cast/Chromecast/ChromecastSessionAdapter.swift +114 -0
- package/ios/Cast/Chromecast/ChromecastSupport.swift +63 -0
- package/ios/Cast/Chromecast/MediaInfoBuilder.swift +104 -0
- package/ios/Cast/Chromecast/RemoteMediaObserver.swift +147 -0
- package/ios/Cast/Core/CastEventBridge.swift +210 -0
- package/ios/Cast/Core/CastMediaItem.swift +41 -0
- package/ios/Cast/Core/CastNowPlayingController.swift +310 -0
- package/ios/Cast/Core/CastReceiverState.swift +22 -0
- package/ios/Cast/Core/CastSession.swift +147 -0
- package/ios/Cast/Core/CastTransportRouter.swift +162 -0
- package/ios/Cast/Core/ChromecastBackend.swift +259 -0
- package/ios/Cast/Core/LocalAddressMonitor.swift +110 -0
- package/ios/Cast/Core/LocalMediaServer.swift +270 -0
- package/ios/Cast/Core/LocalNetworkPermissionProbe.swift +265 -0
- package/ios/Cast/Core/MediaHTTPConnection.swift +349 -0
- package/ios/Cast/Core/MediaServerHandle.swift +49 -0
- package/ios/Cast/Core/MediaTokenRegistry.swift +51 -0
- package/ios/Cast/Core/MimeTypes.swift +26 -0
- package/ios/Cast/Core/PlaybackStateRouter.swift +123 -0
- package/ios/CastManager.swift +493 -0
- package/ios/CrossfadeEngine.swift +1343 -0
- package/ios/CustomPresetStore.swift +78 -0
- package/ios/EQProcessor.swift +321 -0
- package/ios/EQTap.swift +241 -0
- package/ios/Equalizer.swift +321 -0
- package/ios/EqualizerPresets.swift +48 -0
- package/ios/FFTProcessor.swift +237 -0
- package/ios/GaplessEngine.swift +385 -0
- package/ios/InputGuards.swift +63 -0
- package/ios/InterruptionEventMapping.swift +51 -0
- package/ios/ListenerRegistry.swift +73 -0
- package/ios/LookaheadCache.swift +833 -0
- package/ios/LookaheadCacheEviction.swift +83 -0
- package/ios/LookaheadCachePrefetcher.swift +503 -0
- package/ios/MetadataReader.swift +555 -0
- package/ios/MilestoneTracker.swift +63 -0
- package/ios/NowPlayingFormatExtractor.swift +362 -0
- package/ios/NowPlayingInfo.swift +190 -0
- package/ios/OutputRouteMonitor.swift +125 -0
- package/ios/PendingBrowseRequests.swift +62 -0
- package/ios/PitchAlgorithm.swift +24 -0
- package/ios/PlaceholderArtwork.swift +46 -0
- package/ios/PlaybackEngine.swift +319 -0
- package/ios/PlaybackErrorMapping.swift +195 -0
- package/ios/PlaybackModeStateMachine.swift +159 -0
- package/ios/PlayerStateDerivation.swift +45 -0
- package/ios/ProgressEmissionGate.swift +54 -0
- package/ios/QueueMutationArithmetic.swift +129 -0
- package/ios/QueueSkipArithmetic.swift +109 -0
- package/ios/QueueState.swift +49 -0
- package/ios/RemoteCommands.swift +229 -0
- package/ios/ReplayGainData.swift +58 -0
- package/ios/ReplayGainExtractor.swift +82 -0
- package/ios/ReplayGainProcessor.swift +46 -0
- package/ios/Resources/RNQP-placeholder.jpg +0 -0
- package/ios/Resources/silence.m4a +0 -0
- package/ios/Siri/PendingIntentBuffer.swift +100 -0
- package/ios/Siri/PlayMediaIntentHandler.swift +283 -0
- package/ios/Siri/QueuePlayerMediaIntents.swift +45 -0
- package/ios/Siri/VoiceDonation.swift +50 -0
- package/ios/SleepTimerCore.swift +128 -0
- package/ios/StreamingBitrateProbe.swift +318 -0
- package/ios/Tests/AVQueueBuilderTests.swift +430 -0
- package/ios/Tests/ArtworkResolverTests.swift +540 -0
- package/ios/Tests/AudioSessionTests.swift +222 -0
- package/ios/Tests/AudioTapProviderReplayGainTests.swift +136 -0
- package/ios/Tests/AudioTapProviderVisualizationFlagTests.swift +104 -0
- package/ios/Tests/BiquadCoefficientsTests.swift +84 -0
- package/ios/Tests/CarPlayBridgeTests.swift +91 -0
- package/ios/Tests/CarPlayBrowseBuilderTests.swift +221 -0
- package/ios/Tests/CarPlayBrowseDataProviderTests.swift +218 -0
- package/ios/Tests/CastNowPlayingControllerTests.swift +204 -0
- package/ios/Tests/CrossfadeEngineStubTests.swift +43 -0
- package/ios/Tests/EQProcessorTests.swift +302 -0
- package/ios/Tests/EQTapTests.swift +49 -0
- package/ios/Tests/EqualizerAudioMixProviderTests.swift +110 -0
- package/ios/Tests/EqualizerHybridTests.swift +303 -0
- package/ios/Tests/EqualizerPresetsTests.swift +69 -0
- package/ios/Tests/FFTProcessorTests.swift +303 -0
- package/ios/Tests/Fixtures/silence-aac-128.m4a +0 -0
- package/ios/Tests/Fixtures/silence-cbr-128.mp3 +0 -0
- package/ios/Tests/Fixtures/silence-vbr.mp3 +0 -0
- package/ios/Tests/GaplessEngineLifecycleTests.swift +160 -0
- package/ios/Tests/InputGuardsTests.swift +75 -0
- package/ios/Tests/InterruptionEventMappingTests.swift +91 -0
- package/ios/Tests/LookaheadCacheEvictionTests.swift +217 -0
- package/ios/Tests/LookaheadCachePrefetcherTests.swift +630 -0
- package/ios/Tests/LookaheadCacheRuntimeConfigTests.swift +247 -0
- package/ios/Tests/LookaheadCacheTests.swift +717 -0
- package/ios/Tests/MediaHTTPConnectionTests.swift +163 -0
- package/ios/Tests/MetadataReaderTests.swift +605 -0
- package/ios/Tests/MilestoneTrackerTests.swift +76 -0
- package/ios/Tests/NowPlayingFormatExtractorTests.swift +158 -0
- package/ios/Tests/NowPlayingInfoTests.swift +292 -0
- package/ios/Tests/PendingBrowseRequestsTests.swift +69 -0
- package/ios/Tests/PendingIntentBufferTests.swift +164 -0
- package/ios/Tests/PlaybackEngineProtocolTests.swift +92 -0
- package/ios/Tests/PlaybackErrorMappingTests.swift +179 -0
- package/ios/Tests/PlaybackModeStateMachineTests.swift +40 -0
- package/ios/Tests/PlaybackStateRouterTests.swift +178 -0
- package/ios/Tests/PlayerStateDerivationTests.swift +69 -0
- package/ios/Tests/ProgressEmissionGateTests.swift +113 -0
- package/ios/Tests/QueueMutationArithmeticTests.swift +245 -0
- package/ios/Tests/RemoteCommandsTests.swift +147 -0
- package/ios/Tests/ReplayGainExtractorTests.swift +197 -0
- package/ios/Tests/ReplayGainProcessorTests.swift +90 -0
- package/ios/Tests/SkipCapabilityTests.swift +98 -0
- package/ios/Tests/SkipIndexTests.swift +259 -0
- package/ios/Tests/SleepTimerCoreTests.swift +98 -0
- package/ios/Tests/StreamingBitrateProbeTests.swift +29 -0
- package/ios/Tests/TrackSourceClassifierTests.swift +50 -0
- package/ios/Tests/VoiceDonationTests.swift +26 -0
- package/ios/TrackPlayer.swift +4766 -0
- package/ios/Visualizer.swift +274 -0
- package/ios/WindowApplicationSceneDelegate.swift +59 -0
- package/ios/tests-harness/Podfile +56 -0
- package/ios/tests-harness/TestHost/App.swift +12 -0
- package/ios/tests-harness/TestHost/Info.plist +37 -0
- package/ios/tests-harness/TestHost.xcodeproj/project.pbxproj +472 -0
- package/ios/tests-harness/TestHost.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme +68 -0
- package/ios/tests-harness/package.json +10 -0
- package/ios/tests-harness/scripts/seed-xcodeproj.rb +118 -0
- package/lib/module/CastManager.nitro.js +4 -0
- package/lib/module/CastManager.nitro.js.map +1 -0
- package/lib/module/Equalizer.nitro.js +4 -0
- package/lib/module/Equalizer.nitro.js.map +1 -0
- package/lib/module/TrackPlayer.nitro.js +4 -0
- package/lib/module/TrackPlayer.nitro.js.map +1 -0
- package/lib/module/Visualizer.nitro.js +4 -0
- package/lib/module/Visualizer.nitro.js.map +1 -0
- package/lib/module/cast/index.js +156 -0
- package/lib/module/cast/index.js.map +1 -0
- package/lib/module/clients.js +43 -0
- package/lib/module/clients.js.map +1 -0
- package/lib/module/equalizer.js +85 -0
- package/lib/module/equalizer.js.map +1 -0
- package/lib/module/hooks/index.js +16 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useActiveTrack.js +50 -0
- package/lib/module/hooks/useActiveTrack.js.map +1 -0
- package/lib/module/hooks/useAudioRoute.js +60 -0
- package/lib/module/hooks/useAudioRoute.js.map +1 -0
- package/lib/module/hooks/useBufferState.js +34 -0
- package/lib/module/hooks/useBufferState.js.map +1 -0
- package/lib/module/hooks/useCanSkip.js +67 -0
- package/lib/module/hooks/useCanSkip.js.map +1 -0
- package/lib/module/hooks/useCast.js +107 -0
- package/lib/module/hooks/useCast.js.map +1 -0
- package/lib/module/hooks/useEqualizer.js +91 -0
- package/lib/module/hooks/useEqualizer.js.map +1 -0
- package/lib/module/hooks/useFullyBuffered.js +33 -0
- package/lib/module/hooks/useFullyBuffered.js.map +1 -0
- package/lib/module/hooks/useLookaheadCache.js +49 -0
- package/lib/module/hooks/useLookaheadCache.js.map +1 -0
- package/lib/module/hooks/useNowPlayingFormat.js +42 -0
- package/lib/module/hooks/useNowPlayingFormat.js.map +1 -0
- package/lib/module/hooks/usePlaybackState.js +36 -0
- package/lib/module/hooks/usePlaybackState.js.map +1 -0
- package/lib/module/hooks/useProgress.js +31 -0
- package/lib/module/hooks/useProgress.js.map +1 -0
- package/lib/module/hooks/useSleepTimer.js +65 -0
- package/lib/module/hooks/useSleepTimer.js.map +1 -0
- package/lib/module/hooks/useVisualizerState.js +99 -0
- package/lib/module/hooks/useVisualizerState.js.map +1 -0
- package/lib/module/index.js +37 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/playbackService.js +174 -0
- package/lib/module/playbackService.js.map +1 -0
- package/lib/module/types.js +592 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/CastManager.nitro.d.ts +154 -0
- package/lib/typescript/CastManager.nitro.d.ts.map +1 -0
- package/lib/typescript/Equalizer.nitro.d.ts +30 -0
- package/lib/typescript/Equalizer.nitro.d.ts.map +1 -0
- package/lib/typescript/TrackPlayer.nitro.d.ts +584 -0
- package/lib/typescript/TrackPlayer.nitro.d.ts.map +1 -0
- package/lib/typescript/Visualizer.nitro.d.ts +36 -0
- package/lib/typescript/Visualizer.nitro.d.ts.map +1 -0
- package/lib/typescript/cast/index.d.ts +65 -0
- package/lib/typescript/cast/index.d.ts.map +1 -0
- package/lib/typescript/clients.d.ts +9 -0
- package/lib/typescript/clients.d.ts.map +1 -0
- package/lib/typescript/equalizer.d.ts +45 -0
- package/lib/typescript/equalizer.d.ts.map +1 -0
- package/lib/typescript/hooks/index.d.ts +22 -0
- package/lib/typescript/hooks/index.d.ts.map +1 -0
- package/lib/typescript/hooks/useActiveTrack.d.ts +21 -0
- package/lib/typescript/hooks/useActiveTrack.d.ts.map +1 -0
- package/lib/typescript/hooks/useAudioRoute.d.ts +13 -0
- package/lib/typescript/hooks/useAudioRoute.d.ts.map +1 -0
- package/lib/typescript/hooks/useBufferState.d.ts +18 -0
- package/lib/typescript/hooks/useBufferState.d.ts.map +1 -0
- package/lib/typescript/hooks/useCanSkip.d.ts +43 -0
- package/lib/typescript/hooks/useCanSkip.d.ts.map +1 -0
- package/lib/typescript/hooks/useCast.d.ts +32 -0
- package/lib/typescript/hooks/useCast.d.ts.map +1 -0
- package/lib/typescript/hooks/useEqualizer.d.ts +20 -0
- package/lib/typescript/hooks/useEqualizer.d.ts.map +1 -0
- package/lib/typescript/hooks/useFullyBuffered.d.ts +15 -0
- package/lib/typescript/hooks/useFullyBuffered.d.ts.map +1 -0
- package/lib/typescript/hooks/useLookaheadCache.d.ts +13 -0
- package/lib/typescript/hooks/useLookaheadCache.d.ts.map +1 -0
- package/lib/typescript/hooks/useNowPlayingFormat.d.ts +18 -0
- package/lib/typescript/hooks/useNowPlayingFormat.d.ts.map +1 -0
- package/lib/typescript/hooks/usePlaybackState.d.ts +9 -0
- package/lib/typescript/hooks/usePlaybackState.d.ts.map +1 -0
- package/lib/typescript/hooks/useProgress.d.ts +15 -0
- package/lib/typescript/hooks/useProgress.d.ts.map +1 -0
- package/lib/typescript/hooks/useSleepTimer.d.ts +26 -0
- package/lib/typescript/hooks/useSleepTimer.d.ts.map +1 -0
- package/lib/typescript/hooks/useVisualizerState.d.ts +40 -0
- package/lib/typescript/hooks/useVisualizerState.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +14 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/playbackService.d.ts +140 -0
- package/lib/typescript/playbackService.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +1215 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/nitro.json +53 -0
- package/nitrogen/generated/android/c++/JAudioCategoryOptions.hpp +65 -0
- package/nitrogen/generated/android/c++/JAudioCodec.hpp +73 -0
- package/nitrogen/generated/android/c++/JAudioContainer.hpp +76 -0
- package/nitrogen/generated/android/c++/JAudioContentType.hpp +58 -0
- package/nitrogen/generated/android/c++/JAudioRoute.hpp +75 -0
- package/nitrogen/generated/android/c++/JAudioRouteKind.hpp +91 -0
- package/nitrogen/generated/android/c++/JBrowseItem.hpp +78 -0
- package/nitrogen/generated/android/c++/JBrowseSection.hpp +97 -0
- package/nitrogen/generated/android/c++/JBrowseSnapshot.hpp +87 -0
- package/nitrogen/generated/android/c++/JBufferState.hpp +64 -0
- package/nitrogen/generated/android/c++/JCacheStatus.hpp +92 -0
- package/nitrogen/generated/android/c++/JCastConfigureOptions.hpp +62 -0
- package/nitrogen/generated/android/c++/JCastConnectOptions.hpp +57 -0
- package/nitrogen/generated/android/c++/JCastDeviceKind.hpp +70 -0
- package/nitrogen/generated/android/c++/JCastDiscoveryState.hpp +57 -0
- package/nitrogen/generated/android/c++/JCastLocalNetworkPermission.hpp +61 -0
- package/nitrogen/generated/android/c++/JCastLocalNetworkPermissionEvent.hpp +58 -0
- package/nitrogen/generated/android/c++/JCastProtocol.hpp +67 -0
- package/nitrogen/generated/android/c++/JCastReceiver.hpp +89 -0
- package/nitrogen/generated/android/c++/JCastReceiverCapabilities.hpp +66 -0
- package/nitrogen/generated/android/c++/JCastRoute.hpp +85 -0
- package/nitrogen/generated/android/c++/JCastSessionDiedEvent.hpp +63 -0
- package/nitrogen/generated/android/c++/JCastSessionEndReason.hpp +76 -0
- package/nitrogen/generated/android/c++/JCastStreamingModel.hpp +58 -0
- package/nitrogen/generated/android/c++/JEqualizerBand.hpp +61 -0
- package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +76 -0
- package/nitrogen/generated/android/c++/JEvictionPolicy.hpp +58 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_BrowseItem______std__string.hpp +146 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______MediaSearchRequest.hpp +161 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______std__string.hpp +147 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_AudioRoute.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_BufferState.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_CacheStatus.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_CastDiscoveryState.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_CastLocalNetworkPermissionEvent.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_CastRoute.hpp +86 -0
- package/nitrogen/generated/android/c++/JFunc_void_CastSessionDiedEvent.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackError.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_PlayerProgress.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_PlayerState_StateChangeReason.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_ServiceReadyReason.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_SkipCapability.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_SleepTimerState.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_VisualizerErrorReason.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_VisualizerFrame.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_TrackItem__double_TrackChangeReason_std__optional_double_.hpp +82 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__NowPlayingFormat__.hpp +93 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_CastReceiver_.hpp +105 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +96 -0
- package/nitrogen/generated/android/c++/JHybridCastManagerSpec.cpp +388 -0
- package/nitrogen/generated/android/c++/JHybridCastManagerSpec.hpp +84 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +233 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +74 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +1052 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +130 -0
- package/nitrogen/generated/android/c++/JHybridVisualizerSpec.cpp +84 -0
- package/nitrogen/generated/android/c++/JHybridVisualizerSpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JLookaheadCacheConfig.hpp +61 -0
- package/nitrogen/generated/android/c++/JMediaSearchOrigin.hpp +58 -0
- package/nitrogen/generated/android/c++/JMediaSearchQueueLocation.hpp +61 -0
- package/nitrogen/generated/android/c++/JMediaSearchReference.hpp +58 -0
- package/nitrogen/generated/android/c++/JMediaSearchReleaseDateRange.hpp +61 -0
- package/nitrogen/generated/android/c++/JMediaSearchRepeatMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JMediaSearchRequest.hpp +126 -0
- package/nitrogen/generated/android/c++/JMediaSearchType.hpp +67 -0
- package/nitrogen/generated/android/c++/JNowPlayingFormat.hpp +123 -0
- package/nitrogen/generated/android/c++/JNowPlayingFormatAndroidExtras.hpp +71 -0
- package/nitrogen/generated/android/c++/JNowPlayingFormatIosExtras.hpp +61 -0
- package/nitrogen/generated/android/c++/JPitchCorrectionMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JPlaybackError.hpp +87 -0
- package/nitrogen/generated/android/c++/JPlaybackErrorCode.hpp +88 -0
- package/nitrogen/generated/android/c++/JPlaybackMode.hpp +63 -0
- package/nitrogen/generated/android/c++/JPlaybackModeKind.hpp +58 -0
- package/nitrogen/generated/android/c++/JPlayerConfig.hpp +126 -0
- package/nitrogen/generated/android/c++/JPlayerProgress.hpp +65 -0
- package/nitrogen/generated/android/c++/JPlayerState.hpp +73 -0
- package/nitrogen/generated/android/c++/JRemoteControlOptions.hpp +66 -0
- package/nitrogen/generated/android/c++/JRemoteSkipMode.hpp +58 -0
- package/nitrogen/generated/android/c++/JRepeatMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JReplayGainMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JSectionIcon.hpp +91 -0
- package/nitrogen/generated/android/c++/JServiceReadyReason.hpp +58 -0
- package/nitrogen/generated/android/c++/JShuffleResult.hpp +88 -0
- package/nitrogen/generated/android/c++/JSkipCapability.hpp +61 -0
- package/nitrogen/generated/android/c++/JSleepTimerState.hpp +69 -0
- package/nitrogen/generated/android/c++/JStateChangeReason.hpp +73 -0
- package/nitrogen/generated/android/c++/JTrackChangeReason.hpp +73 -0
- package/nitrogen/generated/android/c++/JTrackItem.hpp +100 -0
- package/nitrogen/generated/android/c++/JTrackSource.hpp +61 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NowPlayingFormat.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NowPlayingFormat.hpp +83 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +70 -0
- package/nitrogen/generated/android/c++/JVisualizerConfig.hpp +65 -0
- package/nitrogen/generated/android/c++/JVisualizerErrorReason.hpp +64 -0
- package/nitrogen/generated/android/c++/JVisualizerFrame.hpp +67 -0
- package/nitrogen/generated/android/c++/JVoiceVocabulary.hpp +98 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioCategoryOptions.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioCodec.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioContainer.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioContentType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioRoute.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/AudioRouteKind.kt +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/BrowseItem.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/BrowseSection.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/BrowseSnapshot.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/BufferState.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CacheStatus.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastConfigureOptions.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastConnectOptions.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastDeviceKind.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastDiscoveryState.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastLocalNetworkPermission.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastLocalNetworkPermissionEvent.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastProtocol.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastReceiver.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastReceiverCapabilities.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastRoute.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastSessionDiedEvent.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastSessionEndReason.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/CastStreamingModel.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/EqualizerBand.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/EqualizerPreset.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/EvictionPolicy.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_BrowseItem______std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______MediaSearchRequest.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_AudioRoute.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_BufferState.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_CacheStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_CastDiscoveryState.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_CastLocalNetworkPermissionEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_CastRoute.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_CastSessionDiedEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_PlaybackError.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_PlayerProgress.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_PlayerState_StateChangeReason.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_ServiceReadyReason.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_SkipCapability.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_SleepTimerState.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_VisualizerErrorReason.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_VisualizerFrame.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_bool.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_double_double.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_std__optional_TrackItem__double_TrackChangeReason_std__optional_double_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_std__optional_std__variant_nitro__NullType__NowPlayingFormat__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_std__vector_CastReceiver_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Func_void_std__vector_EqualizerBand_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/HybridCastManagerSpec.kt +169 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/HybridEqualizerSpec.kt +109 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/HybridTrackPlayerSpec.kt +419 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/HybridVisualizerSpec.kt +63 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/LookaheadCacheConfig.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchOrigin.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchQueueLocation.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchReference.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchReleaseDateRange.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchRepeatMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchRequest.kt +121 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/MediaSearchType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/NowPlayingFormat.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/NowPlayingFormatAndroidExtras.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/NowPlayingFormatIosExtras.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PitchCorrectionMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlaybackError.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlaybackErrorCode.kt +33 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlaybackMode.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlaybackModeKind.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlayerConfig.kt +111 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlayerProgress.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/PlayerState.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/RemoteControlOptions.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/RemoteSkipMode.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/RepeatMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/ReplayGainMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/SectionIcon.kt +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/ServiceReadyReason.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/ShuffleResult.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/SkipCapability.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/SleepTimerState.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/StateChangeReason.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/TrackChangeReason.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/TrackItem.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/TrackSource.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Variant_NullType_Double.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Variant_NullType_NowPlayingFormat.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/Variant_NullType_String.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/VisualizerConfig.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/VisualizerErrorReason.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/VisualizerFrame.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/VoiceVocabulary.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/queueplayerOnLoad.kt +35 -0
- package/nitrogen/generated/android/queueplayer+autolinking.cmake +90 -0
- package/nitrogen/generated/android/queueplayer+autolinking.gradle +27 -0
- package/nitrogen/generated/android/queueplayerOnLoad.cpp +152 -0
- package/nitrogen/generated/android/queueplayerOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/QueuePlayer+autolinking.rb +62 -0
- package/nitrogen/generated/ios/QueuePlayer-Swift-Cxx-Bridge.cpp +343 -0
- package/nitrogen/generated/ios/QueuePlayer-Swift-Cxx-Bridge.hpp +1831 -0
- package/nitrogen/generated/ios/QueuePlayer-Swift-Cxx-Umbrella.hpp +256 -0
- package/nitrogen/generated/ios/QueuePlayerAutolinking.mm +57 -0
- package/nitrogen/generated/ios/QueuePlayerAutolinking.swift +62 -0
- package/nitrogen/generated/ios/c++/HybridCastManagerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridCastManagerSpecSwift.hpp +298 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +178 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +749 -0
- package/nitrogen/generated/ios/c++/HybridVisualizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVisualizerSpecSwift.hpp +103 -0
- package/nitrogen/generated/ios/swift/AudioCategoryOptions.swift +78 -0
- package/nitrogen/generated/ios/swift/AudioCodec.swift +60 -0
- package/nitrogen/generated/ios/swift/AudioContainer.swift +64 -0
- package/nitrogen/generated/ios/swift/AudioContentType.swift +40 -0
- package/nitrogen/generated/ios/swift/AudioRoute.swift +49 -0
- package/nitrogen/generated/ios/swift/AudioRouteKind.swift +84 -0
- package/nitrogen/generated/ios/swift/BrowseItem.swift +93 -0
- package/nitrogen/generated/ios/swift/BrowseSection.swift +74 -0
- package/nitrogen/generated/ios/swift/BrowseSnapshot.swift +40 -0
- package/nitrogen/generated/ios/swift/BufferState.swift +48 -0
- package/nitrogen/generated/ios/swift/CacheStatus.swift +55 -0
- package/nitrogen/generated/ios/swift/CastConfigureOptions.swift +47 -0
- package/nitrogen/generated/ios/swift/CastConnectOptions.swift +29 -0
- package/nitrogen/generated/ios/swift/CastDeviceKind.swift +56 -0
- package/nitrogen/generated/ios/swift/CastDiscoveryState.swift +29 -0
- package/nitrogen/generated/ios/swift/CastLocalNetworkPermission.swift +44 -0
- package/nitrogen/generated/ios/swift/CastLocalNetworkPermissionEvent.swift +29 -0
- package/nitrogen/generated/ios/swift/CastProtocol.swift +52 -0
- package/nitrogen/generated/ios/swift/CastReceiver.swift +59 -0
- package/nitrogen/generated/ios/swift/CastReceiverCapabilities.swift +39 -0
- package/nitrogen/generated/ios/swift/CastRoute.swift +54 -0
- package/nitrogen/generated/ios/swift/CastSessionDiedEvent.swift +34 -0
- package/nitrogen/generated/ios/swift/CastSessionEndReason.swift +64 -0
- package/nitrogen/generated/ios/swift/CastStreamingModel.swift +40 -0
- package/nitrogen/generated/ios/swift/EqualizerBand.swift +34 -0
- package/nitrogen/generated/ios/swift/EqualizerPreset.swift +45 -0
- package/nitrogen/generated/ios/swift/EvictionPolicy.swift +40 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_BrowseItem______std__string.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______MediaSearchRequest.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_TrackItem______std__string.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_AudioRoute.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BufferState.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CacheStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CastDiscoveryState.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CastLocalNetworkPermission.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CastLocalNetworkPermissionEvent.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CastRoute.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CastSessionDiedEvent.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_PlaybackError.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_PlayerProgress.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_PlayerState_StateChangeReason.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ServiceReadyReason.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ShuffleResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SkipCapability.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SleepTimerState.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_VisualizerErrorReason.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_VisualizerFrame.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_double_double.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_TrackItem__double_TrackChangeReason_std__optional_double_.swift +53 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__NowPlayingFormat__.swift +65 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__vector_BrowseItem___.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__vector_TrackItem___.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_BrowseItem_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_CastReceiver_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridCastManagerSpec.swift +76 -0
- package/nitrogen/generated/ios/swift/HybridCastManagerSpec_cxx.swift +519 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +66 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +353 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +122 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +1430 -0
- package/nitrogen/generated/ios/swift/HybridVisualizerSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridVisualizerSpec_cxx.swift +163 -0
- package/nitrogen/generated/ios/swift/LookaheadCacheConfig.swift +34 -0
- package/nitrogen/generated/ios/swift/MediaSearchOrigin.swift +40 -0
- package/nitrogen/generated/ios/swift/MediaSearchQueueLocation.swift +44 -0
- package/nitrogen/generated/ios/swift/MediaSearchReference.swift +40 -0
- package/nitrogen/generated/ios/swift/MediaSearchReleaseDateRange.swift +60 -0
- package/nitrogen/generated/ios/swift/MediaSearchRepeatMode.swift +44 -0
- package/nitrogen/generated/ios/swift/MediaSearchRequest.swift +239 -0
- package/nitrogen/generated/ios/swift/MediaSearchType.swift +52 -0
- package/nitrogen/generated/ios/swift/NowPlayingFormat.swift +394 -0
- package/nitrogen/generated/ios/swift/NowPlayingFormatAndroidExtras.swift +135 -0
- package/nitrogen/generated/ios/swift/NowPlayingFormatIosExtras.swift +61 -0
- package/nitrogen/generated/ios/swift/PitchCorrectionMode.swift +44 -0
- package/nitrogen/generated/ios/swift/PlaybackError.swift +64 -0
- package/nitrogen/generated/ios/swift/PlaybackErrorCode.swift +80 -0
- package/nitrogen/generated/ios/swift/PlaybackMode.swift +47 -0
- package/nitrogen/generated/ios/swift/PlaybackModeKind.swift +40 -0
- package/nitrogen/generated/ios/swift/PlayerConfig.swift +251 -0
- package/nitrogen/generated/ios/swift/PlayerProgress.swift +39 -0
- package/nitrogen/generated/ios/swift/PlayerState.swift +60 -0
- package/nitrogen/generated/ios/swift/RemoteControlOptions.swift +39 -0
- package/nitrogen/generated/ios/swift/RemoteSkipMode.swift +40 -0
- package/nitrogen/generated/ios/swift/RepeatMode.swift +44 -0
- package/nitrogen/generated/ios/swift/ReplayGainMode.swift +44 -0
- package/nitrogen/generated/ios/swift/SectionIcon.swift +84 -0
- package/nitrogen/generated/ios/swift/ServiceReadyReason.swift +40 -0
- package/nitrogen/generated/ios/swift/ShuffleResult.swift +51 -0
- package/nitrogen/generated/ios/swift/SkipCapability.swift +34 -0
- package/nitrogen/generated/ios/swift/SleepTimerState.swift +70 -0
- package/nitrogen/generated/ios/swift/StateChangeReason.swift +60 -0
- package/nitrogen/generated/ios/swift/TrackChangeReason.swift +60 -0
- package/nitrogen/generated/ios/swift/TrackItem.swift +169 -0
- package/nitrogen/generated/ios/swift/TrackSource.swift +44 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NowPlayingFormat.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +30 -0
- package/nitrogen/generated/ios/swift/VisualizerConfig.swift +52 -0
- package/nitrogen/generated/ios/swift/VisualizerErrorReason.swift +48 -0
- package/nitrogen/generated/ios/swift/VisualizerFrame.swift +52 -0
- package/nitrogen/generated/ios/swift/VoiceVocabulary.swift +46 -0
- package/nitrogen/generated/shared/c++/AudioCategoryOptions.hpp +91 -0
- package/nitrogen/generated/shared/c++/AudioCodec.hpp +96 -0
- package/nitrogen/generated/shared/c++/AudioContainer.hpp +100 -0
- package/nitrogen/generated/shared/c++/AudioContentType.hpp +76 -0
- package/nitrogen/generated/shared/c++/AudioRoute.hpp +101 -0
- package/nitrogen/generated/shared/c++/AudioRouteKind.hpp +120 -0
- package/nitrogen/generated/shared/c++/BrowseItem.hpp +104 -0
- package/nitrogen/generated/shared/c++/BrowseSection.hpp +106 -0
- package/nitrogen/generated/shared/c++/BrowseSnapshot.hpp +90 -0
- package/nitrogen/generated/shared/c++/BufferState.hpp +84 -0
- package/nitrogen/generated/shared/c++/CacheStatus.hpp +100 -0
- package/nitrogen/generated/shared/c++/CastConfigureOptions.hpp +88 -0
- package/nitrogen/generated/shared/c++/CastConnectOptions.hpp +83 -0
- package/nitrogen/generated/shared/c++/CastDeviceKind.hpp +92 -0
- package/nitrogen/generated/shared/c++/CastDiscoveryState.hpp +83 -0
- package/nitrogen/generated/shared/c++/CastLocalNetworkPermission.hpp +80 -0
- package/nitrogen/generated/shared/c++/CastLocalNetworkPermissionEvent.hpp +84 -0
- package/nitrogen/generated/shared/c++/CastProtocol.hpp +88 -0
- package/nitrogen/generated/shared/c++/CastReceiver.hpp +115 -0
- package/nitrogen/generated/shared/c++/CastReceiverCapabilities.hpp +92 -0
- package/nitrogen/generated/shared/c++/CastRoute.hpp +111 -0
- package/nitrogen/generated/shared/c++/CastSessionDiedEvent.hpp +89 -0
- package/nitrogen/generated/shared/c++/CastSessionEndReason.hpp +100 -0
- package/nitrogen/generated/shared/c++/CastStreamingModel.hpp +76 -0
- package/nitrogen/generated/shared/c++/EqualizerBand.hpp +87 -0
- package/nitrogen/generated/shared/c++/EqualizerPreset.hpp +92 -0
- package/nitrogen/generated/shared/c++/EvictionPolicy.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridCastManagerSpec.cpp +42 -0
- package/nitrogen/generated/shared/c++/HybridCastManagerSpec.hpp +115 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +81 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +88 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +209 -0
- package/nitrogen/generated/shared/c++/HybridVisualizerSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridVisualizerSpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/LookaheadCacheConfig.hpp +87 -0
- package/nitrogen/generated/shared/c++/MediaSearchOrigin.hpp +76 -0
- package/nitrogen/generated/shared/c++/MediaSearchQueueLocation.hpp +80 -0
- package/nitrogen/generated/shared/c++/MediaSearchReference.hpp +76 -0
- package/nitrogen/generated/shared/c++/MediaSearchReleaseDateRange.hpp +87 -0
- package/nitrogen/generated/shared/c++/MediaSearchRepeatMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/MediaSearchRequest.hpp +157 -0
- package/nitrogen/generated/shared/c++/MediaSearchType.hpp +88 -0
- package/nitrogen/generated/shared/c++/NowPlayingFormat.hpp +149 -0
- package/nitrogen/generated/shared/c++/NowPlayingFormatAndroidExtras.hpp +94 -0
- package/nitrogen/generated/shared/c++/NowPlayingFormatIosExtras.hpp +85 -0
- package/nitrogen/generated/shared/c++/PitchCorrectionMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/PlaybackError.hpp +113 -0
- package/nitrogen/generated/shared/c++/PlaybackErrorCode.hpp +116 -0
- package/nitrogen/generated/shared/c++/PlaybackMode.hpp +89 -0
- package/nitrogen/generated/shared/c++/PlaybackModeKind.hpp +76 -0
- package/nitrogen/generated/shared/c++/PlayerConfig.hpp +141 -0
- package/nitrogen/generated/shared/c++/PlayerProgress.hpp +91 -0
- package/nitrogen/generated/shared/c++/PlayerState.hpp +96 -0
- package/nitrogen/generated/shared/c++/RemoteControlOptions.hpp +92 -0
- package/nitrogen/generated/shared/c++/RemoteSkipMode.hpp +76 -0
- package/nitrogen/generated/shared/c++/RepeatMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/ReplayGainMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/SectionIcon.hpp +120 -0
- package/nitrogen/generated/shared/c++/ServiceReadyReason.hpp +76 -0
- package/nitrogen/generated/shared/c++/ShuffleResult.hpp +94 -0
- package/nitrogen/generated/shared/c++/SkipCapability.hpp +87 -0
- package/nitrogen/generated/shared/c++/SleepTimerState.hpp +95 -0
- package/nitrogen/generated/shared/c++/StateChangeReason.hpp +96 -0
- package/nitrogen/generated/shared/c++/TrackChangeReason.hpp +96 -0
- package/nitrogen/generated/shared/c++/TrackItem.hpp +113 -0
- package/nitrogen/generated/shared/c++/TrackSource.hpp +80 -0
- package/nitrogen/generated/shared/c++/VisualizerConfig.hpp +91 -0
- package/nitrogen/generated/shared/c++/VisualizerErrorReason.hpp +84 -0
- package/nitrogen/generated/shared/c++/VisualizerFrame.hpp +92 -0
- package/nitrogen/generated/shared/c++/VoiceVocabulary.hpp +88 -0
- package/package.json +167 -0
- package/src/CastManager.nitro.ts +206 -0
- package/src/Equalizer.nitro.ts +37 -0
- package/src/TrackPlayer.nitro.ts +667 -0
- package/src/Visualizer.nitro.ts +48 -0
- package/src/cast/index.ts +224 -0
- package/src/clients.ts +50 -0
- package/src/equalizer.ts +86 -0
- package/src/hooks/index.ts +33 -0
- package/src/hooks/useActiveTrack.ts +55 -0
- package/src/hooks/useAudioRoute.ts +69 -0
- package/src/hooks/useBufferState.ts +35 -0
- package/src/hooks/useCanSkip.ts +92 -0
- package/src/hooks/useCast.ts +121 -0
- package/src/hooks/useEqualizer.ts +111 -0
- package/src/hooks/useFullyBuffered.ts +32 -0
- package/src/hooks/useLookaheadCache.ts +54 -0
- package/src/hooks/useNowPlayingFormat.ts +43 -0
- package/src/hooks/usePlaybackState.ts +34 -0
- package/src/hooks/useProgress.ts +36 -0
- package/src/hooks/useSleepTimer.ts +63 -0
- package/src/hooks/useVisualizerState.ts +121 -0
- package/src/index.ts +125 -0
- package/src/playbackService.ts +304 -0
- package/src/types.ts +1387 -0
|
@@ -0,0 +1,1215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public value types for react-native-queue-player.
|
|
3
|
+
*
|
|
4
|
+
* All Nitro HybridObject interfaces live in their own `.nitro.ts` files
|
|
5
|
+
* (TrackPlayer, Equalizer, Visualizer, CastManager). The **pure value
|
|
6
|
+
* types** those objects exchange — every `interface` / `type` alias that
|
|
7
|
+
* is *not* a HybridObject — live here, so there is one canonical home for
|
|
8
|
+
* anything a consumer might want to `import` by name.
|
|
9
|
+
*
|
|
10
|
+
* Naming rules:
|
|
11
|
+
* - Interfaces are structural (`TrackItem`, `CastDevice`, …).
|
|
12
|
+
* - String-literal unions are top-level named aliases (`PlayerState`,
|
|
13
|
+
* `CastProtocol`, …), never inline in a field type — Nitrogen's C++
|
|
14
|
+
* codegen requires named enums.
|
|
15
|
+
* - Enum-like types with one real value include a reserved placeholder
|
|
16
|
+
* (e.g. `EvictionPolicy = 'lru' | 'fifo'`) to disambiguate from
|
|
17
|
+
* plain `string` during Nitrogen codegen. See NOTES.md §1.4.
|
|
18
|
+
*/
|
|
19
|
+
export interface TrackItem {
|
|
20
|
+
/**
|
|
21
|
+
* Optional consumer-supplied identifier. Echoed back to the consumer
|
|
22
|
+
* via remote-command callbacks + voice-query results so the consumer
|
|
23
|
+
* can map back to their app's track model. NEVER used by this library
|
|
24
|
+
* for any internal identity, lookup, dedup, or equality. Only
|
|
25
|
+
* `track.url` is required + reliable on TrackItem; every other
|
|
26
|
+
* consumer field may be empty / missing / duplicate / colliding.
|
|
27
|
+
* Lib-internal identity is generated per-item at queue-mutation time
|
|
28
|
+
* (e.g. iOS `AVPlayerItem.queueItemId`).
|
|
29
|
+
*/
|
|
30
|
+
id?: string;
|
|
31
|
+
/** Remote URL (http/https) or local `file://` URL. Local skips the lookahead cache. */
|
|
32
|
+
url: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
artist?: string;
|
|
35
|
+
album?: string;
|
|
36
|
+
/** Seconds. Optional — native engine derives from the stream when absent. */
|
|
37
|
+
duration?: number;
|
|
38
|
+
/** Cover art URL — `file://` for local, http(s) for remote (custom headers apply). */
|
|
39
|
+
artworkUrl?: string;
|
|
40
|
+
/** Opaque passthrough the consuming app can attach; the module does not read it. */
|
|
41
|
+
extras?: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Result returned by `shuffleQueue()`. The consumer app uses this
|
|
45
|
+
* snapshot to immediately reflect the new ordering in its UI.
|
|
46
|
+
*
|
|
47
|
+
* - `tracks`: the post-shuffle queue (Fisher-Yates permutation of the
|
|
48
|
+
* pre-shuffle queue). The same `TrackItem` references the consumer
|
|
49
|
+
* passed in, just reordered.
|
|
50
|
+
* - `currentIndex`: position of the now-current track. Always `0` for
|
|
51
|
+
* non-empty queues; `-1` for an empty queue.
|
|
52
|
+
* - `currentTrack`: convenience accessor for `tracks[currentIndex]`.
|
|
53
|
+
* `undefined` for empty queues.
|
|
54
|
+
*/
|
|
55
|
+
export interface ShuffleResult {
|
|
56
|
+
tracks: TrackItem[];
|
|
57
|
+
currentIndex: number;
|
|
58
|
+
currentTrack?: TrackItem;
|
|
59
|
+
}
|
|
60
|
+
export interface PlayerConfig {
|
|
61
|
+
/** Applied on every remote URL fetch: asset load, lookahead download, artwork. */
|
|
62
|
+
httpHeaders?: Record<string, string>;
|
|
63
|
+
/** Overrides the default UA on network requests. */
|
|
64
|
+
userAgent?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Auto-retry attempts on transient errors (TIMEOUT / CONNECTION_LOST /
|
|
67
|
+
* NETWORK_UNREACHABLE / SOURCE_UNREACHABLE / CANNOT_OPEN). Clamped
|
|
68
|
+
* to [0, 5]; default 3. Fatal errors (codec / format / auth) are
|
|
69
|
+
* never retried regardless of this setting.
|
|
70
|
+
*/
|
|
71
|
+
autoRetries?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Linear backoff in ms between retry attempts. **Clamped to
|
|
74
|
+
* [200, 5000]; default 500.** The 200 ms floor is unconditional
|
|
75
|
+
* (anti-retry-storm; passing 0 silently clamps up to 200).
|
|
76
|
+
*/
|
|
77
|
+
retryBackoffMs?: number;
|
|
78
|
+
/**
|
|
79
|
+
* **iOS: ignored (AVPlayer uses CFNetwork; no public timeout API;
|
|
80
|
+
* system-default ~60s applies).**
|
|
81
|
+
*
|
|
82
|
+
* Android: HTTP read timeout in ms. Applied via
|
|
83
|
+
* `DefaultHttpDataSource.Factory.setReadTimeoutMs`. Clamped to
|
|
84
|
+
* [1000, 60000]; default 30000. The longer-than-Media3-default
|
|
85
|
+
* tolerates slow-spin-up servers; iOS's resilience equivalent is
|
|
86
|
+
* the `autoRetries` + stuck-recovery flow. See NOTES.md §17 for
|
|
87
|
+
* the full asymmetry rationale.
|
|
88
|
+
*/
|
|
89
|
+
networkTimeoutMs?: number;
|
|
90
|
+
/**
|
|
91
|
+
* Hints the OS at the playback content type. `'music'` (default)
|
|
92
|
+
* keeps the iOS audio session in `.default` mode + Android
|
|
93
|
+
* `AudioAttributes.CONTENT_TYPE_MUSIC`. `'speech'` switches iOS
|
|
94
|
+
* to `.spokenAudio` mode (per Apple HIG: spoken-audio sessions
|
|
95
|
+
* properly pause under nav-voice instead of ducking) and Android
|
|
96
|
+
* to `CONTENT_TYPE_SPEECH`.
|
|
97
|
+
*
|
|
98
|
+
* **Pinned at the first `configure()` per session.** Changing
|
|
99
|
+
* this on a re-`configure()` requires `destroy()` + new
|
|
100
|
+
* `configure()` to take effect (iOS audio-session reactivation
|
|
101
|
+
* mid-playback risks observable hiccups; the lib opts for
|
|
102
|
+
* predictability over runtime flexibility here).
|
|
103
|
+
*/
|
|
104
|
+
audioContentType?: AudioContentType;
|
|
105
|
+
/**
|
|
106
|
+
* Fine-grained AVAudioSession `CategoryOptions` mapping
|
|
107
|
+
* (iOS-effective; Android handles ducking via auto-managed
|
|
108
|
+
* audio focus and ignores these flags). Same pin-at-first-
|
|
109
|
+
* configure rule as `audioContentType`.
|
|
110
|
+
*/
|
|
111
|
+
audioCategoryOptions?: AudioCategoryOptions;
|
|
112
|
+
/**
|
|
113
|
+
* Disable the visualization pipeline at engine construction. When
|
|
114
|
+
* `false`, the lib skips the viz-side audio chain entirely:
|
|
115
|
+
* - **iOS**: visualizer subscribers do not request a tap install. With
|
|
116
|
+
* EQ also off, the `MTAudioProcessingTap` is not constructed per
|
|
117
|
+
* `AVPlayerItem`. EQ keeps working independently — toggling
|
|
118
|
+
* `Equalizer.setEnabled(true)` re-installs the tap for EQ use only.
|
|
119
|
+
* - **Android**: the renderers factory is a vanilla
|
|
120
|
+
* `DefaultRenderersFactory`, skipping the
|
|
121
|
+
* `MultiplexingAudioBufferSink` Tee in the AudioSink chain entirely.
|
|
122
|
+
* EQ runs against `audioSessionId` and is unaffected.
|
|
123
|
+
*
|
|
124
|
+
* Calls to `getVisualizer().subscribe(...)` against a player
|
|
125
|
+
* configured with `visualizationEnabled: false` fire
|
|
126
|
+
* `onError('visualization-disabled')` on the next main-thread tick
|
|
127
|
+
* (matches the existing `'hls-source'` error pattern). The dispose
|
|
128
|
+
* returned from `subscribe` is a no-op.
|
|
129
|
+
*
|
|
130
|
+
* Default: `true` (current behaviour preserved for existing
|
|
131
|
+
* consumers).
|
|
132
|
+
*
|
|
133
|
+
* Effect is pin-at-configure on both platforms — per `configure()`'s
|
|
134
|
+
* auto-destroy contract every call rebuilds the engine, so setting
|
|
135
|
+
* this flag in a re-configure call cleanly takes effect.
|
|
136
|
+
*/
|
|
137
|
+
visualizationEnabled?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Opt-in: cap a `seekTo` (or lock-screen interval skip) target that is past
|
|
140
|
+
* the current buffered position at that buffered edge, so a scrub doesn't
|
|
141
|
+
* overshoot into a re-buffer. A local or fully-buffered track reports
|
|
142
|
+
* `buffered >= target`, so nothing is capped and a seek reaches the end
|
|
143
|
+
* freely; a partly-buffered stream caps at the downloaded edge. Gated only on
|
|
144
|
+
* this flag and `target > bufferedPosition` — not on source scheme or
|
|
145
|
+
* declared duration. Separate from the always-on seekability guard (which
|
|
146
|
+
* no-ops seeks on genuinely unseekable tracks).
|
|
147
|
+
*
|
|
148
|
+
* Default: `false` (targets pass through unclamped).
|
|
149
|
+
*/
|
|
150
|
+
clampSeekToBuffered?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Disk budget for the lookahead cache, in megabytes. Fixed at `configure()`
|
|
153
|
+
* time and cannot change at runtime — Android's Media3 `SimpleCache` fixes
|
|
154
|
+
* its size at construction (one instance per directory), so both platforms
|
|
155
|
+
* treat this as a configure-only ceiling for a consistent contract. Default
|
|
156
|
+
* `100`. Control actual runtime usage via `setLookaheadCache`'s `enabled` +
|
|
157
|
+
* `lookaheadCount`; read the active ceiling back from
|
|
158
|
+
* `getLookaheadCacheStatus().maxSizeMb`.
|
|
159
|
+
*/
|
|
160
|
+
lookaheadCacheMaxSizeMb?: number;
|
|
161
|
+
/**
|
|
162
|
+
* Eviction policy for the lookahead cache. Fixed at `configure()` time like
|
|
163
|
+
* `lookaheadCacheMaxSizeMb` — changing it clears the cache and rebuilds with
|
|
164
|
+
* the new policy (an infrequent operation). Default `'lru'`. See
|
|
165
|
+
* {@link EvictionPolicy}.
|
|
166
|
+
*/
|
|
167
|
+
lookaheadCacheEvictionPolicy?: EvictionPolicy;
|
|
168
|
+
/**
|
|
169
|
+
* Interval, in milliseconds, between `onProgress` emissions while the app is
|
|
170
|
+
* in the foreground. Throttles only the JS `onProgress` fan-out — the native
|
|
171
|
+
* sampler keeps running at its 2 Hz tick, so `onPlaybackMilestone` and buffer
|
|
172
|
+
* state stay full-rate and unaffected.
|
|
173
|
+
*
|
|
174
|
+
* `500` is the effective floor: the native tick is 500 ms, so values below it
|
|
175
|
+
* clamp to 500 (there is no faster-than-2Hz foreground rate). Non-positive or
|
|
176
|
+
* non-finite values fall back to the default. No upper ceiling.
|
|
177
|
+
*
|
|
178
|
+
* Default: `500`. Applied at `configure()`; a re-`configure()` updates the
|
|
179
|
+
* live rate with no engine rebuild.
|
|
180
|
+
*/
|
|
181
|
+
progressUpdateIntervalMs?: number;
|
|
182
|
+
/**
|
|
183
|
+
* Interval, in milliseconds, between `onProgress` emissions while the app is
|
|
184
|
+
* backgrounded. Lets a consumer drop the progress firehose (and the off-screen
|
|
185
|
+
* re-renders it drives) while the UI is not visible; the lock screen / now-
|
|
186
|
+
* playing surface and `onPlaybackMilestone` are separate native paths and keep
|
|
187
|
+
* updating normally. On return to the foreground the next tick emits
|
|
188
|
+
* immediately so the UI resumes at the live position.
|
|
189
|
+
*
|
|
190
|
+
* Clamped to a `500` ms floor like `progressUpdateIntervalMs`; a large value
|
|
191
|
+
* (e.g. `60000`) is a legitimate near-paused background rate.
|
|
192
|
+
*
|
|
193
|
+
* Default: the effective `progressUpdateIntervalMs` (omitting this ⇒ no
|
|
194
|
+
* background reduction). Applied at `configure()`; a re-`configure()` updates
|
|
195
|
+
* the live rate with no engine rebuild.
|
|
196
|
+
*/
|
|
197
|
+
backgroundProgressUpdateIntervalMs?: number;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* High-level content classification used by the lib to drive
|
|
201
|
+
* platform audio-session shape (iOS mode + Android
|
|
202
|
+
* `AudioAttributes.contentType`).
|
|
203
|
+
*/
|
|
204
|
+
export type AudioContentType = 'music' | 'speech';
|
|
205
|
+
/**
|
|
206
|
+
* Optional AVAudioSession `CategoryOptions` flags. iOS-effective
|
|
207
|
+
* (Android uses auto-ducking via audio focus and ignores these).
|
|
208
|
+
*/
|
|
209
|
+
export interface AudioCategoryOptions {
|
|
210
|
+
/**
|
|
211
|
+
* `.duckOthers` — when this app starts playback, other apps'
|
|
212
|
+
* audio ducks (volume-reduced) instead of pausing.
|
|
213
|
+
*/
|
|
214
|
+
duckOthers?: boolean;
|
|
215
|
+
/**
|
|
216
|
+
* `.mixWithOthers` — playback mixes with other apps' audio
|
|
217
|
+
* instead of pausing them.
|
|
218
|
+
*/
|
|
219
|
+
mixWithOthers?: boolean;
|
|
220
|
+
/**
|
|
221
|
+
* `.interruptSpokenAudioAndMixWithOthers` — interrupts other
|
|
222
|
+
* apps' spoken-audio sessions but mixes with their music
|
|
223
|
+
* sessions. **Default `true` when `audioContentType === 'speech'`,
|
|
224
|
+
* `false` otherwise** (matches Apple's recommendation for
|
|
225
|
+
* podcast / audiobook apps).
|
|
226
|
+
*/
|
|
227
|
+
interruptSpokenAudio?: boolean;
|
|
228
|
+
}
|
|
229
|
+
export type PlayerState = 'none' | 'loading' | 'buffering' | 'playing' | 'paused' | 'ended' | 'error';
|
|
230
|
+
/**
|
|
231
|
+
* Discrete buffer state for the current track, derived from the platform's
|
|
232
|
+
* native buffer signals (independent of the 2 Hz progress tick, so a spinner /
|
|
233
|
+
* stall indicator reacts immediately):
|
|
234
|
+
*
|
|
235
|
+
* - `'full'` — enough is buffered to play smoothly from the current position
|
|
236
|
+
* (iOS `playbackLikelyToKeepUp` / `playbackBufferFull`; Android
|
|
237
|
+
* `STATE_READY`). Hide the loading spinner.
|
|
238
|
+
* - `'buffering'` — loading, and playback has **not started yet** for this
|
|
239
|
+
* track (the initial buffer, even when play was requested), or loading while
|
|
240
|
+
* not actively trying to play. This is the expected, non-urgent loading case.
|
|
241
|
+
* - `'stalled'` — playback **had started** and is now rebuffering mid-play
|
|
242
|
+
* (it wants to continue but ran out of data). This is the case where a
|
|
243
|
+
* spinner interrupts audio the user was already hearing.
|
|
244
|
+
* - `'empty'` — nothing is loaded to play (iOS: no current item; Android
|
|
245
|
+
* `STATE_IDLE`).
|
|
246
|
+
*
|
|
247
|
+
* `'full'` describes playback health, not that the whole track is downloaded —
|
|
248
|
+
* for buffered-ahead length in seconds use `PlayerProgress.buffered`.
|
|
249
|
+
*/
|
|
250
|
+
export type BufferState = 'empty' | 'buffering' | 'stalled' | 'full';
|
|
251
|
+
/**
|
|
252
|
+
* Playback mode. §4.2 specifies `'gapless' | { crossfade: number }`; Nitrogen
|
|
253
|
+
* can't represent a discriminated union with a string-literal tag (see
|
|
254
|
+
* NOTES.md §1.2), so the API uses a single interface with a `kind` enum
|
|
255
|
+
* field plus optional per-variant payload.
|
|
256
|
+
*/
|
|
257
|
+
export type PlaybackModeKind = 'gapless' | 'crossfade';
|
|
258
|
+
export interface PlaybackMode {
|
|
259
|
+
kind: PlaybackModeKind;
|
|
260
|
+
/**
|
|
261
|
+
* Required + only read when `kind === 'crossfade'`. Ignored otherwise.
|
|
262
|
+
*
|
|
263
|
+
* Constraints (enforced at the native boundary — out-of-range or
|
|
264
|
+
* non-quantised values throw); see `crossfadeDurationBounds` for
|
|
265
|
+
* the canonical numbers a stepper UI can render against:
|
|
266
|
+
* - Range: `[1000, 12000]` ms.
|
|
267
|
+
* - Quantisation: must be a multiple of `500` ms (so 1000, 1500,
|
|
268
|
+
* 2000, ..., 12000 — 23 valid values).
|
|
269
|
+
*
|
|
270
|
+
* The engine applies a separate runtime safety clamp to the
|
|
271
|
+
* configured value: when the leading or standby track is shorter
|
|
272
|
+
* than `2 × crossfadeDurationMs`, the engine silently clamps to
|
|
273
|
+
* the longest fade that fits both legs. Consumers see no API
|
|
274
|
+
* surface change; the audio just doesn't try to fade longer than
|
|
275
|
+
* the track has runway for.
|
|
276
|
+
*/
|
|
277
|
+
crossfadeDurationMs?: number;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Canonical bounds for `PlaybackMode.crossfadeDurationMs`. Mirrors
|
|
281
|
+
* the native validation constants — consumers building stepper /
|
|
282
|
+
* slider UIs can read from here instead of hardcoding magic numbers.
|
|
283
|
+
*/
|
|
284
|
+
export declare const crossfadeDurationBounds: {
|
|
285
|
+
/** Minimum accepted crossfade duration in ms. */
|
|
286
|
+
readonly minMs: 1000;
|
|
287
|
+
/** Maximum accepted crossfade duration in ms. */
|
|
288
|
+
readonly maxMs: 12000;
|
|
289
|
+
/** Quantisation step in ms — values must be multiples of this. */
|
|
290
|
+
readonly stepMs: 500;
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Queue repeat behaviour:
|
|
294
|
+
* - `'off'` — play through the queue once and stop at the end.
|
|
295
|
+
* - `'queue'` — loop the whole queue; skip wraps at both ends.
|
|
296
|
+
* - `'track'` — repeat-one: the current track replays on natural end.
|
|
297
|
+
* A user skip still navigates the queue with no wrap (exactly like
|
|
298
|
+
* `'off'`), and repeat-one persists so the newly-current track is the
|
|
299
|
+
* one that loops.
|
|
300
|
+
*/
|
|
301
|
+
export type RepeatMode = 'off' | 'queue' | 'track';
|
|
302
|
+
/**
|
|
303
|
+
* How the lock-screen / notification skip controls behave: skip between queue
|
|
304
|
+
* tracks (`'track'`) or jump forward/back within the current track by a fixed
|
|
305
|
+
* interval (`'interval'`).
|
|
306
|
+
*/
|
|
307
|
+
export type RemoteSkipMode = 'track' | 'interval';
|
|
308
|
+
/**
|
|
309
|
+
* Lock-screen / notification remote-control configuration. Wrapped in a struct
|
|
310
|
+
* so fields can be added without a breaking change.
|
|
311
|
+
*/
|
|
312
|
+
export interface RemoteControlOptions {
|
|
313
|
+
/** Skip controls jump between tracks (`'track'`) or by `±interval` seconds (`'interval'`). Default `'track'`. */
|
|
314
|
+
skipMode: RemoteSkipMode;
|
|
315
|
+
/** Seconds to jump ahead in `'interval'` mode. Default 15. */
|
|
316
|
+
forwardJumpInterval: number;
|
|
317
|
+
/** Seconds to jump back in `'interval'` mode. Default 15. */
|
|
318
|
+
backwardJumpInterval: number;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* ReplayGain loudness-normalisation mode.
|
|
322
|
+
*
|
|
323
|
+
* - `'off'`: no gain applied; playback is sample-perfect relative
|
|
324
|
+
* to the source.
|
|
325
|
+
* - `'track'`: read `REPLAYGAIN_TRACK_GAIN` per track. Best for
|
|
326
|
+
* shuffled / mixed playlists — every track plays at roughly the
|
|
327
|
+
* same perceived loudness.
|
|
328
|
+
* - `'album'`: read `REPLAYGAIN_ALBUM_GAIN` per track (preserves
|
|
329
|
+
* the album's intentional cross-track dynamics — e.g. a quiet
|
|
330
|
+
* intro vs a loud climax). Strict — does NOT fall back to track
|
|
331
|
+
* gain when a track has no album tag (RG is simply inactive for
|
|
332
|
+
* that track; `replayGainActive` reports `false`).
|
|
333
|
+
*
|
|
334
|
+
* Auto-mode (lib heuristically picks track-vs-album from queue
|
|
335
|
+
* context) is intentionally NOT supported — the consuming app
|
|
336
|
+
* knows whether the user is playing an album front-to-back vs
|
|
337
|
+
* shuffling a mixed playlist, and should call this setter
|
|
338
|
+
* accordingly.
|
|
339
|
+
*/
|
|
340
|
+
export type ReplayGainMode = 'off' | 'track' | 'album';
|
|
341
|
+
/**
|
|
342
|
+
* How pitch behaves when `playbackSpeed != 1.0`:
|
|
343
|
+
* - `none` — no pitch correction; pitch follows rate (the
|
|
344
|
+
* "chipmunk" effect on speed-up, deepening on slow-down).
|
|
345
|
+
* - `voice` — speech-tuned time-stretch; pitch is preserved.
|
|
346
|
+
* Cheapest correct option and the default.
|
|
347
|
+
* - `music` — music-tuned time-stretch that preserves transients
|
|
348
|
+
* (percussion, attacks) on speed change.
|
|
349
|
+
*
|
|
350
|
+
* Auto-bypassed at `playbackSpeed == 1.0` (nothing to stretch).
|
|
351
|
+
*/
|
|
352
|
+
export type PitchCorrectionMode = 'none' | 'voice' | 'music';
|
|
353
|
+
export type StateChangeReason = 'user' | 'system' | 'error' | 'interruption' | 'route-change' | 'queue-end' | 'sleep-timer';
|
|
354
|
+
/**
|
|
355
|
+
* Progress snapshot emitted by `onProgress`. Positions in seconds,
|
|
356
|
+
* driven by the native periodic time observer at ~2 Hz. Wrapped in a
|
|
357
|
+
* struct (rather than three positional `number` callback args) so
|
|
358
|
+
* future progress fields can be added without a breaking spec change.
|
|
359
|
+
*/
|
|
360
|
+
export interface PlayerProgress {
|
|
361
|
+
/** Seconds from start of the current track. 0 when no track active. */
|
|
362
|
+
position: number;
|
|
363
|
+
/** Seconds. 0 when duration is unknown or no track active. */
|
|
364
|
+
duration: number;
|
|
365
|
+
/** Seconds buffered ahead of `position`. 0 when unknown. */
|
|
366
|
+
buffered: number;
|
|
367
|
+
}
|
|
368
|
+
export type TrackChangeReason = 'user-skip-next' | 'user-skip-previous' | 'user-skip-to-index' | 'auto-advance' | 'queue-replaced' | 'seek'
|
|
369
|
+
/**
|
|
370
|
+
* Crossfade was cancelled mid-fade (pause / stop / audio-focus
|
|
371
|
+
* loss / queue mutation that invalidates the standby leg). Fires
|
|
372
|
+
* with the outgoing leg's `(track, index)` so consumers can
|
|
373
|
+
* revert any UI that flipped to the incoming on the prior
|
|
374
|
+
* `auto-advance` fade-start fire. Crossfade-only.
|
|
375
|
+
*/
|
|
376
|
+
| 'crossfade-cancelled';
|
|
377
|
+
/**
|
|
378
|
+
* How the active track is being played:
|
|
379
|
+
* - `'local'` — `track.url` is a `file://` URL.
|
|
380
|
+
* - `'cached'` — `track.url` is `http(s)://` and the lookahead cache holds
|
|
381
|
+
* a complete copy; native playback reads from the local cache file.
|
|
382
|
+
* - `'streaming'` — `track.url` is `http(s)://` and the lookahead cache
|
|
383
|
+
* does NOT have a complete copy; native playback reads from the network
|
|
384
|
+
* (a partial cache may exist, but bytes are still arriving).
|
|
385
|
+
*
|
|
386
|
+
* Classified at currentItem-change time (the moment the new track becomes
|
|
387
|
+
* current). A track that's mid-download surfaces as `'streaming'`; the next
|
|
388
|
+
* track-change re-classifies once the cache has more.
|
|
389
|
+
*
|
|
390
|
+
* `undefined` when there is no active track (empty queue, post-clear, or
|
|
391
|
+
* post-destroy) OR when `track.url` uses a scheme other than `file://` /
|
|
392
|
+
* `http://` / `https://` (e.g. `data:`, `blob:`, custom schemes — the
|
|
393
|
+
* classifier returns `undefined` rather than a misleading default).
|
|
394
|
+
*/
|
|
395
|
+
export type TrackSource = 'streaming' | 'local' | 'cached';
|
|
396
|
+
/**
|
|
397
|
+
* Canonical audio codec identifier surfaced by `getNowPlayingFormat()`.
|
|
398
|
+
* Both natives can detect the AAC family (LC / HE / HE-v2 / xHE) but
|
|
399
|
+
* surfacing the profile requires extra parsing — v1 collapses to
|
|
400
|
+
* `'aac'`. Consumers needing the AAC profile read it from the
|
|
401
|
+
* platform-specific extras object's `codecs` field (RFC 6381 string
|
|
402
|
+
* on Android) or off the iOS `formatDescriptions` directly.
|
|
403
|
+
*/
|
|
404
|
+
export type AudioCodec = 'aac' | 'mp3' | 'flac' | 'alac' | 'opus' | 'pcm' | 'unknown';
|
|
405
|
+
/**
|
|
406
|
+
* Canonical container identifier. `'mp4'` covers `.m4a`, `.m4b`, `.m4r`,
|
|
407
|
+
* and audio-only `.mp4`. `'hls'` is the playlist (.m3u8) container,
|
|
408
|
+
* not a file format.
|
|
409
|
+
*/
|
|
410
|
+
export type AudioContainer = 'mp4' | 'mp3' | 'flac' | 'ogg' | 'wav' | 'aac-adts' | 'hls' | 'unknown';
|
|
411
|
+
/**
|
|
412
|
+
* Snapshot of the currently-playing track's audio format. Surfaced
|
|
413
|
+
* via `getNowPlayingFormat()` (sync getter — null until populated)
|
|
414
|
+
* and `onNowPlayingFormatChange` (event-driven). Refresh on every
|
|
415
|
+
* `onTrackChange` — the snapshot is keyed on whatever AVPlayerItem
|
|
416
|
+
* (iOS) / MediaItem (Android) is currently active.
|
|
417
|
+
*
|
|
418
|
+
* Six fields are reliable on BOTH platforms for both `file://` and
|
|
419
|
+
* `http(s)://` sources. Platform-specific extras live under the
|
|
420
|
+
* optional `ios` / `android` objects so consumers can access richer
|
|
421
|
+
* data when available without forcing cross-platform branching.
|
|
422
|
+
*/
|
|
423
|
+
export interface NowPlayingFormat {
|
|
424
|
+
/** Canonical codec identifier. `'unknown'` when detection fails. */
|
|
425
|
+
codec: AudioCodec;
|
|
426
|
+
/**
|
|
427
|
+
* Canonical container identifier. `'unknown'` when not detectable.
|
|
428
|
+
* Container can be inferred independently of codec — e.g. AAC in
|
|
429
|
+
* MP4 vs AAC in ADTS produce the same `codec: 'aac'` but distinct
|
|
430
|
+
* `container` values.
|
|
431
|
+
*/
|
|
432
|
+
container: AudioContainer;
|
|
433
|
+
/**
|
|
434
|
+
* Raw sample MIME type from the native layer (iOS-mapped FourCC
|
|
435
|
+
* / Android `Format.sampleMimeType`). E.g. `'audio/mp4a-latm'`,
|
|
436
|
+
* `'audio/mpeg'`, `'audio/flac'`. `null` when not detectable.
|
|
437
|
+
*/
|
|
438
|
+
mimeType: string | null;
|
|
439
|
+
/** Sample rate in Hz, or `null` when not detectable. */
|
|
440
|
+
sampleRate: number | null;
|
|
441
|
+
/** Channel count (1 = mono, 2 = stereo, 6 = 5.1, etc.), or `null`. */
|
|
442
|
+
channelCount: number | null;
|
|
443
|
+
/**
|
|
444
|
+
* Average / nominal bitrate in bits-per-second. `null` when not
|
|
445
|
+
* detectable. Reliable for `file://` + progressive HTTP MP3/M4A/FLAC;
|
|
446
|
+
* for HLS, returns the variant's nominal bandwidth from the
|
|
447
|
+
* manifest.
|
|
448
|
+
*/
|
|
449
|
+
bitrate: number | null;
|
|
450
|
+
/** Track duration in seconds, or `null` when not yet known. */
|
|
451
|
+
durationSec: number | null;
|
|
452
|
+
/**
|
|
453
|
+
* The active track's `REPLAYGAIN_TRACK_GAIN` value in dB, or
|
|
454
|
+
* `null` if the track has no track-gain tag (or the tag was
|
|
455
|
+
* rejected by the parser, or the container is Opus where
|
|
456
|
+
* `OpusHead.output_gain` is decoder-applied instead).
|
|
457
|
+
*
|
|
458
|
+
* Whether this gain is actually being applied depends on
|
|
459
|
+
* `getReplayGainMode()` — see `replayGainActive`.
|
|
460
|
+
*/
|
|
461
|
+
replayGainTrackDb: number | null;
|
|
462
|
+
/**
|
|
463
|
+
* The active track's `REPLAYGAIN_TRACK_PEAK` (linear, [0, ~1.5]),
|
|
464
|
+
* or `null` if no trustworthy track-peak tag is present. When
|
|
465
|
+
* non-null and the active mode applies track gain, the lib
|
|
466
|
+
* auto-clamps the effective gain so `linearGain * peak ≤ 1.0`
|
|
467
|
+
* to prevent clipping.
|
|
468
|
+
*/
|
|
469
|
+
replayGainTrackPeak: number | null;
|
|
470
|
+
/**
|
|
471
|
+
* The active track's `REPLAYGAIN_ALBUM_GAIN` value in dB, or
|
|
472
|
+
* `null` if the track has no album-gain tag.
|
|
473
|
+
*/
|
|
474
|
+
replayGainAlbumDb: number | null;
|
|
475
|
+
/**
|
|
476
|
+
* The active track's `REPLAYGAIN_ALBUM_PEAK` (linear, [0, ~1.5]),
|
|
477
|
+
* or `null` if no trustworthy album-peak tag is present. Same
|
|
478
|
+
* clip-protection behaviour as `replayGainTrackPeak` when album
|
|
479
|
+
* gain is active.
|
|
480
|
+
*/
|
|
481
|
+
replayGainAlbumPeak: number | null;
|
|
482
|
+
/**
|
|
483
|
+
* `true` when ReplayGain is currently being applied to this
|
|
484
|
+
* track: `getReplayGainMode() != 'off'` AND the tag for that
|
|
485
|
+
* exact mode is present on the active track.
|
|
486
|
+
*
|
|
487
|
+
* Strict — `'album'` mode requires `replayGainAlbumDb !== null`;
|
|
488
|
+
* `'track'` mode requires `replayGainTrackDb !== null`. There is
|
|
489
|
+
* no fallback. Use this for a UI indicator (e.g., a "RG" badge
|
|
490
|
+
* shown next to the codec/source labels).
|
|
491
|
+
*/
|
|
492
|
+
replayGainActive: boolean;
|
|
493
|
+
/** iOS-specific extras. Absent on Android. */
|
|
494
|
+
ios?: NowPlayingFormatIosExtras;
|
|
495
|
+
/** Android-specific extras. Absent on iOS. */
|
|
496
|
+
android?: NowPlayingFormatAndroidExtras;
|
|
497
|
+
}
|
|
498
|
+
/** iOS-specific NowPlayingFormat fields. */
|
|
499
|
+
export interface NowPlayingFormatIosExtras {
|
|
500
|
+
/** Bits per channel (PCM / lossless paths only; `null` for compressed). */
|
|
501
|
+
bitsPerChannel: number | null;
|
|
502
|
+
}
|
|
503
|
+
/** Android-specific NowPlayingFormat fields. */
|
|
504
|
+
export interface NowPlayingFormatAndroidExtras {
|
|
505
|
+
/** Manifest-declared peak bitrate (HLS / DASH), or `null`. */
|
|
506
|
+
peakBitrate: number | null;
|
|
507
|
+
/** RFC 6381 codecs string (e.g. `'mp4a.40.2'`), or `null`. */
|
|
508
|
+
codecs: string | null;
|
|
509
|
+
/**
|
|
510
|
+
* `Format.pcmEncoding` value (PCM-only paths). `Format.NO_VALUE`
|
|
511
|
+
* (-1) for compressed sources. See Media3's `C.PcmEncoding`
|
|
512
|
+
* constants for the enum semantics.
|
|
513
|
+
*/
|
|
514
|
+
pcmEncoding: number | null;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Lib-standardized cross-platform error code vocabulary. Drives consumer
|
|
518
|
+
* branching logic (`if (err.code === 'TIMEOUT') ...`) without per-platform
|
|
519
|
+
* forking. Both iOS NSError + AVError codes and Android Media3
|
|
520
|
+
* `PlaybackException.errorCode` values map onto this enum via the
|
|
521
|
+
* `PlaybackErrorMapping` helper on each platform.
|
|
522
|
+
*
|
|
523
|
+
* **Transient (auto-retry eligible):** TIMEOUT, CONNECTION_LOST,
|
|
524
|
+
* NETWORK_UNREACHABLE, SOURCE_UNREACHABLE, CANNOT_OPEN (when
|
|
525
|
+
* iOS-NSURLError-wrapped — see iOS PlaybackErrorMapping for the
|
|
526
|
+
* two-tier classifier), UNKNOWN.
|
|
527
|
+
*
|
|
528
|
+
* **Fatal (never retried):** HTTP_ERROR, AUTH_ERROR,
|
|
529
|
+
* CLEARTEXT_NOT_PERMITTED, FILE_FORMAT_NOT_RECOGNIZED, DECODER_NOT_FOUND,
|
|
530
|
+
* DECODING_FAILED.
|
|
531
|
+
*/
|
|
532
|
+
export type PlaybackErrorCode = 'TIMEOUT' | 'CONNECTION_LOST' | 'NETWORK_UNREACHABLE' | 'HTTP_ERROR' | 'AUTH_ERROR' | 'CLEARTEXT_NOT_PERMITTED' | 'FILE_FORMAT_NOT_RECOGNIZED' | 'DECODER_NOT_FOUND' | 'DECODING_FAILED' | 'SOURCE_UNREACHABLE' | 'CANNOT_OPEN' | 'UNKNOWN';
|
|
533
|
+
export interface PlaybackError {
|
|
534
|
+
/** Lib-standardized cross-platform code. Drives consumer branching. */
|
|
535
|
+
code: PlaybackErrorCode;
|
|
536
|
+
/** Lib-mapped human-readable summary. Consistent across platforms. */
|
|
537
|
+
message: string;
|
|
538
|
+
/** Non-recoverable errors stop playback; recoverable ones let the player retry. */
|
|
539
|
+
fatal: boolean;
|
|
540
|
+
/**
|
|
541
|
+
* Raw native error code: `NSError.code` on iOS (Int), or
|
|
542
|
+
* `PlaybackException.errorCode` on Android (Int — see Media3's
|
|
543
|
+
* `ERROR_CODE_*` constants). For HTTP errors on Android the
|
|
544
|
+
* underlying HTTP status is exposed here directly.
|
|
545
|
+
*/
|
|
546
|
+
nativeCode: number;
|
|
547
|
+
/**
|
|
548
|
+
* Native error domain: `"NSURLErrorDomain"` / `"AVFoundationErrorDomain"`
|
|
549
|
+
* / etc. on iOS; `"Media3"` plus the `errorCodeName` (e.g.
|
|
550
|
+
* `"Media3:ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT"`) on Android.
|
|
551
|
+
* Empty string when no domain available.
|
|
552
|
+
*/
|
|
553
|
+
nativeDomain: string;
|
|
554
|
+
/**
|
|
555
|
+
* Raw native message — typically `localizedDescription` on iOS or
|
|
556
|
+
* `PlaybackException.message` on Android. URL query strings are
|
|
557
|
+
* stripped before emission to avoid leaking auth tokens (e.g.
|
|
558
|
+
* Subsonic `s=…&t=…` salt+token in stream URLs).
|
|
559
|
+
*/
|
|
560
|
+
nativeMessage: string;
|
|
561
|
+
/**
|
|
562
|
+
* Lib-generated identifier for the queue item that produced this
|
|
563
|
+
* error. Identifies the specific AVPlayerItem (iOS) / MediaItem
|
|
564
|
+
* (Android) instance — independent of any consumer-supplied
|
|
565
|
+
* track.id. Empty string when the error fired against a
|
|
566
|
+
* not-currently-active item or when the player is between items.
|
|
567
|
+
*/
|
|
568
|
+
queueItemId: string;
|
|
569
|
+
/**
|
|
570
|
+
* Source URL of the queue item that produced this error. Lets a
|
|
571
|
+
* consumer correlate an error to the specific track even when
|
|
572
|
+
* AVQueuePlayer chain-advances past the failed item and the
|
|
573
|
+
* active currentTrackIndex has already moved on. URL query
|
|
574
|
+
* strings are NOT stripped — consumer's auth tokens are their
|
|
575
|
+
* own data on the way back to them. Empty string when the error
|
|
576
|
+
* fired against a not-currently-identified item.
|
|
577
|
+
*/
|
|
578
|
+
url: string;
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Skip-capability snapshot. Emitted by `onSkipCapabilityChange` and
|
|
582
|
+
* mirrored by the `useCanSkip()` hook. Reflects whether there's a
|
|
583
|
+
* track to skip to under the current repeat mode. Under
|
|
584
|
+
* `RepeatMode.track` (repeat-one) skip navigates with no wrap exactly
|
|
585
|
+
* like `RepeatMode.off`, so a flag is `false` at the queue boundary
|
|
586
|
+
* (no skip-next on the last track, no skip-previous on the first).
|
|
587
|
+
*
|
|
588
|
+
* Wrapped in a struct (rather than two separate boolean callback
|
|
589
|
+
* args) so future capability flags can be added without a breaking
|
|
590
|
+
* API change. Also works around a Nitrogen 0.35.4 codegen bug for
|
|
591
|
+
* `(bool, bool) → void` callback signatures specifically.
|
|
592
|
+
*/
|
|
593
|
+
export interface SkipCapability {
|
|
594
|
+
/** Reflects queue length + current index + repeat mode (symmetric with `canSkipNext`). */
|
|
595
|
+
canSkipPrevious: boolean;
|
|
596
|
+
/** Reflects queue length + current index + repeat mode. */
|
|
597
|
+
canSkipNext: boolean;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Sleep-timer snapshot — the current state of the native sleep timer, as
|
|
601
|
+
* returned by `getSleepTimer()` and delivered to `onSleepTimerChange`.
|
|
602
|
+
*
|
|
603
|
+
* The timer is wall-clock: `endsAtEpochMs` is a fixed deadline that counts down
|
|
604
|
+
* whether playback is playing or paused. In end-of-track mode the timer instead
|
|
605
|
+
* waits for the current track to finish, so `endsAtEpochMs` is `null` until it
|
|
606
|
+
* converts to a concrete deadline near the track's end.
|
|
607
|
+
*
|
|
608
|
+
* Wrapped in a struct (rather than positional callback args) so fields can be
|
|
609
|
+
* added without a breaking change, and to avoid a Nitrogen 0.35.4 codegen bug
|
|
610
|
+
* for multi-primitive callback signatures.
|
|
611
|
+
*/
|
|
612
|
+
export interface SleepTimerState {
|
|
613
|
+
/** `true` while a sleep timer is armed (duration or end-of-track). */
|
|
614
|
+
active: boolean;
|
|
615
|
+
/** Wall-clock epoch (ms) when playback will pause; absent when inactive or awaiting track end. */
|
|
616
|
+
endsAtEpochMs?: number;
|
|
617
|
+
/** Seconds until the timer fires; absent when inactive or awaiting track end. */
|
|
618
|
+
remainingSeconds?: number;
|
|
619
|
+
/**
|
|
620
|
+
* `true` while waiting to pause at the end of the current track. Flips to
|
|
621
|
+
* `false` once the timer converts to a concrete countdown near the track end
|
|
622
|
+
* (at which point `endsAtEpochMs` / `remainingSeconds` become available).
|
|
623
|
+
*/
|
|
624
|
+
endOfTrack: boolean;
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Eviction policy for the lookahead cache, chosen at `configure()` via
|
|
628
|
+
* {@link PlayerConfig.lookaheadCacheEvictionPolicy}.
|
|
629
|
+
*
|
|
630
|
+
* - `'lru'` (default): evict the least-recently-used track first — recency is
|
|
631
|
+
* bumped when a track is loaded for playback, so replayed tracks are kept.
|
|
632
|
+
* - `'fifo'`: evict the oldest-inserted track first, regardless of replays
|
|
633
|
+
* ("keep the newest-fetched") — suits a forward-only prefetch queue.
|
|
634
|
+
*
|
|
635
|
+
* Construction-fixed like the cache size: changing it at `configure()` clears
|
|
636
|
+
* the cache and rebuilds with the new policy.
|
|
637
|
+
*/
|
|
638
|
+
export type EvictionPolicy = 'lru' | 'fifo';
|
|
639
|
+
export interface LookaheadCacheConfig {
|
|
640
|
+
enabled: boolean;
|
|
641
|
+
/** Tracks ahead of the current index to proactively cache. 0 disables lookahead; eviction still runs. */
|
|
642
|
+
lookaheadCount: number;
|
|
643
|
+
}
|
|
644
|
+
export interface CacheStatus {
|
|
645
|
+
enabled: boolean;
|
|
646
|
+
currentSizeMb: number;
|
|
647
|
+
maxSizeMb: number;
|
|
648
|
+
/**
|
|
649
|
+
* Total number of tracks fully downloaded on disk in the cache — the whole
|
|
650
|
+
* size-bounded cache, not scoped to the current queue or the lookahead
|
|
651
|
+
* window. For a usage indicator prefer `currentSizeMb` / `maxSizeMb`.
|
|
652
|
+
*/
|
|
653
|
+
tracksFullyCached: number;
|
|
654
|
+
/** Track URLs currently downloading (subset of the lookahead window).
|
|
655
|
+
* Keyed on `track.url` because that's the cache key — `track.id` is
|
|
656
|
+
* consumer-supplied and not used internally.
|
|
657
|
+
*/
|
|
658
|
+
currentlyCaching: string[];
|
|
659
|
+
}
|
|
660
|
+
export type MediaSearchType = 'artist' | 'album' | 'song' | 'playlist' | 'genre';
|
|
661
|
+
/**
|
|
662
|
+
* Which voice surface the request came from. Drives consumer's
|
|
663
|
+
* resolver: iOS-only fields (`reference`, `playShuffled`,
|
|
664
|
+
* `playbackRepeatMode`, `resumePlayback`, `playbackSpeed`,
|
|
665
|
+
* `releaseDate`) are only populated when `origin === 'ios-siri'`.
|
|
666
|
+
* The lib never invents an origin; if the request arrived from a
|
|
667
|
+
* source the lib couldn't classify, `origin` is undefined.
|
|
668
|
+
*/
|
|
669
|
+
export type MediaSearchOrigin = 'ios-siri' | 'android-assistant';
|
|
670
|
+
/**
|
|
671
|
+
* Apple's `INMediaReference` mapped to a JS enum. Apple's `.unknown`
|
|
672
|
+
* case is mapped to `undefined` (the field is absent rather than
|
|
673
|
+
* carrying a sentinel string).
|
|
674
|
+
*
|
|
675
|
+
* - `'currentlyPlaying'` — request refers to whatever is currently
|
|
676
|
+
* playing (e.g. resume / "more like this" patterns).
|
|
677
|
+
* - `'my'` — request is scoped to the user's library / owned content
|
|
678
|
+
* (any utterance that signals "from my collection", not just the
|
|
679
|
+
* literal word "my").
|
|
680
|
+
*/
|
|
681
|
+
export type MediaSearchReference = 'currentlyPlaying' | 'my';
|
|
682
|
+
/**
|
|
683
|
+
* Apple's `INPlaybackRepeatMode` mapped to a JS enum. Apple's
|
|
684
|
+
* `.unknown` case is mapped to `undefined`.
|
|
685
|
+
*/
|
|
686
|
+
export type MediaSearchRepeatMode = 'none' | 'one' | 'all';
|
|
687
|
+
/**
|
|
688
|
+
* Apple's `INPlaybackQueueLocation` mapped to a JS enum. Drives
|
|
689
|
+
* "play X next" / "add X to the queue" voice utterances — Siri's
|
|
690
|
+
* NLU parses the queue-position hint and surfaces it here so the
|
|
691
|
+
* consumer's resolver can choose between replacing the queue
|
|
692
|
+
* (`'now'`, the default), inserting after the current track
|
|
693
|
+
* (`'next'`), or appending to the tail (`'later'`). Apple's
|
|
694
|
+
* `.unknown` case is mapped to `undefined`.
|
|
695
|
+
*
|
|
696
|
+
* iOS only — Google Assistant's App Actions schema has no
|
|
697
|
+
* structurally-equivalent slot, so the field is always undefined
|
|
698
|
+
* for `origin === 'android-assistant'` requests.
|
|
699
|
+
*/
|
|
700
|
+
export type MediaSearchQueueLocation = 'now' | 'next' | 'later';
|
|
701
|
+
/**
|
|
702
|
+
* Inclusive year range derived from `INMediaSearch.releaseDate`. Both
|
|
703
|
+
* bounds are optional — Siri may surface only one end of the range
|
|
704
|
+
* for queries like "play music from 1997". When both are populated
|
|
705
|
+
* they describe a closed interval (e.g. `{ startYear: 1990, endYear:
|
|
706
|
+
* 1999 }` for "play 90s music").
|
|
707
|
+
*/
|
|
708
|
+
export interface MediaSearchReleaseDateRange {
|
|
709
|
+
startYear?: number;
|
|
710
|
+
endYear?: number;
|
|
711
|
+
}
|
|
712
|
+
/**
|
|
713
|
+
* iOS donation payload — the catalog items the consumer wants Siri's
|
|
714
|
+
* NLU to recognise in voice queries. Maps to
|
|
715
|
+
* `INVocabulary.setVocabularyStrings(_:of:)` with
|
|
716
|
+
* `.mediaMusicArtistName` for `artists` and `.mediaPlaylistTitle`
|
|
717
|
+
* for `playlists`. Apple's `INVocabularyStringType` has no case for
|
|
718
|
+
* music album names or song titles; album matching happens at
|
|
719
|
+
* intent-resolution time via the populated `MediaSearchRequest.album`
|
|
720
|
+
* field, so a separate `albums` donation list has no destination in
|
|
721
|
+
* Apple's API and is intentionally omitted.
|
|
722
|
+
*
|
|
723
|
+
* Both lists are required (empty array means "nothing to donate for
|
|
724
|
+
* this taxonomy") — required `string[]` instead of `string[]?` keeps
|
|
725
|
+
* the Nitrogen-generated C++ bridge cleanly typed; `std::optional<
|
|
726
|
+
* std::vector<std::string>>` triggered a Swift C++ interop regression
|
|
727
|
+
* on pre-existing files during a 5.1-time bisect.
|
|
728
|
+
*
|
|
729
|
+
* No-op on Android — Google Assistant has no in-app vocabulary
|
|
730
|
+
* donation API; vocabulary discovery on Android is driven by App
|
|
731
|
+
* Actions (`shortcuts.xml`) + the in-app browse tree. JSDoc in the
|
|
732
|
+
* Hybrid spec documents the asymmetry to consumers.
|
|
733
|
+
*/
|
|
734
|
+
export interface VoiceVocabulary {
|
|
735
|
+
artists: string[];
|
|
736
|
+
playlists: string[];
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* Voice / automotive search request. The wire shape is a single
|
|
740
|
+
* interface with an enum-like `type` field plus per-type optional
|
|
741
|
+
* refinements — Nitrogen disallows discriminated unions with
|
|
742
|
+
* string-literal tags (NOTES.md §1.2), so the variants are
|
|
743
|
+
* encoded by which optional field is populated rather than by
|
|
744
|
+
* separate type members.
|
|
745
|
+
*
|
|
746
|
+
* **Field semantics by `type`** (consumer should populate only
|
|
747
|
+
* the matching field; others should be `undefined`):
|
|
748
|
+
*
|
|
749
|
+
* - `'artist'` — `artist` carries the searched artist name; `query`
|
|
750
|
+
* is the original spoken/typed string.
|
|
751
|
+
* - `'album'` — `album` and (optionally) `artist` qualify the
|
|
752
|
+
* album lookup.
|
|
753
|
+
* - `'song'` — `song` and (optionally) `artist` / `album` qualify
|
|
754
|
+
* the song lookup.
|
|
755
|
+
* - `'playlist'` — `playlist` carries the playlist name.
|
|
756
|
+
* - `'genre'` — `genre` carries the genre name.
|
|
757
|
+
* - `undefined` — generic search; consumer falls back to a
|
|
758
|
+
* best-effort lookup across all media kinds using `query`.
|
|
759
|
+
*
|
|
760
|
+
* Combinations not described above (e.g. `type: 'song'` with a
|
|
761
|
+
* populated `playlist` field) are ambiguous; consumers should
|
|
762
|
+
* ignore mismatched fields rather than reject the request.
|
|
763
|
+
*
|
|
764
|
+
* **Voice-only fields** (`origin`, `reference`, `playShuffled`,
|
|
765
|
+
* `playbackRepeatMode`, `resumePlayback`, `playbackSpeed`,
|
|
766
|
+
* `releaseDate`) are populated when the request arrived through a
|
|
767
|
+
* voice assistant. `origin` is the discriminator. On Android
|
|
768
|
+
* (`origin === 'android-assistant'`) only `genre` is structurally
|
|
769
|
+
* populated by Google's NLU beyond the base fields; the iOS-only
|
|
770
|
+
* fields are always undefined. Consumer's resolver should branch
|
|
771
|
+
* on `origin` before reading them.
|
|
772
|
+
*/
|
|
773
|
+
export interface MediaSearchRequest {
|
|
774
|
+
query: string;
|
|
775
|
+
type?: MediaSearchType;
|
|
776
|
+
artist?: string;
|
|
777
|
+
album?: string;
|
|
778
|
+
song?: string;
|
|
779
|
+
playlist?: string;
|
|
780
|
+
/**
|
|
781
|
+
* First element of `INMediaSearch.genreNames` on iOS (lossy by
|
|
782
|
+
* design — multi-genre queries collapse to one), or the parsed
|
|
783
|
+
* genre extra from `MediaSession.Callback.onPlayFromSearch` on
|
|
784
|
+
* Android. Either platform may leave it undefined.
|
|
785
|
+
*/
|
|
786
|
+
genre?: string;
|
|
787
|
+
/**
|
|
788
|
+
* Voice-surface discriminator. Undefined when the request didn't
|
|
789
|
+
* arrive through a recognised voice path.
|
|
790
|
+
*/
|
|
791
|
+
origin?: MediaSearchOrigin;
|
|
792
|
+
/**
|
|
793
|
+
* Field shape inherited from the legacy `INMediaSearch.reference`
|
|
794
|
+
* model. Not populated by iOS voice today (the App Intents path
|
|
795
|
+
* delivers only `query` + occasional `artist`). Retained for shape
|
|
796
|
+
* stability + future voice surfaces.
|
|
797
|
+
*/
|
|
798
|
+
reference?: MediaSearchReference;
|
|
799
|
+
/**
|
|
800
|
+
* Field shape inherited from the legacy `INPlayMediaIntent` model.
|
|
801
|
+
* Not populated by iOS voice today; see `reference` above.
|
|
802
|
+
*/
|
|
803
|
+
playShuffled?: boolean;
|
|
804
|
+
/**
|
|
805
|
+
* Field shape inherited from the legacy `INPlayMediaIntent` model.
|
|
806
|
+
* Not populated by iOS voice today; see `reference` above.
|
|
807
|
+
*/
|
|
808
|
+
playbackRepeatMode?: MediaSearchRepeatMode;
|
|
809
|
+
/**
|
|
810
|
+
* Field shape inherited from the legacy `INPlayMediaIntent` model.
|
|
811
|
+
* Not populated by iOS voice today; see `reference` above.
|
|
812
|
+
*/
|
|
813
|
+
resumePlayback?: boolean;
|
|
814
|
+
/**
|
|
815
|
+
* Field shape inherited from the legacy `INPlayMediaIntent` model.
|
|
816
|
+
* Not populated by iOS voice today; see `reference` above.
|
|
817
|
+
*/
|
|
818
|
+
playbackSpeed?: number;
|
|
819
|
+
/**
|
|
820
|
+
* Field shape inherited from the legacy `INMediaSearch.releaseDate`
|
|
821
|
+
* model. Not populated by iOS voice today (the App Intents path has
|
|
822
|
+
* no decade-range slot); see `reference` above.
|
|
823
|
+
*/
|
|
824
|
+
releaseDate?: MediaSearchReleaseDateRange;
|
|
825
|
+
/**
|
|
826
|
+
* Field shape inherited from the legacy `INPlayMediaIntent` model.
|
|
827
|
+
* Not populated by iOS voice today; see `reference` above. When set
|
|
828
|
+
* by other surfaces, the resolver branches: `'now'` (default)
|
|
829
|
+
* replaces the queue and starts playback; `'next'` inserts the
|
|
830
|
+
* resolved tracks after the current track without interrupting;
|
|
831
|
+
* `'later'` appends to the tail.
|
|
832
|
+
*/
|
|
833
|
+
playbackQueueLocation?: MediaSearchQueueLocation;
|
|
834
|
+
}
|
|
835
|
+
export interface BrowseItem {
|
|
836
|
+
/**
|
|
837
|
+
* Identifier the consumer chooses for this item. Echoed back via
|
|
838
|
+
* `onBrowseRequest(parentId)` for drilldown and `onPlayFromIdRequest(mediaId)`
|
|
839
|
+
* when the user selects a playable item. Lib does not interpret it.
|
|
840
|
+
*/
|
|
841
|
+
id: string;
|
|
842
|
+
title: string;
|
|
843
|
+
subtitle?: string;
|
|
844
|
+
/** Local `file://` or remote `https://` URL. Native side loads via the platform image loader. */
|
|
845
|
+
artworkUrl?: string;
|
|
846
|
+
/**
|
|
847
|
+
* True if selecting this item starts playback (calls
|
|
848
|
+
* `onPlayFromIdRequest`). Mutually exclusive with `hasChildren` —
|
|
849
|
+
* neither CarPlay's `CPListItem` nor Android Auto's `MediaItem`
|
|
850
|
+
* cleanly renders a row that is both. Consumers that want a
|
|
851
|
+
* tap-to-play album with an expandable song list should ship two
|
|
852
|
+
* sibling items (the playable album + a browsable "songs" entry).
|
|
853
|
+
*/
|
|
854
|
+
playable: boolean;
|
|
855
|
+
/**
|
|
856
|
+
* True if selecting this item drills into a nested list (calls
|
|
857
|
+
* `onBrowseRequest`). Defaults to `false` when omitted. Mutually
|
|
858
|
+
* exclusive with `playable` (see above).
|
|
859
|
+
*/
|
|
860
|
+
hasChildren?: boolean;
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* Reason code for `onServiceReady` — distinguishes the very first
|
|
864
|
+
* service-bind in a JS-process lifetime (`first-bind`) from a later
|
|
865
|
+
* rebind that the lib detected by comparing the platform service
|
|
866
|
+
* instance's identity against the previously-seen one
|
|
867
|
+
* (`service-reborn`).
|
|
868
|
+
*
|
|
869
|
+
* **Android**: the platform foreground service can be killed by the
|
|
870
|
+
* OS (memory pressure, doze, idle-bucket reaper) and re-created on
|
|
871
|
+
* the next bind. The lib's auto-rebind watchdog reconnects and fires
|
|
872
|
+
* `service-reborn`. Consumers typically respond by re-pushing the
|
|
873
|
+
* browse snapshot (the new service instance starts with a fresh
|
|
874
|
+
* `BrowseDataProvider`, so the cached snapshot is gone).
|
|
875
|
+
*
|
|
876
|
+
* **iOS**: no equivalent service-rebirth scenario — apps die fully
|
|
877
|
+
* under memory pressure. The lib accepts the `onServiceReady`
|
|
878
|
+
* registration for API parity but never invokes the callback on
|
|
879
|
+
* iOS; consumers rely on `onCarConnect` for the iOS-side attach
|
|
880
|
+
* signal.
|
|
881
|
+
*/
|
|
882
|
+
export type ServiceReadyReason = 'first-bind' | 'service-reborn';
|
|
883
|
+
/**
|
|
884
|
+
* Closed set of section-tab icons the lib knows how to render in a
|
|
885
|
+
* platform-native way. Consumers pick from this enum rather than
|
|
886
|
+
* passing platform-specific symbol names so the icon set stays
|
|
887
|
+
* guard-railed and the lib can swap implementations (SF Symbol on
|
|
888
|
+
* iOS today, Material icon on Android once Android Auto exposes a
|
|
889
|
+
* tab-icon API — currently `androidx/media#646`).
|
|
890
|
+
*
|
|
891
|
+
* String values are stable so consumer apps can persist them.
|
|
892
|
+
*/
|
|
893
|
+
export declare enum SectionIcon {
|
|
894
|
+
Home = "home",
|
|
895
|
+
Library = "library",
|
|
896
|
+
Playlists = "playlists",
|
|
897
|
+
Favourites = "favourites",
|
|
898
|
+
Albums = "albums",
|
|
899
|
+
Artists = "artists",
|
|
900
|
+
Songs = "songs",
|
|
901
|
+
Genres = "genres",
|
|
902
|
+
RecentlyPlayed = "recently-played",
|
|
903
|
+
Radio = "radio",
|
|
904
|
+
Search = "search",
|
|
905
|
+
Downloaded = "downloaded",
|
|
906
|
+
Podcasts = "podcasts"
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* One section in a browse snapshot — a labelled group of items the
|
|
910
|
+
* consumer pre-builds for fast cold-start presentation in CarPlay /
|
|
911
|
+
* Android Auto. Sections become root-level tabs at the top of the
|
|
912
|
+
* automotive UI (Apple Music + Spotify shape — up to 4 tabs on both
|
|
913
|
+
* platforms; over-cap sections are truncated with a one-time warning).
|
|
914
|
+
*/
|
|
915
|
+
export interface BrowseSection {
|
|
916
|
+
/** Stable identifier within the snapshot. Used as parentId when the user drills into the section. */
|
|
917
|
+
id: string;
|
|
918
|
+
/** User-facing label (e.g. "Recently Played"). Renders as the tab title. */
|
|
919
|
+
title: string;
|
|
920
|
+
/**
|
|
921
|
+
* Optional tab icon. CarPlay renders the matching SF Symbol on the
|
|
922
|
+
* tab bar; Android Auto does not yet expose a tab-icon API and
|
|
923
|
+
* silently drops the value with an INFO log on first use.
|
|
924
|
+
*/
|
|
925
|
+
icon?: SectionIcon;
|
|
926
|
+
/**
|
|
927
|
+
* Optional artwork URL shown on the synthetic root-level row that
|
|
928
|
+
* represents this section in pre-tab-bar CarPlay fallbacks and on
|
|
929
|
+
* any future Android Auto surface that exposes section artwork.
|
|
930
|
+
* Same URL semantics as `BrowseItem.artworkUrl` — `file://` and
|
|
931
|
+
* `http(s)://` are both honoured.
|
|
932
|
+
*/
|
|
933
|
+
artworkUrl?: string;
|
|
934
|
+
items: BrowseItem[];
|
|
935
|
+
}
|
|
936
|
+
/**
|
|
937
|
+
* Full pre-computed browse tree pushed by the consumer via
|
|
938
|
+
* `setBrowseSnapshot`. The native automotive surface caches this so
|
|
939
|
+
* cold-start car connections (CarPlay scene attach, Android Auto bind,
|
|
940
|
+
* Google Assistant wake) can render content immediately without a JS
|
|
941
|
+
* bridge round-trip. When the consumer's underlying data changes, push
|
|
942
|
+
* a fresh snapshot; the native side replaces its cache atomically and
|
|
943
|
+
* notifies connected controllers (push semantics — the most-recent
|
|
944
|
+
* `setBrowseSnapshot` call wins).
|
|
945
|
+
*
|
|
946
|
+
* Consumer-shape-agnostic: the lib never reads the contents of a
|
|
947
|
+
* snapshot beyond what's needed to render the platform UI.
|
|
948
|
+
*/
|
|
949
|
+
export interface BrowseSnapshot {
|
|
950
|
+
/** Identifier the consumer chooses for the root parent (e.g. 'root'). */
|
|
951
|
+
rootId: string;
|
|
952
|
+
sections: BrowseSection[];
|
|
953
|
+
}
|
|
954
|
+
export interface EqualizerBand {
|
|
955
|
+
frequencyHz: number;
|
|
956
|
+
gainDb: number;
|
|
957
|
+
}
|
|
958
|
+
export interface EqualizerPreset {
|
|
959
|
+
name: string;
|
|
960
|
+
gains: number[];
|
|
961
|
+
/** True for the 16 built-ins, false for user-saved presets. */
|
|
962
|
+
builtin: boolean;
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Allowed FFT bin counts. AAC / AVAudioEngine + Android Visualizer both
|
|
966
|
+
* accept any power of 2 from 256 to 2048 in this family; the lib narrows
|
|
967
|
+
* to that set so consumers can't pass an arbitrary number that the
|
|
968
|
+
* native side then has to round or reject. Android Path A may serve a
|
|
969
|
+
* smaller bin count when the device caps below the request — check the
|
|
970
|
+
* frame's actual fft.byteLength at runtime.
|
|
971
|
+
*/
|
|
972
|
+
export type VisualizerFftSize = 256 | 512 | 1024 | 2048;
|
|
973
|
+
export interface VisualizerConfig {
|
|
974
|
+
/**
|
|
975
|
+
* FFT bin count. Higher values give finer frequency resolution but
|
|
976
|
+
* increase per-frame compute on both sides of the bridge. 1024 is a
|
|
977
|
+
* sensible default for animated UIs at 60 FPS.
|
|
978
|
+
*/
|
|
979
|
+
fftSize: VisualizerFftSize;
|
|
980
|
+
/**
|
|
981
|
+
* Emit interval in milliseconds. Default 16 (~60 FPS). The native
|
|
982
|
+
* processor performs the windowing + FFT + magnitude scaling on the
|
|
983
|
+
* audio render thread once per emit window; values below ~8 ms can
|
|
984
|
+
* starve the audio render budget at fftSize=2048 and are not
|
|
985
|
+
* recommended. The lib accepts any positive integer — bound your
|
|
986
|
+
* own value to ≥8 ms in production code.
|
|
987
|
+
*/
|
|
988
|
+
updateIntervalMs: number;
|
|
989
|
+
/**
|
|
990
|
+
* When true, emit raw time-domain Float32 PCM samples alongside the
|
|
991
|
+
* frequency-domain magnitudes. Defaults to false. Opt-in adds one
|
|
992
|
+
* extra ArrayBuffer + memcpy per frame on the native side; consumers
|
|
993
|
+
* that don't need oscilloscope/Lissajous-style waveform rendering
|
|
994
|
+
* should leave this off.
|
|
995
|
+
*/
|
|
996
|
+
includeSamples?: boolean;
|
|
997
|
+
}
|
|
998
|
+
export interface VisualizerFrame {
|
|
999
|
+
/**
|
|
1000
|
+
* Float32 frequency-domain magnitudes, length = `fftSize / 2`.
|
|
1001
|
+
* Lowest bin first; magnitudes are unscaled (consumer chooses dB,
|
|
1002
|
+
* normalisation, smoothing).
|
|
1003
|
+
*/
|
|
1004
|
+
fft: ArrayBuffer;
|
|
1005
|
+
/**
|
|
1006
|
+
* Float32 raw pre-window time-domain PCM samples, length = `fftSize`.
|
|
1007
|
+
* Present iff the subscribe `config.includeSamples === true`. The
|
|
1008
|
+
* Hann window applied internally for the FFT does NOT touch this
|
|
1009
|
+
* payload — consumers receive the same mono-mixed samples that fed
|
|
1010
|
+
* the FFT, suitable for oscilloscope / Lissajous / waveform displays.
|
|
1011
|
+
*
|
|
1012
|
+
* Samples are post-EQ on iOS (the FFT tap sits inside the Equalizer
|
|
1013
|
+
* chain) and pre-EQ on Android (the Tee sits inside the AudioSink
|
|
1014
|
+
* processor chain, before the OS-level audiofx Equalizer applies).
|
|
1015
|
+
* Consumers comparing visualisations across platforms should account
|
|
1016
|
+
* for this asymmetry — the iOS visualiser shows the EQ-shaped signal
|
|
1017
|
+
* the user hears; the Android one shows the pre-EQ source PCM.
|
|
1018
|
+
*/
|
|
1019
|
+
samples?: ArrayBuffer;
|
|
1020
|
+
/** Stream sample rate in Hz (44100, 48000, …). */
|
|
1021
|
+
sampleRate: number;
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Why a Visualizer subscription cannot deliver frames. The library
|
|
1025
|
+
* does not request `RECORD_AUDIO` on Android — the FFT reads the
|
|
1026
|
+
* app's own decoded PCM via Media3's TeeAudioProcessor, so denial of
|
|
1027
|
+
* any OS audio-capture permission is irrelevant.
|
|
1028
|
+
*
|
|
1029
|
+
* Currently emitted:
|
|
1030
|
+
* - `hls-source`: iOS only — `MTAudioProcessingTap` does not fire for
|
|
1031
|
+
* `.m3u8` HLS sources, so the FFT tap can't see the audio.
|
|
1032
|
+
*
|
|
1033
|
+
* Reserved (declared but not currently emitted by either platform —
|
|
1034
|
+
* kept in the union so the codegen continues to emit a non-trivial
|
|
1035
|
+
* enum and consumer apps can prepare exhaustive switches that future-
|
|
1036
|
+
* proof against the implementation surfacing them):
|
|
1037
|
+
* - `no-active-track`: would fire on subscribe-before-setQueue.
|
|
1038
|
+
* - `engine-released`: would fire on engine teardown mid-subscription.
|
|
1039
|
+
*/
|
|
1040
|
+
export type VisualizerErrorReason = 'hls-source' | 'no-active-track' | 'engine-released' | 'visualization-disabled';
|
|
1041
|
+
/**
|
|
1042
|
+
* Cast protocol family. `local` is the on-device output route (speaker,
|
|
1043
|
+
* headphones, BT — the OS handles routing within this bucket). The
|
|
1044
|
+
* remote protocols (`airplay`, `chromecast`, `dlna`, `sonos`) carry the
|
|
1045
|
+
* lib's cast surface. `dlna` + `sonos` are reserved for future backends;
|
|
1046
|
+
* native implementations advertise actual support via
|
|
1047
|
+
* `CastManager.getSupportedProtocols()`.
|
|
1048
|
+
*/
|
|
1049
|
+
export type CastProtocol = 'local' | 'airplay' | 'chromecast' | 'dlna' | 'sonos';
|
|
1050
|
+
/**
|
|
1051
|
+
* How the sender delivers audio to the receiver.
|
|
1052
|
+
*
|
|
1053
|
+
* - `pushPcm`: sender encodes + transmits PCM frames (AirPlay 1/2). Local
|
|
1054
|
+
* playback engine continues to schedule and decode; only the audio sink
|
|
1055
|
+
* swaps. Crossfade engine MUST degrade to gapless under push-PCM (the
|
|
1056
|
+
* wire protocol has no sender-side cross-stream mixing).
|
|
1057
|
+
* - `pullUrl`: receiver fetches a URL the sender supplies (Chromecast,
|
|
1058
|
+
* DLNA, Sonos). Local engine pauses; remote engine takes over scheduling
|
|
1059
|
+
* + transport.
|
|
1060
|
+
*/
|
|
1061
|
+
export type CastStreamingModel = 'pushPcm' | 'pullUrl';
|
|
1062
|
+
/** Hint to the picker UI for which icon to show. Strings are stable. */
|
|
1063
|
+
export type CastDeviceKind = 'phone' | 'speaker' | 'tv' | 'display' | 'speakerGroup' | 'unknown';
|
|
1064
|
+
/**
|
|
1065
|
+
* Reason an active cast session ended without an explicit `disconnect()`.
|
|
1066
|
+
* Advisory — the app resumes local playback regardless.
|
|
1067
|
+
*/
|
|
1068
|
+
export type CastSessionEndReason = 'userDisconnect' | 'stolen' | 'networkLoss' | 'suspended' | 'ended' | 'feedbackTimeout' | 'authFailed' | 'unknown';
|
|
1069
|
+
/**
|
|
1070
|
+
* iOS Local Network permission state. Android always returns `granted`.
|
|
1071
|
+
*/
|
|
1072
|
+
export type CastLocalNetworkPermission = 'undetermined' | 'granted' | 'denied';
|
|
1073
|
+
/**
|
|
1074
|
+
* Receiver capability bag. Drives picker UI decisions without protocol
|
|
1075
|
+
* branching — e.g. show a volume slider iff `supportsRemoteVolume`.
|
|
1076
|
+
*/
|
|
1077
|
+
export interface CastReceiverCapabilities {
|
|
1078
|
+
supportsRemoteVolume: boolean;
|
|
1079
|
+
streamingModel: CastStreamingModel;
|
|
1080
|
+
/**
|
|
1081
|
+
* True for AirPlay 2 (PIN/password pair-setup on first connect; persisted
|
|
1082
|
+
* auth key on subsequent connects). False for AirPlay 1 (legacy RSA),
|
|
1083
|
+
* Chromecast, DLNA, Sonos.
|
|
1084
|
+
*/
|
|
1085
|
+
requiresPairing: boolean;
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* A discovered receiver in the local-network device list. Stable id
|
|
1089
|
+
* namespaces by protocol (`"airplay:<mac>"`, `"chromecast:<deviceId>"`)
|
|
1090
|
+
* so the JS layer can de-dupe across discovery refreshes.
|
|
1091
|
+
*
|
|
1092
|
+
* `castProtocol` is named so (not `protocol`) because `protocol` is a
|
|
1093
|
+
* Swift-reserved keyword and Nitrogen's codegen doesn't escape it.
|
|
1094
|
+
* See NOTES.md §1.8.
|
|
1095
|
+
*/
|
|
1096
|
+
export interface CastReceiver {
|
|
1097
|
+
id: string;
|
|
1098
|
+
castProtocol: CastProtocol;
|
|
1099
|
+
name: string;
|
|
1100
|
+
iconHint: CastDeviceKind;
|
|
1101
|
+
capabilities: CastReceiverCapabilities;
|
|
1102
|
+
/** `"1"` / `"2"` for AirPlay; empty string when not applicable. */
|
|
1103
|
+
protocolVersion: string;
|
|
1104
|
+
/** Vendor model hint (e.g. `"HomePod"`, `"AppleTV5,3"`); empty if unknown. */
|
|
1105
|
+
modelName: string;
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* The currently active audio route. `castProtocol === 'local'` means the
|
|
1109
|
+
* OS is routing to the on-device output stack (speaker, headphones, BT,
|
|
1110
|
+
* or system-managed AirPlay on iOS); `receiverId` is empty in that case.
|
|
1111
|
+
*/
|
|
1112
|
+
export interface CastRoute {
|
|
1113
|
+
castProtocol: CastProtocol;
|
|
1114
|
+
/** Empty string when `castProtocol === 'local'`. */
|
|
1115
|
+
receiverId: string;
|
|
1116
|
+
name: string;
|
|
1117
|
+
iconHint: CastDeviceKind;
|
|
1118
|
+
capabilities: CastReceiverCapabilities;
|
|
1119
|
+
/** `"1"` / `"2"` for AirPlay; empty string when not applicable. */
|
|
1120
|
+
protocolVersion: string;
|
|
1121
|
+
}
|
|
1122
|
+
export interface CastDiscoveryState {
|
|
1123
|
+
isDiscovering: boolean;
|
|
1124
|
+
}
|
|
1125
|
+
export interface CastSessionDiedEvent {
|
|
1126
|
+
/** Empty string if the session never reached connected state. */
|
|
1127
|
+
receiverId: string;
|
|
1128
|
+
reason: CastSessionEndReason;
|
|
1129
|
+
}
|
|
1130
|
+
export interface CastLocalNetworkPermissionEvent {
|
|
1131
|
+
state: CastLocalNetworkPermission;
|
|
1132
|
+
}
|
|
1133
|
+
/**
|
|
1134
|
+
* Options passed to `CastManager.connect`. AirPlay 1/2 pairing supplies
|
|
1135
|
+
* `password` on the second-phase connect (after the initial `authFailed`
|
|
1136
|
+
* rejection). Chromecast ignores the field.
|
|
1137
|
+
*/
|
|
1138
|
+
export interface CastConnectOptions {
|
|
1139
|
+
password: string;
|
|
1140
|
+
}
|
|
1141
|
+
/**
|
|
1142
|
+
* Configuration for {@link CastManager.configure}.
|
|
1143
|
+
*
|
|
1144
|
+
* @property deviceName Name advertised to receivers in the AirPlay RTSP
|
|
1145
|
+
* handshake (`X-Apple-Client-Name`) and shown on approval dialogs /
|
|
1146
|
+
* now-playing. Falls back to the OS device name when empty. No effect on
|
|
1147
|
+
* Chromecast.
|
|
1148
|
+
* @property hideAirPlayComputers Hide AirPlay receivers running on Mac
|
|
1149
|
+
* computers (model `Mac*` / `iMac*`) from discovery. macOS AirPlay
|
|
1150
|
+
* Receiver only accepts Apple senders on the same Apple ID, so it is
|
|
1151
|
+
* un-connectable from this library — surfacing it is a dead picker entry.
|
|
1152
|
+
* Defaults to `true`. Android-only: iOS AirPlay routing is OS-managed, so
|
|
1153
|
+
* the flag is ignored there.
|
|
1154
|
+
*/
|
|
1155
|
+
export interface CastConfigureOptions {
|
|
1156
|
+
deviceName: string;
|
|
1157
|
+
hideAirPlayComputers?: boolean;
|
|
1158
|
+
}
|
|
1159
|
+
/**
|
|
1160
|
+
* Active audio output classification. Cross-platform; covers on-device
|
|
1161
|
+
* outputs (phone speaker, BT, wired, USB, HDMI) AND cast targets. Picker
|
|
1162
|
+
* UIs read this to show "currently playing on AirPods" regardless of
|
|
1163
|
+
* whether cast discovery is running.
|
|
1164
|
+
*
|
|
1165
|
+
* - `speaker`: phone built-in loudspeaker.
|
|
1166
|
+
* - `receiver`: phone earpiece (voice-call speaker; rare for music).
|
|
1167
|
+
* - `wired`: 3.5mm / lightning / USB-C analog headphones, dock line-out.
|
|
1168
|
+
* - `usb`: USB DAC / USB-C digital headphones.
|
|
1169
|
+
* - `hdmi`: HDMI / HDMI-ARC / HDMI-eARC.
|
|
1170
|
+
* - `bluetoothA2DP`: classic Bluetooth audio profile.
|
|
1171
|
+
* - `bluetoothLE`: LE Audio / hearing aids / BLE speaker/broadcast.
|
|
1172
|
+
* - `bluetoothHFP`: Bluetooth hands-free profile (SCO).
|
|
1173
|
+
* - `carPlay`: iOS-only; phone is projecting audio via CarPlay.
|
|
1174
|
+
* - `androidAuto`: Android-only; audio routed to an automotive bus
|
|
1175
|
+
* (AOSP `TYPE_BUS`). Phone-projected Android Auto over BT is
|
|
1176
|
+
* indistinguishable from regular A2DP at the OS layer + reports as
|
|
1177
|
+
* `bluetoothA2DP`.
|
|
1178
|
+
* - `airplay`: active AirPlay route (iOS OS-managed; Android lib-managed).
|
|
1179
|
+
* - `chromecast`: active Chromecast session.
|
|
1180
|
+
* - `unknown`: unrecognised output type.
|
|
1181
|
+
*/
|
|
1182
|
+
export type AudioRouteKind = 'speaker' | 'receiver' | 'wired' | 'usb' | 'hdmi' | 'bluetoothA2DP' | 'bluetoothLE' | 'bluetoothHFP' | 'carPlay' | 'androidAuto' | 'airplay' | 'chromecast' | 'unknown';
|
|
1183
|
+
/**
|
|
1184
|
+
* Snapshot of the currently active audio output. Read via
|
|
1185
|
+
* `CastManager.getCurrentAudioRoute()`; observed via
|
|
1186
|
+
* `CastManager.onAudioRouteChange()` or the `useAudioRoute()` hook.
|
|
1187
|
+
*
|
|
1188
|
+
* The route is independent of cast discovery state — knowing what BT
|
|
1189
|
+
* headphones the user has connected does not require a cast scan.
|
|
1190
|
+
*/
|
|
1191
|
+
export interface AudioRoute {
|
|
1192
|
+
kind: AudioRouteKind;
|
|
1193
|
+
/** User-facing name (e.g. `"AirPods Pro"`, `"Living Room"`, `"Phone speaker"`). */
|
|
1194
|
+
name: string;
|
|
1195
|
+
/**
|
|
1196
|
+
* Stable id when one exists (BT MAC address, cast `receiverId`); empty
|
|
1197
|
+
* string otherwise. Not guaranteed unique across reboots; consumers use
|
|
1198
|
+
* it for picker-row deduplication during a single discovery cycle.
|
|
1199
|
+
*
|
|
1200
|
+
* On Android 12+, BT MAC addresses require `BLUETOOTH_CONNECT` runtime
|
|
1201
|
+
* permission; without it `identifier` is empty for BT devices. Same
|
|
1202
|
+
* permission also gates the user-facing `name`.
|
|
1203
|
+
*/
|
|
1204
|
+
identifier: string;
|
|
1205
|
+
/** `true` when audio is going somewhere other than the phone's own speaker. */
|
|
1206
|
+
isExternal: boolean;
|
|
1207
|
+
/**
|
|
1208
|
+
* `true` when the OS handles the route swap (BT, wired, USB, HDMI,
|
|
1209
|
+
* iOS AirPlay). `false` for lib-managed routes (Android AirPlay,
|
|
1210
|
+
* Chromecast on both platforms) — the lib drives the audio sink swap
|
|
1211
|
+
* or remote engine for those.
|
|
1212
|
+
*/
|
|
1213
|
+
isSystemManaged: boolean;
|
|
1214
|
+
}
|
|
1215
|
+
//# sourceMappingURL=types.d.ts.map
|