@runanywhere/core 0.16.11 → 0.17.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/README.md +427 -0
- package/RunAnywhereCore.podspec +4 -4
- package/cpp/HybridRunAnywhereCore.cpp +10 -4
- package/cpp/bridges/TelemetryBridge.cpp +10 -3
- package/ios/.testlocal +0 -0
- package/nitrogen/generated/shared/c++/HybridRunAnywhereCoreSpec.hpp +1 -1
- package/package.json +12 -11
- package/src/Features/VoiceSession/AudioCaptureManager.ts +274 -109
- package/src/Features/VoiceSession/AudioPlaybackManager.ts +247 -59
- package/src/Features/VoiceSession/VoiceSessionHandle.ts +200 -133
- package/src/Public/Extensions/RunAnywhere+Audio.ts +688 -0
- package/src/Public/Extensions/RunAnywhere+VoiceSession.ts +15 -11
- package/src/Public/Extensions/index.ts +25 -0
- package/src/Public/RunAnywhere.ts +36 -14
- package/android/src/main/include/rac/backends/rac_llm_llamacpp.h +0 -218
- package/android/src/main/include/rac/backends/rac_stt_onnx.h +0 -99
- package/android/src/main/include/rac/backends/rac_stt_whispercpp.h +0 -153
- package/android/src/main/include/rac/backends/rac_tts_onnx.h +0 -71
- package/android/src/main/include/rac/backends/rac_vad_onnx.h +0 -84
- package/android/src/main/include/rac/core/capabilities/rac_lifecycle.h +0 -290
- package/android/src/main/include/rac/core/rac_analytics_events.h +0 -610
- package/android/src/main/include/rac/core/rac_audio_utils.h +0 -88
- package/android/src/main/include/rac/core/rac_component_types.h +0 -160
- package/android/src/main/include/rac/core/rac_core.h +0 -331
- package/android/src/main/include/rac/core/rac_error.h +0 -469
- package/android/src/main/include/rac/core/rac_events.h +0 -334
- package/android/src/main/include/rac/core/rac_logger.h +0 -416
- package/android/src/main/include/rac/core/rac_platform_adapter.h +0 -340
- package/android/src/main/include/rac/core/rac_sdk_state.h +0 -292
- package/android/src/main/include/rac/core/rac_structured_error.h +0 -594
- package/android/src/main/include/rac/core/rac_types.h +0 -264
- package/android/src/main/include/rac/features/llm/rac_llm.h +0 -17
- package/android/src/main/include/rac/features/llm/rac_llm_analytics.h +0 -188
- package/android/src/main/include/rac/features/llm/rac_llm_component.h +0 -228
- package/android/src/main/include/rac/features/llm/rac_llm_events.h +0 -215
- package/android/src/main/include/rac/features/llm/rac_llm_metrics.h +0 -402
- package/android/src/main/include/rac/features/llm/rac_llm_service.h +0 -163
- package/android/src/main/include/rac/features/llm/rac_llm_structured_output.h +0 -141
- package/android/src/main/include/rac/features/llm/rac_llm_types.h +0 -384
- package/android/src/main/include/rac/features/platform/rac_llm_platform.h +0 -204
- package/android/src/main/include/rac/features/platform/rac_tts_platform.h +0 -197
- package/android/src/main/include/rac/features/stt/rac_stt.h +0 -17
- package/android/src/main/include/rac/features/stt/rac_stt_analytics.h +0 -204
- package/android/src/main/include/rac/features/stt/rac_stt_component.h +0 -162
- package/android/src/main/include/rac/features/stt/rac_stt_events.h +0 -62
- package/android/src/main/include/rac/features/stt/rac_stt_service.h +0 -154
- package/android/src/main/include/rac/features/stt/rac_stt_types.h +0 -389
- package/android/src/main/include/rac/features/tts/rac_tts.h +0 -17
- package/android/src/main/include/rac/features/tts/rac_tts_analytics.h +0 -181
- package/android/src/main/include/rac/features/tts/rac_tts_component.h +0 -158
- package/android/src/main/include/rac/features/tts/rac_tts_events.h +0 -54
- package/android/src/main/include/rac/features/tts/rac_tts_service.h +0 -162
- package/android/src/main/include/rac/features/tts/rac_tts_types.h +0 -374
- package/android/src/main/include/rac/features/vad/rac_vad.h +0 -17
- package/android/src/main/include/rac/features/vad/rac_vad_analytics.h +0 -236
- package/android/src/main/include/rac/features/vad/rac_vad_component.h +0 -185
- package/android/src/main/include/rac/features/vad/rac_vad_energy.h +0 -443
- package/android/src/main/include/rac/features/vad/rac_vad_events.h +0 -76
- package/android/src/main/include/rac/features/vad/rac_vad_service.h +0 -167
- package/android/src/main/include/rac/features/vad/rac_vad_types.h +0 -244
- package/android/src/main/include/rac/features/voice_agent/rac_voice_agent.h +0 -612
- package/android/src/main/include/rac/infrastructure/device/rac_device_manager.h +0 -176
- package/android/src/main/include/rac/infrastructure/download/rac_download.h +0 -418
- package/android/src/main/include/rac/infrastructure/events/rac_events.h +0 -177
- package/android/src/main/include/rac/infrastructure/model_management/rac_model_assignment.h +0 -169
- package/android/src/main/include/rac/infrastructure/model_management/rac_model_paths.h +0 -258
- package/android/src/main/include/rac/infrastructure/model_management/rac_model_registry.h +0 -357
- package/android/src/main/include/rac/infrastructure/model_management/rac_model_strategy.h +0 -374
- package/android/src/main/include/rac/infrastructure/model_management/rac_model_types.h +0 -613
- package/android/src/main/include/rac/infrastructure/network/rac_api_types.h +0 -335
- package/android/src/main/include/rac/infrastructure/network/rac_auth_manager.h +0 -252
- package/android/src/main/include/rac/infrastructure/network/rac_dev_config.h +0 -85
- package/android/src/main/include/rac/infrastructure/network/rac_endpoints.h +0 -102
- package/android/src/main/include/rac/infrastructure/network/rac_environment.h +0 -220
- package/android/src/main/include/rac/infrastructure/network/rac_http_client.h +0 -233
- package/android/src/main/include/rac/infrastructure/storage/rac_storage_analyzer.h +0 -286
- package/android/src/main/include/rac/infrastructure/telemetry/rac_telemetry_manager.h +0 -206
- package/android/src/main/include/rac/infrastructure/telemetry/rac_telemetry_types.h +0 -234
- package/android/src/main/jniLibs/arm64-v8a/libc++_shared.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libomp.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/librac_commons.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/librunanywhere_jni.so +0 -0
- package/ios/Frameworks/RACommons.xcframework/Info.plist +0 -44
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/RACommons.h +0 -67
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_analytics_events.h +0 -610
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_api_types.h +0 -335
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_audio_utils.h +0 -88
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_auth_manager.h +0 -252
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_component_types.h +0 -160
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_core.h +0 -331
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_dev_config.h +0 -85
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_device_manager.h +0 -176
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_download.h +0 -418
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_endpoints.h +0 -102
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_environment.h +0 -220
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_error.h +0 -469
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_events.h +0 -177
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_http_client.h +0 -233
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_lifecycle.h +0 -290
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_analytics.h +0 -188
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_component.h +0 -228
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_events.h +0 -215
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_llamacpp.h +0 -218
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_metrics.h +0 -402
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_platform.h +0 -204
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_service.h +0 -163
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_structured_output.h +0 -141
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_types.h +0 -384
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_logger.h +0 -416
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_assignment.h +0 -169
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_paths.h +0 -258
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_registry.h +0 -357
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_strategy.h +0 -374
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_types.h +0 -613
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_platform_adapter.h +0 -340
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_sdk_state.h +0 -292
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_storage_analyzer.h +0 -286
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_structured_error.h +0 -594
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_analytics.h +0 -204
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_component.h +0 -162
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_events.h +0 -62
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_onnx.h +0 -99
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_service.h +0 -154
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_types.h +0 -389
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_whispercpp.h +0 -153
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_telemetry_manager.h +0 -206
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_telemetry_types.h +0 -234
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_analytics.h +0 -181
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_component.h +0 -158
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_events.h +0 -54
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_onnx.h +0 -71
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_platform.h +0 -197
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_service.h +0 -162
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_types.h +0 -374
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_types.h +0 -264
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_analytics.h +0 -236
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_component.h +0 -185
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_energy.h +0 -443
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_events.h +0 -76
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_onnx.h +0 -84
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_service.h +0 -167
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_types.h +0 -244
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_voice_agent.h +0 -612
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Info.plist +0 -11
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Modules/module.modulemap +0 -5
- package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/RACommons +0 -0
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/RACommons.h +0 -67
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_analytics_events.h +0 -610
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_api_types.h +0 -335
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_audio_utils.h +0 -88
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_auth_manager.h +0 -252
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_component_types.h +0 -160
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_core.h +0 -331
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_dev_config.h +0 -85
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_device_manager.h +0 -176
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_download.h +0 -418
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_endpoints.h +0 -102
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_environment.h +0 -220
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_error.h +0 -469
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_events.h +0 -177
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_http_client.h +0 -233
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_lifecycle.h +0 -290
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_analytics.h +0 -188
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_component.h +0 -228
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_events.h +0 -215
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_llamacpp.h +0 -218
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_metrics.h +0 -402
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_platform.h +0 -204
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_service.h +0 -163
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_structured_output.h +0 -141
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_types.h +0 -384
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_logger.h +0 -416
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_assignment.h +0 -169
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_paths.h +0 -258
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_registry.h +0 -357
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_strategy.h +0 -374
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_types.h +0 -613
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_platform_adapter.h +0 -340
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_sdk_state.h +0 -292
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_storage_analyzer.h +0 -286
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_structured_error.h +0 -594
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_analytics.h +0 -204
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_component.h +0 -162
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_events.h +0 -62
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_onnx.h +0 -99
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_service.h +0 -154
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_types.h +0 -389
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_whispercpp.h +0 -153
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_telemetry_manager.h +0 -206
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_telemetry_types.h +0 -234
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_analytics.h +0 -181
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_component.h +0 -158
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_events.h +0 -54
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_onnx.h +0 -71
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_platform.h +0 -197
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_service.h +0 -162
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_types.h +0 -374
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_types.h +0 -264
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad.h +0 -17
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_analytics.h +0 -236
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_component.h +0 -185
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_energy.h +0 -443
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_events.h +0 -76
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_onnx.h +0 -84
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_service.h +0 -167
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_types.h +0 -244
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_voice_agent.h +0 -612
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Info.plist +0 -11
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Modules/module.modulemap +0 -5
- package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/RACommons +0 -0
|
@@ -7,11 +7,34 @@
|
|
|
7
7
|
* Reference: sdk/runanywhere-swift/Sources/RunAnywhere/Features/TTS/Services/AudioPlaybackManager.swift
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { Platform, NativeModules } from 'react-native';
|
|
10
11
|
import { EventBus } from '../../Public/Events';
|
|
11
12
|
import { SDKLogger } from '../../Foundation/Logging/Logger/SDKLogger';
|
|
12
13
|
|
|
13
14
|
const logger = new SDKLogger('AudioPlaybackManager');
|
|
14
15
|
|
|
16
|
+
// Native iOS Audio Module
|
|
17
|
+
const NativeAudioModule = Platform.OS === 'ios' ? NativeModules.NativeAudioModule : null;
|
|
18
|
+
|
|
19
|
+
// Lazy load react-native-sound for Android
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
let Sound: any = null;
|
|
22
|
+
|
|
23
|
+
function getSound() {
|
|
24
|
+
if (Platform.OS === 'ios') return null;
|
|
25
|
+
if (!Sound) {
|
|
26
|
+
try {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
28
|
+
Sound = require('react-native-sound').default;
|
|
29
|
+
Sound.setCategory('Playback');
|
|
30
|
+
} catch {
|
|
31
|
+
logger.warning('react-native-sound not available');
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return Sound;
|
|
36
|
+
}
|
|
37
|
+
|
|
15
38
|
/**
|
|
16
39
|
* Playback state
|
|
17
40
|
*/
|
|
@@ -33,7 +56,6 @@ export type PlaybackErrorCallback = (error: Error) => void;
|
|
|
33
56
|
export interface PlaybackConfig {
|
|
34
57
|
/** Volume (0.0 - 1.0) */
|
|
35
58
|
volume?: number;
|
|
36
|
-
|
|
37
59
|
/** Playback rate multiplier */
|
|
38
60
|
rate?: number;
|
|
39
61
|
}
|
|
@@ -42,7 +64,9 @@ export interface PlaybackConfig {
|
|
|
42
64
|
* AudioPlaybackManager
|
|
43
65
|
*
|
|
44
66
|
* Handles audio playback for TTS and other audio output needs.
|
|
45
|
-
* Uses
|
|
67
|
+
* Uses platform-native audio APIs:
|
|
68
|
+
* - iOS: NativeAudioModule (AVAudioPlayer)
|
|
69
|
+
* - Android: react-native-sound
|
|
46
70
|
*/
|
|
47
71
|
export class AudioPlaybackManager {
|
|
48
72
|
private state: PlaybackState = 'idle';
|
|
@@ -50,9 +74,10 @@ export class AudioPlaybackManager {
|
|
|
50
74
|
private rate = 1.0;
|
|
51
75
|
private completionCallback: PlaybackCompletionCallback | null = null;
|
|
52
76
|
private errorCallback: PlaybackErrorCallback | null = null;
|
|
53
|
-
private currentAudioData: ArrayBuffer | null = null;
|
|
54
77
|
private playbackStartTime: number | null = null;
|
|
55
78
|
private playbackDuration: number | null = null;
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
+
private currentSound: any = null;
|
|
56
81
|
|
|
57
82
|
constructor(config: PlaybackConfig = {}) {
|
|
58
83
|
this.volume = config.volume ?? 1.0;
|
|
@@ -95,11 +120,12 @@ export class AudioPlaybackManager {
|
|
|
95
120
|
}
|
|
96
121
|
|
|
97
122
|
/**
|
|
98
|
-
* Play audio data
|
|
99
|
-
* @param audioData
|
|
123
|
+
* Play audio data (base64 PCM float32 from TTS)
|
|
124
|
+
* @param audioData Base64 encoded audio data from TTS synthesis
|
|
125
|
+
* @param sampleRate Sample rate of the audio (default: 22050)
|
|
100
126
|
* @returns Promise that resolves when playback completes
|
|
101
127
|
*/
|
|
102
|
-
async play(audioData: ArrayBuffer | string): Promise<void> {
|
|
128
|
+
async play(audioData: ArrayBuffer | string, sampleRate = 22050): Promise<void> {
|
|
103
129
|
if (this.state === 'playing') {
|
|
104
130
|
this.stop();
|
|
105
131
|
}
|
|
@@ -108,69 +134,47 @@ export class AudioPlaybackManager {
|
|
|
108
134
|
logger.info('Loading audio for playback...');
|
|
109
135
|
|
|
110
136
|
try {
|
|
111
|
-
// Convert base64
|
|
112
|
-
let
|
|
137
|
+
// Convert base64 PCM to WAV file
|
|
138
|
+
let wavPath: string;
|
|
113
139
|
if (typeof audioData === 'string') {
|
|
114
|
-
|
|
115
|
-
const binaryString = atob(audioData);
|
|
116
|
-
const bytes = new Uint8Array(binaryString.length);
|
|
117
|
-
for (let i = 0; i < binaryString.length; i++) {
|
|
118
|
-
bytes[i] = binaryString.charCodeAt(i);
|
|
119
|
-
}
|
|
120
|
-
data = bytes.buffer;
|
|
140
|
+
wavPath = await this.createWavFromPCMFloat32(audioData, sampleRate);
|
|
121
141
|
} else {
|
|
122
|
-
|
|
142
|
+
// ArrayBuffer - convert to base64 first
|
|
143
|
+
const base64 = this.arrayBufferToBase64(audioData);
|
|
144
|
+
wavPath = await this.createWavFromPCMFloat32(base64, sampleRate);
|
|
123
145
|
}
|
|
124
146
|
|
|
125
|
-
|
|
126
|
-
this.
|
|
127
|
-
|
|
128
|
-
// Estimate duration from audio data
|
|
129
|
-
// Assuming 16-bit PCM at 22050 Hz (common TTS output)
|
|
130
|
-
this.playbackDuration = data.byteLength / (22050 * 2);
|
|
131
|
-
|
|
132
|
-
this.state = 'playing';
|
|
133
|
-
logger.info(`Playing audio (${(data.byteLength / 1024).toFixed(1)} KB)`);
|
|
134
|
-
|
|
135
|
-
EventBus.publish('Voice', {
|
|
136
|
-
type: 'playbackStarted',
|
|
137
|
-
duration: this.playbackDuration,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
// In production, this would use actual audio playback APIs:
|
|
141
|
-
// - expo-av Audio.Sound
|
|
142
|
-
// - react-native-audio-api
|
|
143
|
-
// - or a custom native module
|
|
144
|
-
|
|
145
|
-
// For now, simulate playback completion after estimated duration
|
|
146
|
-
return new Promise((resolve, reject) => {
|
|
147
|
-
const timeoutMs = (this.playbackDuration ?? 1) * 1000 / this.rate;
|
|
148
|
-
|
|
149
|
-
setTimeout(() => {
|
|
150
|
-
if (this.state === 'playing') {
|
|
151
|
-
this.handlePlaybackComplete();
|
|
152
|
-
resolve();
|
|
153
|
-
} else if (this.state === 'error') {
|
|
154
|
-
reject(new Error('Playback failed'));
|
|
155
|
-
} else {
|
|
156
|
-
resolve(); // Stopped or paused
|
|
157
|
-
}
|
|
158
|
-
}, timeoutMs);
|
|
159
|
-
});
|
|
147
|
+
// Play the WAV file
|
|
148
|
+
await this.playFile(wavPath);
|
|
160
149
|
|
|
161
150
|
} catch (error) {
|
|
162
151
|
this.state = 'error';
|
|
163
|
-
|
|
164
|
-
|
|
152
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
153
|
+
logger.error(`Playback failed: ${err.message}`);
|
|
154
|
+
EventBus.publish('Voice', { type: 'playbackFailed', error: err.message });
|
|
155
|
+
|
|
156
|
+
if (this.errorCallback) {
|
|
157
|
+
this.errorCallback(err);
|
|
158
|
+
}
|
|
165
159
|
throw error;
|
|
166
160
|
}
|
|
167
161
|
}
|
|
168
162
|
|
|
169
163
|
/**
|
|
170
|
-
* Play audio from
|
|
164
|
+
* Play audio from file path
|
|
171
165
|
*/
|
|
172
|
-
async
|
|
173
|
-
|
|
166
|
+
async playFile(filePath: string): Promise<void> {
|
|
167
|
+
this.playbackStartTime = Date.now();
|
|
168
|
+
this.state = 'playing';
|
|
169
|
+
|
|
170
|
+
logger.info(`Playing audio file: ${filePath}`);
|
|
171
|
+
EventBus.publish('Voice', { type: 'playbackStarted' });
|
|
172
|
+
|
|
173
|
+
if (Platform.OS === 'ios') {
|
|
174
|
+
await this.playFileIOS(filePath);
|
|
175
|
+
} else {
|
|
176
|
+
await this.playFileAndroid(filePath);
|
|
177
|
+
}
|
|
174
178
|
}
|
|
175
179
|
|
|
176
180
|
/**
|
|
@@ -183,7 +187,14 @@ export class AudioPlaybackManager {
|
|
|
183
187
|
|
|
184
188
|
logger.info('Stopping playback');
|
|
185
189
|
this.state = 'stopped';
|
|
186
|
-
|
|
190
|
+
|
|
191
|
+
if (Platform.OS === 'ios' && NativeAudioModule) {
|
|
192
|
+
NativeAudioModule.stopPlayback().catch(() => {});
|
|
193
|
+
} else if (this.currentSound) {
|
|
194
|
+
this.currentSound.stop();
|
|
195
|
+
this.currentSound.release();
|
|
196
|
+
this.currentSound = null;
|
|
197
|
+
}
|
|
187
198
|
|
|
188
199
|
EventBus.publish('Voice', { type: 'playbackStopped' });
|
|
189
200
|
|
|
@@ -198,6 +209,13 @@ export class AudioPlaybackManager {
|
|
|
198
209
|
pause(): void {
|
|
199
210
|
if (this.state === 'playing') {
|
|
200
211
|
this.state = 'paused';
|
|
212
|
+
|
|
213
|
+
if (Platform.OS === 'ios' && NativeAudioModule) {
|
|
214
|
+
NativeAudioModule.pausePlayback().catch(() => {});
|
|
215
|
+
} else if (this.currentSound) {
|
|
216
|
+
this.currentSound.pause();
|
|
217
|
+
}
|
|
218
|
+
|
|
201
219
|
logger.info('Playback paused');
|
|
202
220
|
EventBus.publish('Voice', { type: 'playbackPaused' });
|
|
203
221
|
}
|
|
@@ -209,6 +227,13 @@ export class AudioPlaybackManager {
|
|
|
209
227
|
resume(): void {
|
|
210
228
|
if (this.state === 'paused') {
|
|
211
229
|
this.state = 'playing';
|
|
230
|
+
|
|
231
|
+
if (Platform.OS === 'ios' && NativeAudioModule) {
|
|
232
|
+
NativeAudioModule.resumePlayback().catch(() => {});
|
|
233
|
+
} else if (this.currentSound) {
|
|
234
|
+
this.currentSound.play();
|
|
235
|
+
}
|
|
236
|
+
|
|
212
237
|
logger.info('Playback resumed');
|
|
213
238
|
EventBus.publish('Voice', { type: 'playbackResumed' });
|
|
214
239
|
}
|
|
@@ -220,6 +245,9 @@ export class AudioPlaybackManager {
|
|
|
220
245
|
*/
|
|
221
246
|
setVolume(volume: number): void {
|
|
222
247
|
this.volume = Math.max(0, Math.min(1, volume));
|
|
248
|
+
if (this.currentSound) {
|
|
249
|
+
this.currentSound.setVolume(this.volume);
|
|
250
|
+
}
|
|
223
251
|
logger.debug(`Volume set to ${this.volume}`);
|
|
224
252
|
}
|
|
225
253
|
|
|
@@ -270,20 +298,93 @@ export class AudioPlaybackManager {
|
|
|
270
298
|
this.stop();
|
|
271
299
|
this.completionCallback = null;
|
|
272
300
|
this.errorCallback = null;
|
|
273
|
-
this.currentAudioData = null;
|
|
274
301
|
this.state = 'idle';
|
|
275
302
|
logger.info('AudioPlaybackManager cleaned up');
|
|
276
303
|
}
|
|
277
304
|
|
|
278
305
|
// Private methods
|
|
279
306
|
|
|
307
|
+
private async playFileIOS(filePath: string): Promise<void> {
|
|
308
|
+
if (!NativeAudioModule) {
|
|
309
|
+
throw new Error('NativeAudioModule not available');
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return new Promise((resolve, reject) => {
|
|
313
|
+
NativeAudioModule.playAudio(filePath)
|
|
314
|
+
.then((result: { duration: number }) => {
|
|
315
|
+
this.playbackDuration = result.duration;
|
|
316
|
+
|
|
317
|
+
// Wait for playback to complete
|
|
318
|
+
const checkInterval = setInterval(async () => {
|
|
319
|
+
if (this.state !== 'playing') {
|
|
320
|
+
clearInterval(checkInterval);
|
|
321
|
+
resolve();
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
try {
|
|
326
|
+
const status = await NativeAudioModule.getPlaybackStatus();
|
|
327
|
+
if (!status.isPlaying) {
|
|
328
|
+
clearInterval(checkInterval);
|
|
329
|
+
this.handlePlaybackComplete();
|
|
330
|
+
resolve();
|
|
331
|
+
}
|
|
332
|
+
} catch {
|
|
333
|
+
clearInterval(checkInterval);
|
|
334
|
+
this.handlePlaybackComplete();
|
|
335
|
+
resolve();
|
|
336
|
+
}
|
|
337
|
+
}, 100);
|
|
338
|
+
})
|
|
339
|
+
.catch((error: Error) => {
|
|
340
|
+
this.state = 'error';
|
|
341
|
+
reject(error);
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
private async playFileAndroid(filePath: string): Promise<void> {
|
|
347
|
+
const SoundClass = getSound();
|
|
348
|
+
if (!SoundClass) {
|
|
349
|
+
throw new Error('react-native-sound not available');
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return new Promise((resolve, reject) => {
|
|
353
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
354
|
+
this.currentSound = new SoundClass(filePath, '', (error: any) => {
|
|
355
|
+
if (error) {
|
|
356
|
+
this.state = 'error';
|
|
357
|
+
reject(error);
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
this.playbackDuration = this.currentSound.getDuration();
|
|
362
|
+
this.currentSound.setVolume(this.volume);
|
|
363
|
+
|
|
364
|
+
this.currentSound.play((success: boolean) => {
|
|
365
|
+
if (this.currentSound) {
|
|
366
|
+
this.currentSound.release();
|
|
367
|
+
this.currentSound = null;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (success) {
|
|
371
|
+
this.handlePlaybackComplete();
|
|
372
|
+
resolve();
|
|
373
|
+
} else {
|
|
374
|
+
this.state = 'error';
|
|
375
|
+
reject(new Error('Playback failed'));
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
|
|
280
382
|
private handlePlaybackComplete(): void {
|
|
281
383
|
const duration = this.playbackStartTime
|
|
282
384
|
? (Date.now() - this.playbackStartTime) / 1000
|
|
283
385
|
: 0;
|
|
284
386
|
|
|
285
387
|
this.state = 'idle';
|
|
286
|
-
this.currentAudioData = null;
|
|
287
388
|
this.playbackStartTime = null;
|
|
288
389
|
|
|
289
390
|
logger.info(`Playback completed (${duration.toFixed(2)}s)`);
|
|
@@ -297,4 +398,91 @@ export class AudioPlaybackManager {
|
|
|
297
398
|
this.completionCallback();
|
|
298
399
|
}
|
|
299
400
|
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Convert base64 PCM float32 audio to WAV file
|
|
404
|
+
* TTS output is base64-encoded float32 PCM samples
|
|
405
|
+
*/
|
|
406
|
+
private async createWavFromPCMFloat32(audioBase64: string, sampleRate: number): Promise<string> {
|
|
407
|
+
// Decode base64 to get raw bytes
|
|
408
|
+
const binaryString = atob(audioBase64);
|
|
409
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
410
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
411
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// Convert float32 samples to int16 (WAV compatible)
|
|
415
|
+
const floatView = new Float32Array(bytes.buffer);
|
|
416
|
+
const numSamples = floatView.length;
|
|
417
|
+
const int16Samples = new Int16Array(numSamples);
|
|
418
|
+
|
|
419
|
+
for (let i = 0; i < numSamples; i++) {
|
|
420
|
+
const floatSample = floatView[i] ?? 0;
|
|
421
|
+
const sample = Math.max(-1, Math.min(1, floatSample));
|
|
422
|
+
int16Samples[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Create WAV header (44 bytes)
|
|
426
|
+
const wavDataSize = int16Samples.length * 2;
|
|
427
|
+
const wavBuffer = new ArrayBuffer(44 + wavDataSize);
|
|
428
|
+
const wavView = new DataView(wavBuffer);
|
|
429
|
+
|
|
430
|
+
// RIFF header
|
|
431
|
+
this.writeString(wavView, 0, 'RIFF');
|
|
432
|
+
wavView.setUint32(4, 36 + wavDataSize, true);
|
|
433
|
+
this.writeString(wavView, 8, 'WAVE');
|
|
434
|
+
|
|
435
|
+
// fmt chunk
|
|
436
|
+
this.writeString(wavView, 12, 'fmt ');
|
|
437
|
+
wavView.setUint32(16, 16, true);
|
|
438
|
+
wavView.setUint16(20, 1, true); // PCM
|
|
439
|
+
wavView.setUint16(22, 1, true); // mono
|
|
440
|
+
wavView.setUint32(24, sampleRate, true);
|
|
441
|
+
wavView.setUint32(28, sampleRate * 2, true);
|
|
442
|
+
wavView.setUint16(32, 2, true);
|
|
443
|
+
wavView.setUint16(34, 16, true);
|
|
444
|
+
|
|
445
|
+
// data chunk
|
|
446
|
+
this.writeString(wavView, 36, 'data');
|
|
447
|
+
wavView.setUint32(40, wavDataSize, true);
|
|
448
|
+
|
|
449
|
+
// Copy audio data
|
|
450
|
+
const wavBytes = new Uint8Array(wavBuffer);
|
|
451
|
+
const int16Bytes = new Uint8Array(int16Samples.buffer);
|
|
452
|
+
for (let i = 0; i < int16Bytes.length; i++) {
|
|
453
|
+
wavBytes[44 + i] = int16Bytes[i]!;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Write to file
|
|
457
|
+
try {
|
|
458
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
459
|
+
const RNFS = require('react-native-fs');
|
|
460
|
+
const fileName = `tts_${Date.now()}.wav`;
|
|
461
|
+
const filePath = `${RNFS.CachesDirectoryPath}/${fileName}`;
|
|
462
|
+
|
|
463
|
+
const wavBase64 = this.arrayBufferToBase64(wavBuffer);
|
|
464
|
+
await RNFS.writeFile(filePath, wavBase64, 'base64');
|
|
465
|
+
|
|
466
|
+
logger.info(`WAV file created: ${filePath}`);
|
|
467
|
+
return filePath;
|
|
468
|
+
} catch (error) {
|
|
469
|
+
logger.error(`Failed to create WAV file: ${error}`);
|
|
470
|
+
throw error;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
private writeString(view: DataView, offset: number, str: string): void {
|
|
475
|
+
for (let i = 0; i < str.length; i++) {
|
|
476
|
+
view.setUint8(offset + i, str.charCodeAt(i));
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
private arrayBufferToBase64(buffer: ArrayBuffer): string {
|
|
481
|
+
const bytes = new Uint8Array(buffer);
|
|
482
|
+
let binary = '';
|
|
483
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
484
|
+
binary += String.fromCharCode(bytes[i]!);
|
|
485
|
+
}
|
|
486
|
+
return btoa(binary);
|
|
487
|
+
}
|
|
300
488
|
}
|