@siteed/expo-audio-stream 1.1.17 → 1.2.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.
Files changed (402) hide show
  1. package/.cursorrules +112 -0
  2. package/CHANGELOG.md +13 -17
  3. package/README.md +5 -0
  4. package/android/build/.transforms/78826170c90a6133e31ab67915bce724/transformed/classes/classes_dex/classes.dex +0 -0
  5. package/android/build/.transforms/7c8f45a7979f7f92ba944aa5701c97dc/transformed/classes/classes_dex/classes.dex +0 -0
  6. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioFormatInfo.dex +0 -0
  7. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioFormatUtils.dex +0 -0
  8. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioNotificationManager$Companion.dex +0 -0
  9. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioNotificationManager.dex +0 -0
  10. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$AudioData.dex +0 -0
  11. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$Companion.dex +0 -0
  12. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$extractMFCC$powerSpectrum$2.dex +0 -0
  13. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor.dex +0 -0
  14. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecorderManager$Companion.dex +0 -0
  15. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecorderManager.dex +0 -0
  16. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecordingService$Companion.dex +0 -0
  17. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecordingService$notificationManager$2.dex +0 -0
  18. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecordingService.dex +0 -0
  19. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$1.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$1.dex} +0 -0
  20. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$10.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$10.dex} +0 -0
  21. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$11.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$11.dex} +0 -0
  22. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$12.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$12.dex} +0 -0
  23. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$13.dex +0 -0
  24. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$17.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$14.dex} +0 -0
  25. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$15.dex +0 -0
  26. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$16.dex +0 -0
  27. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$17.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$17.dex} +0 -0
  28. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$18.dex +0 -0
  29. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$19.dex +0 -0
  30. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$5.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$2.dex} +0 -0
  31. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$14.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$20.dex} +0 -0
  32. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$21.dex +0 -0
  33. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$22.dex +0 -0
  34. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$11.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$23.dex} +0 -0
  35. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$24.dex +0 -0
  36. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$3.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$3.dex} +0 -0
  37. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$4.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$4.dex} +0 -0
  38. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$5.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$5.dex} +0 -0
  39. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$6.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$6.dex} +0 -0
  40. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$7.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$7.dex} +0 -0
  41. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$2.dex → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$8.dex} +0 -0
  42. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$9.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$9.dex} +0 -0
  43. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$1.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.dex} +0 -0
  44. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$2.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.dex} +0 -0
  45. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$3.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.dex} +0 -0
  46. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.dex +0 -0
  47. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$1.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$1.dex} +0 -0
  48. package/android/build/.transforms/{99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$2.dex → dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$2.dex} +0 -0
  49. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule.dex +0 -0
  50. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/NotificationAction.dex +0 -0
  51. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/NotificationConfig$Companion.dex +0 -0
  52. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/NotificationConfig.dex +0 -0
  53. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/PermissionUtils.dex +0 -0
  54. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingActionReceiver$Companion.dex +0 -0
  55. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingActionReceiver$handleRecordingAction$notificationPromise$1.dex +0 -0
  56. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingActionReceiver.dex +0 -0
  57. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingConfig$Companion.dex +0 -0
  58. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingConfig.dex +0 -0
  59. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/RecordingConfigKt.dex +0 -0
  60. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformConfig.dex +0 -0
  61. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformRenderer$RenderConfig$Companion.dex +0 -0
  62. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformRenderer$RenderConfig.dex +0 -0
  63. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformRenderer$Style.dex +0 -0
  64. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformRenderer$WhenMappings.dex +0 -0
  65. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/WaveformRenderer.dex +0 -0
  66. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +23 -2
  67. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  68. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  69. package/android/build/intermediates/compile_symbol_list/debug/R.txt +11 -0
  70. package/android/build/intermediates/compiled_local_resources/debug/out/drawable_ic_default_action_icon.xml.flat +0 -0
  71. package/android/build/intermediates/compiled_local_resources/debug/out/drawable_ic_microphone.xml.flat +0 -0
  72. package/android/build/intermediates/compiled_local_resources/debug/out/drawable_ic_pause.xml.flat +0 -0
  73. package/android/build/intermediates/compiled_local_resources/debug/out/drawable_ic_play.xml.flat +0 -0
  74. package/android/build/intermediates/compiled_local_resources/debug/out/drawable_ic_stop.xml.flat +0 -0
  75. package/android/build/intermediates/compiled_local_resources/debug/out/layout_notification_recording.xml.flat +0 -0
  76. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +8 -1
  77. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +1 -1
  78. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  79. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  80. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  81. package/android/build/intermediates/java_res/debug/out/META-INF/siteed-expo-audio-stream_debug.kotlin_module +0 -0
  82. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +11 -0
  83. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +51 -8
  84. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +23 -2
  85. package/android/build/intermediates/packaged_res/debug/drawable/ic_default_action_icon.xml +16 -0
  86. package/android/build/intermediates/packaged_res/debug/drawable/ic_microphone.xml +13 -0
  87. package/android/build/intermediates/packaged_res/debug/drawable/ic_pause.xml +10 -0
  88. package/android/build/intermediates/packaged_res/debug/drawable/ic_play.xml +10 -0
  89. package/android/build/intermediates/packaged_res/debug/drawable/ic_stop.xml +10 -0
  90. package/android/build/intermediates/packaged_res/debug/layout/notification_recording.xml +37 -0
  91. package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/siteed-expo-audio-stream_debug.kotlin_module +0 -0
  92. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioFormatInfo.class +0 -0
  93. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioFormatUtils.class +0 -0
  94. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioNotificationManager$Companion.class +0 -0
  95. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioNotificationManager.class +0 -0
  96. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioProcessor$AudioData.class +0 -0
  97. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioProcessor$Companion.class +0 -0
  98. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioProcessor$extractMFCC$powerSpectrum$2.class +0 -0
  99. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioProcessor.class +0 -0
  100. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioRecorderManager$Companion.class +0 -0
  101. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioRecorderManager.class +0 -0
  102. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioRecordingService$Companion.class +0 -0
  103. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioRecordingService$notificationManager$2.class +0 -0
  104. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/AudioRecordingService.class +0 -0
  105. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$1.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$1.class} +0 -0
  106. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$10.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$10.class} +0 -0
  107. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$11.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$11.class} +0 -0
  108. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$12.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$12.class} +0 -0
  109. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$13.class +0 -0
  110. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$14.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$14.class} +0 -0
  111. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$15.class +0 -0
  112. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$16.class +0 -0
  113. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$17.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$17.class} +0 -0
  114. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$18.class +0 -0
  115. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$19.class +0 -0
  116. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$5.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$2.class} +0 -0
  117. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$11.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$20.class} +0 -0
  118. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$21.class +0 -0
  119. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$22.class +0 -0
  120. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$23.class +0 -0
  121. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$24.class +0 -0
  122. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$3.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$3.class} +0 -0
  123. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$4.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$4.class} +0 -0
  124. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$8.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$5.class} +0 -0
  125. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$6.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$6.class} +0 -0
  126. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$7.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$7.class} +0 -0
  127. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$2.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$8.class} +0 -0
  128. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$9.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$9.class} +0 -0
  129. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$1.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.class} +0 -0
  130. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$2.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.class} +0 -0
  131. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$3.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.class} +0 -0
  132. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$4.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.class} +0 -0
  133. package/android/build/{tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$1.class → intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$1.class} +0 -0
  134. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$2.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$2.class} +0 -0
  135. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule.class +0 -0
  136. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/NotificationAction.class +0 -0
  137. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/NotificationConfig$Companion.class +0 -0
  138. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/NotificationConfig.class +0 -0
  139. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/PermissionUtils.class +0 -0
  140. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingActionReceiver$Companion.class +0 -0
  141. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingActionReceiver$handleRecordingAction$notificationPromise$1.class +0 -0
  142. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingActionReceiver.class +0 -0
  143. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingConfig$Companion.class +0 -0
  144. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingConfig.class +0 -0
  145. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/RecordingConfigKt.class +0 -0
  146. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformConfig.class +0 -0
  147. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformRenderer$RenderConfig$Companion.class +0 -0
  148. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformRenderer$RenderConfig.class +0 -0
  149. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformRenderer$Style.class +0 -0
  150. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformRenderer$WhenMappings.class +0 -0
  151. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/WaveformRenderer.class +0 -0
  152. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  153. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +11 -0
  154. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  155. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  156. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  157. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  158. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  159. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  160. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  161. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  162. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  163. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  164. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  165. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  166. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  167. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  168. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  169. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  170. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  171. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  172. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  173. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  174. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  175. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  176. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  177. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  178. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  179. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  180. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  181. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  182. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  183. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  184. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
  185. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
  186. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
  187. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
  188. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
  189. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
  190. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
  191. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  192. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  193. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  194. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  195. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  196. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  197. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  198. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  199. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  200. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  201. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  202. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  203. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  204. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  205. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  206. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  207. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  208. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  209. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  210. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  211. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  212. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  213. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  214. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  215. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
  216. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  217. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  218. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  219. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  220. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  221. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  222. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  223. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  224. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  225. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  226. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  227. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  228. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  229. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  230. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  231. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  232. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  233. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  234. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  235. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  236. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  237. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  238. package/android/build/outputs/logs/manifest-merger-debug-report.txt +51 -7
  239. package/android/build/tmp/kotlin-classes/debug/META-INF/siteed-expo-audio-stream_debug.kotlin_module +0 -0
  240. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioFormatInfo.class +0 -0
  241. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioFormatUtils.class +0 -0
  242. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioNotificationManager$Companion.class +0 -0
  243. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioNotificationManager.class +0 -0
  244. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioProcessor$AudioData.class +0 -0
  245. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioProcessor$Companion.class +0 -0
  246. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioProcessor$extractMFCC$powerSpectrum$2.class +0 -0
  247. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioProcessor.class +0 -0
  248. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioRecorderManager$Companion.class +0 -0
  249. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioRecorderManager.class +0 -0
  250. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioRecordingService$Companion.class +0 -0
  251. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioRecordingService$notificationManager$2.class +0 -0
  252. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/AudioRecordingService.class +0 -0
  253. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$1.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$1.class} +0 -0
  254. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$10.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$10.class} +0 -0
  255. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$11.class +0 -0
  256. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$12.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$12.class} +0 -0
  257. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$13.class +0 -0
  258. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$14.class +0 -0
  259. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$15.class +0 -0
  260. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$16.class +0 -0
  261. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$17.class +0 -0
  262. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$18.class +0 -0
  263. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$19.class +0 -0
  264. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$2.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$2.class} +0 -0
  265. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$20.class +0 -0
  266. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$21.class +0 -0
  267. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$22.class +0 -0
  268. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$23.class +0 -0
  269. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$24.class +0 -0
  270. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$3.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$3.class} +0 -0
  271. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$4.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$4.class} +0 -0
  272. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$5.class +0 -0
  273. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$6.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$6.class} +0 -0
  274. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$7.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$7.class} +0 -0
  275. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$8.class +0 -0
  276. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$9.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunction$9.class} +0 -0
  277. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$1.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.class} +0 -0
  278. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$2.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.class} +0 -0
  279. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$3.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.class} +0 -0
  280. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$4.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.class} +0 -0
  281. package/android/build/{intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$1.class → tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$1.class} +0 -0
  282. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/{ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$2.class → ExpoAudioStreamModule$definition$lambda$16$$inlined$FunctionWithoutArgs$2.class} +0 -0
  283. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule.class +0 -0
  284. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/NotificationAction.class +0 -0
  285. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/NotificationConfig$Companion.class +0 -0
  286. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/NotificationConfig.class +0 -0
  287. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/PermissionUtils.class +0 -0
  288. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingActionReceiver$Companion.class +0 -0
  289. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingActionReceiver$handleRecordingAction$notificationPromise$1.class +0 -0
  290. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingActionReceiver.class +0 -0
  291. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingConfig$Companion.class +0 -0
  292. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingConfig.class +0 -0
  293. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/RecordingConfigKt.class +0 -0
  294. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformConfig.class +0 -0
  295. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformRenderer$RenderConfig$Companion.class +0 -0
  296. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformRenderer$RenderConfig.class +0 -0
  297. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformRenderer$Style.class +0 -0
  298. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformRenderer$WhenMappings.class +0 -0
  299. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/WaveformRenderer.class +0 -0
  300. package/android/src/main/AndroidManifest.xml +24 -2
  301. package/android/src/main/java/net/siteed/audiostream/AudioFormatUtils.kt +76 -1
  302. package/android/src/main/java/net/siteed/audiostream/AudioNotificationsManager.kt +362 -0
  303. package/android/src/main/java/net/siteed/audiostream/AudioProcessor.kt +8 -4
  304. package/android/src/main/java/net/siteed/audiostream/AudioRecorderManager.kt +477 -261
  305. package/android/src/main/java/net/siteed/audiostream/AudioRecordingService.kt +71 -0
  306. package/android/src/main/java/net/siteed/audiostream/ExpoAudioStreamModule.kt +78 -8
  307. package/android/src/main/java/net/siteed/audiostream/NotificationConfig.kt +70 -0
  308. package/android/src/main/java/net/siteed/audiostream/PermissionUtils.kt +41 -6
  309. package/android/src/main/java/net/siteed/audiostream/RecordingActionReceiver.kt +59 -0
  310. package/android/src/main/java/net/siteed/audiostream/RecordingConfig.kt +138 -1
  311. package/android/src/main/java/net/siteed/audiostream/WaveformConfig.kt +19 -0
  312. package/android/src/main/java/net/siteed/audiostream/WaveformRenderer.kt +159 -0
  313. package/android/src/main/res/drawable/ic_default_action_icon.xml +16 -0
  314. package/android/src/main/res/drawable/ic_microphone.xml +13 -0
  315. package/android/src/main/res/drawable/ic_pause.xml +10 -0
  316. package/android/src/main/res/drawable/ic_play.xml +10 -0
  317. package/android/src/main/res/drawable/ic_stop.xml +10 -0
  318. package/android/src/main/res/layout/notification_recording.xml +37 -0
  319. package/build/ExpoAudioStream.types.d.ts +36 -0
  320. package/build/ExpoAudioStream.types.d.ts.map +1 -1
  321. package/build/ExpoAudioStream.types.js.map +1 -1
  322. package/build/useAudioRecorder.d.ts.map +1 -1
  323. package/build/useAudioRecorder.js +32 -11
  324. package/build/useAudioRecorder.js.map +1 -1
  325. package/ios/AudioNotificationManager.swift +135 -0
  326. package/ios/AudioStreamManager.swift +387 -13
  327. package/ios/AudioStreamManagerDelegate.swift +4 -0
  328. package/ios/ExpoAudioStreamModule.swift +66 -38
  329. package/ios/NotificationExtension.swift +15 -0
  330. package/ios/RecordingSettings.swift +83 -5
  331. package/package.json +1 -1
  332. package/plugin/build/index.d.ts +1 -3
  333. package/plugin/build/index.js +103 -10
  334. package/plugin/src/index.ts +124 -21
  335. package/publish.sh +36 -3
  336. package/src/ExpoAudioStream.types.ts +108 -13
  337. package/src/useAudioRecorder.tsx +46 -12
  338. package/android/build/.transforms/871e87a512fbb418f6a6523c40225bac/results.bin +0 -1
  339. package/android/build/.transforms/871e87a512fbb418f6a6523c40225bac/transformed/classes/classes_dex/classes.dex +0 -0
  340. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/results.bin +0 -1
  341. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioAnalysisData$AmplitudeRange.dex +0 -0
  342. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioAnalysisData$SpeakerChange.dex +0 -0
  343. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioAnalysisData.dex +0 -0
  344. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioDataEncoder.dex +0 -0
  345. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioFileHandler.dex +0 -0
  346. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioFormatUtils.dex +0 -0
  347. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$AudioData.dex +0 -0
  348. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$Companion.dex +0 -0
  349. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor$extractMFCC$powerSpectrum$2.dex +0 -0
  350. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioProcessor.dex +0 -0
  351. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/AudioRecorderManager.dex +0 -0
  352. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/BuildConfig.dex +0 -0
  353. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/Constants.dex +0 -0
  354. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/DataPoint.dex +0 -0
  355. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/EventSender.dex +0 -0
  356. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$10.dex +0 -0
  357. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$12.dex +0 -0
  358. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$13.dex +0 -0
  359. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$15.dex +0 -0
  360. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$16.dex +0 -0
  361. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$18.dex +0 -0
  362. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$2.dex +0 -0
  363. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$4.dex +0 -0
  364. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$7.dex +0 -0
  365. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$8.dex +0 -0
  366. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$4.dex +0 -0
  367. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule.dex +0 -0
  368. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/FFT.dex +0 -0
  369. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/Features.dex +0 -0
  370. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/PermissionUtils.dex +0 -0
  371. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/debug_dex/net/siteed/audiostream/RecordingConfig.dex +0 -0
  372. package/android/build/.transforms/99bb16aff51bfafd6c73c1b96e3e0dcf/transformed/debug/desugar_graph.bin +0 -0
  373. package/android/build/.transforms/a758925c83c348fb1544431cf45e6a05/results.bin +0 -1
  374. package/android/build/.transforms/a758925c83c348fb1544431cf45e6a05/transformed/classes/classes_dex/classes.dex +0 -0
  375. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$1.dex +0 -0
  376. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$13.dex +0 -0
  377. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$14.dex +0 -0
  378. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$15.dex +0 -0
  379. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$16.dex +0 -0
  380. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$18.dex +0 -0
  381. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$3.dex +0 -0
  382. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$6.dex +0 -0
  383. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$8.dex +0 -0
  384. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$9.dex +0 -0
  385. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$1.dex +0 -0
  386. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$2.dex +0 -0
  387. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$3.dex +0 -0
  388. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunctionWithPromise$4.dex +0 -0
  389. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$1.dex +0 -0
  390. package/android/build/.transforms/dfac117b512a43872cc8ea7286b996cc/transformed/debug/debug_dex/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$FunctionWithoutArgs$2.dex +0 -0
  391. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$13.class +0 -0
  392. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$15.class +0 -0
  393. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$16.class +0 -0
  394. package/android/build/intermediates/runtime_library_classes_dir/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$18.class +0 -0
  395. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$13.class +0 -0
  396. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$14.class +0 -0
  397. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$15.class +0 -0
  398. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$16.class +0 -0
  399. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$17.class +0 -0
  400. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$18.class +0 -0
  401. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$5.class +0 -0
  402. package/android/build/tmp/kotlin-classes/debug/net/siteed/audiostream/ExpoAudioStreamModule$definition$lambda$14$$inlined$AsyncFunction$8.class +0 -0
@@ -1,6 +1,7 @@
1
1
  // net/siteed/audiostream/AudioRecorderManager.kt
2
2
  package net.siteed.audiostream
3
3
 
4
+ import android.annotation.SuppressLint
4
5
  import android.media.AudioFormat
5
6
  import android.media.AudioRecord
6
7
  import android.media.MediaRecorder
@@ -17,11 +18,14 @@ import java.io.ByteArrayOutputStream
17
18
  import java.io.File
18
19
  import java.io.FileOutputStream
19
20
  import java.io.IOException
20
- import java.io.Serializable
21
21
  import java.util.concurrent.atomic.AtomicBoolean
22
-
22
+ import android.os.PowerManager
23
+ import android.content.Context
24
+ import java.nio.ByteBuffer
25
+ import java.nio.ByteOrder
23
26
 
24
27
  class AudioRecorderManager(
28
+ private val context: Context,
25
29
  private val filesDir: File,
26
30
  private val permissionUtils: PermissionUtils,
27
31
  private val audioDataEncoder: AudioDataEncoder,
@@ -51,194 +55,86 @@ class AudioRecorderManager(
51
55
  private var audioProcessor: AudioProcessor = AudioProcessor(filesDir)
52
56
  private var isFirstChunk = true
53
57
 
54
- @RequiresApi(Build.VERSION_CODES.R)
55
- fun startRecording(options: Map<String, Any?>, promise: Promise) {
56
- if (!permissionUtils.checkRecordingPermission()) {
57
- promise.reject("PERMISSION_DENIED", "Recording permission has not been granted", null)
58
- return
59
- }
60
-
61
- if (isRecording.get() && !isPaused.get()) {
62
- promise.reject("ALREADY_RECORDING", "Recording is already in progress", null)
63
- return
58
+ private var wakeLock: PowerManager.WakeLock? = null
59
+ private var wasWakeLockEnabled = false
60
+ private val notificationManager = AudioNotificationManager.getInstance(context)
61
+
62
+ companion object {
63
+ @SuppressLint("StaticFieldLeak")
64
+ @Volatile
65
+ private var instance: AudioRecorderManager? = null
66
+
67
+ fun getInstance(): AudioRecorderManager? = instance
68
+
69
+ fun initialize(
70
+ context: Context,
71
+ filesDir: File,
72
+ permissionUtils: PermissionUtils,
73
+ audioDataEncoder: AudioDataEncoder,
74
+ eventSender: EventSender
75
+ ): AudioRecorderManager {
76
+ return instance ?: synchronized(this) {
77
+ instance ?: AudioRecorderManager(
78
+ context, filesDir, permissionUtils, audioDataEncoder, eventSender
79
+ ).also { instance = it }
80
+ }
64
81
  }
82
+ }
65
83
 
66
- // Extract and filter features
67
- val featuresMap = options["features"] as? Map<*, *>
68
- val features = featuresMap?.filterKeys { it is String }
69
- ?.filterValues { it is Boolean }
70
- ?.mapKeys { it.key as String }
71
- ?.mapValues { it.value as Boolean }
72
- ?: emptyMap()
73
-
74
- // Initialize the recording configuration
75
- var tempRecordingConfig = RecordingConfig(
76
- sampleRate = (options["sampleRate"] as? Number)?.toInt() ?: Constants.DEFAULT_SAMPLE_RATE,
77
- channels = (options["channels"] as? Number)?.toInt() ?: 1,
78
- encoding = options["encoding"] as? String ?: "pcm_16bit",
79
- interval = (options["interval"] as? Number)?.toLong() ?: Constants.DEFAULT_INTERVAL,
80
- enableProcessing = options["enableProcessing"] as? Boolean ?: false,
81
- pointsPerSecond = (options["pointsPerSecond"] as? Number)?.toDouble() ?: 20.0,
82
- algorithm = options["algorithm"] as? String ?: "rms",
83
- features = features
84
- )
85
- Log.d(Constants.TAG, "Initial recording configuration: $tempRecordingConfig")
84
+ @RequiresApi(Build.VERSION_CODES.R)
85
+ fun startRecording(options: Map<String, Any?>, promise: Promise) {
86
+ try {
87
+ Log.d(Constants.TAG, "Starting recording with options: $options")
86
88
 
87
- // Validate sample rate and channels
88
- if (tempRecordingConfig.sampleRate !in listOf(16000, 44100, 48000)) {
89
- promise.reject(
90
- "INVALID_SAMPLE_RATE",
91
- "Sample rate must be one of 16000, 44100, or 48000 Hz",
92
- null
93
- )
94
- return
95
- }
96
- if (tempRecordingConfig.channels !in 1..2) {
97
- promise.reject(
98
- "INVALID_CHANNELS",
99
- "Channels must be either 1 (Mono) or 2 (Stereo)",
100
- null
101
- )
102
- return
103
- }
89
+ // Check permissions
90
+ if (!checkPermissions(options, promise)) return
104
91
 
105
- // Set encoding and file extension
106
- var fileExtension = ".wav"
107
- audioFormat = when (tempRecordingConfig.encoding) {
108
- "pcm_8bit" -> {
109
- fileExtension = "wav"
110
- mimeType = "audio/wav"
111
- AudioFormat.ENCODING_PCM_8BIT
112
- }
113
- "pcm_16bit" -> {
114
- fileExtension = "wav"
115
- mimeType = "audio/wav"
116
- AudioFormat.ENCODING_PCM_16BIT
117
- }
118
- "pcm_32bit" -> {
119
- fileExtension = "wav"
120
- mimeType = "audio/wav"
121
- AudioFormat.ENCODING_PCM_FLOAT
122
- }
123
- "opus" -> {
124
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
125
- promise.reject(
126
- "UNSUPPORTED_FORMAT",
127
- "Opus encoding not supported on this Android version.",
128
- null
129
- )
130
- return
131
- }
132
- fileExtension = "opus"
133
- mimeType = "audio/opus"
134
- AudioFormat.ENCODING_OPUS
135
- }
136
- "aac_lc" -> {
137
- fileExtension = "aac"
138
- mimeType = "audio/aac"
139
- AudioFormat.ENCODING_AAC_LC
140
- }
141
- else -> {
142
- fileExtension = "wav"
143
- mimeType = "audio/wav"
144
- AudioFormat.ENCODING_DEFAULT
145
- }
146
- }
147
-
148
- // Check if selected audio format is supported
149
- if (!isAudioFormatSupported(tempRecordingConfig.sampleRate, tempRecordingConfig.channels, audioFormat)) {
150
- Log.e(Constants.TAG, "Selected audio format not supported, falling back to 16-bit PCM")
151
- audioFormat = AudioFormat.ENCODING_PCM_16BIT
152
- if (!isAudioFormatSupported(tempRecordingConfig.sampleRate, tempRecordingConfig.channels, audioFormat)) {
153
- promise.reject("INITIALIZATION_FAILED", "Failed to initialize audio recorder with any supported format", null)
92
+ // Check if already recording
93
+ if (isRecording.get() && !isPaused.get()) {
94
+ promise.reject("ALREADY_RECORDING", "Recording is already in progress", null)
154
95
  return
155
96
  }
156
- tempRecordingConfig = tempRecordingConfig.copy(encoding = "pcm_16bit")
157
- }
158
97
 
159
- // Update recordingConfig with potentially new encoding
160
- recordingConfig = tempRecordingConfig
161
-
162
- // Recalculate bufferSizeInBytes if the format has changed
163
- bufferSizeInBytes = AudioRecord.getMinBufferSize(
164
- recordingConfig.sampleRate,
165
- if (recordingConfig.channels == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
166
- audioFormat
167
- )
168
-
169
- if (bufferSizeInBytes == AudioRecord.ERROR || bufferSizeInBytes == AudioRecord.ERROR_BAD_VALUE || bufferSizeInBytes < 0) {
170
- Log.e(Constants.TAG, "Failed to get minimum buffer size, falling back to default buffer size.")
171
- bufferSizeInBytes = 4096 // Default buffer size in bytes
172
- }
173
-
174
- Log.d(Constants.TAG, "AudioFormat: $audioFormat, BufferSize: $bufferSizeInBytes")
175
-
176
- // Initialize the AudioRecord if it's a new recording or if it's not currently paused
177
- if (audioRecord == null || !isPaused.get()) {
178
- Log.d(Constants.TAG, "AudioFormat: $audioFormat, BufferSize: $bufferSizeInBytes")
179
-
180
- audioRecord = AudioRecord(
181
- MediaRecorder.AudioSource.MIC,
182
- recordingConfig.sampleRate,
183
- if (recordingConfig.channels == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
184
- audioFormat,
185
- bufferSizeInBytes
186
- )
187
- if (audioRecord?.state != AudioRecord.STATE_INITIALIZED) {
98
+ // Parse recording configuration
99
+ val configResult = RecordingConfig.fromMap(options)
100
+ if (configResult.isFailure) {
188
101
  promise.reject(
189
- "INITIALIZATION_FAILED",
190
- "Failed to initialize the audio recorder",
191
- null
102
+ "INVALID_CONFIG",
103
+ configResult.exceptionOrNull()?.message ?: "Invalid configuration",
104
+ configResult.exceptionOrNull()
192
105
  )
193
106
  return
194
107
  }
195
- }
196
108
 
197
- streamUuid = java.util.UUID.randomUUID().toString()
198
- audioFile = File(filesDir, "audio_${streamUuid}.${fileExtension}")
109
+ val (tempRecordingConfig, audioFormatInfo) = configResult.getOrNull()!!
110
+ recordingConfig = tempRecordingConfig
111
+ audioFormat = audioFormatInfo.format
112
+ mimeType = audioFormatInfo.mimeType
199
113
 
200
- try {
201
- FileOutputStream(audioFile, true).use { fos ->
202
- audioFileHandler.writeWavHeader(fos, recordingConfig.sampleRate, recordingConfig.channels, when (recordingConfig.encoding) {
203
- "pcm_8bit" -> 8
204
- "pcm_16bit" -> 16
205
- "pcm_32bit" -> 32
206
- else -> 16 // Default to 16 if the encoding is not recognized
207
- })
208
- }
209
- } catch (e: IOException) {
210
- promise.reject("FILE_CREATION_FAILED", "Failed to create the audio file", e)
211
- return
212
- }
114
+ if (!initializeAudioFormat(promise)) return
213
115
 
214
- audioProcessor.resetCumulativeAmplitudeRange()
116
+ if (!initializeBufferSize(promise)) return
215
117
 
216
- audioRecord?.startRecording()
217
- isPaused.set(false)
218
- isRecording.set(true)
219
- isFirstChunk = true // Reset the flag when starting a new recording
118
+ if (!initializeAudioRecord(promise)) return
220
119
 
120
+ if (!initializeRecordingResources(audioFormatInfo.fileExtension, promise)) return
221
121
 
222
- if (!isPaused.get()) {
223
- recordingStartTime =
224
- System.currentTimeMillis() // Only reset start time if it's not a resume
225
- }
122
+ if (!startRecordingProcess(promise)) return
226
123
 
227
- recordingThread = Thread { recordingProcess() }.apply { start() }
228
-
229
- val result = bundleOf(
230
- "fileUri" to audioFile?.toURI().toString(),
231
- "channels" to recordingConfig.channels,
232
- "bitDepth" to when (recordingConfig.encoding) {
233
- "pcm_8bit" -> 8
234
- "pcm_16bit" -> 16
235
- "pcm_32bit" -> 32
236
- else -> 16 // Default to 16 if the encoding is not recognized
237
- },
238
- "sampleRate" to recordingConfig.sampleRate,
239
- "mimeType" to mimeType
240
- )
241
- promise.resolve(result)
124
+ // Return success result
125
+ val result = bundleOf(
126
+ "fileUri" to audioFile?.toURI().toString(),
127
+ "channels" to recordingConfig.channels,
128
+ "bitDepth" to AudioFormatUtils.getBitDepth(recordingConfig.encoding),
129
+ "sampleRate" to recordingConfig.sampleRate,
130
+ "mimeType" to mimeType
131
+ )
132
+ promise.resolve(result)
133
+
134
+ } catch (e: Exception) {
135
+ Log.e(Constants.TAG, "Unexpected error in startRecording", e)
136
+ promise.reject("UNEXPECTED_ERROR", "Unexpected error: ${e.message}", e)
137
+ }
242
138
  }
243
139
 
244
140
  private fun isAudioFormatSupported(sampleRate: Int, channels: Int, format: Int): Boolean {
@@ -246,7 +142,8 @@ class AudioRecorderManager(
246
142
  throw SecurityException("Recording permission has not been granted")
247
143
  }
248
144
 
249
- val channelConfig = if (channels == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO
145
+ val channelConfig =
146
+ if (channels == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO
250
147
  val bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, format)
251
148
 
252
149
  if (bufferSize <= 0) {
@@ -276,6 +173,227 @@ class AudioRecorderManager(
276
173
  return isSupported
277
174
  }
278
175
 
176
+ private fun checkPermissions(options: Map<String, Any?>, promise: Promise): Boolean {
177
+ if (!permissionUtils.checkRecordingPermission()) {
178
+ promise.reject(
179
+ "PERMISSION_DENIED",
180
+ "Recording permission has not been granted",
181
+ null
182
+ )
183
+ return false
184
+ }
185
+
186
+ if (options["showNotification"] as? Boolean == true && !permissionUtils.checkNotificationPermission()) {
187
+ promise.reject(
188
+ "NOTIFICATION_PERMISSION_DENIED",
189
+ "Notification permission has not been granted",
190
+ null
191
+ )
192
+ return false
193
+ }
194
+ return true
195
+ }
196
+
197
+
198
+ private fun initializeAudioFormat(promise: Promise): Boolean {
199
+ if (!isAudioFormatSupported(
200
+ recordingConfig.sampleRate,
201
+ recordingConfig.channels,
202
+ audioFormat
203
+ )
204
+ ) {
205
+ Log.e(Constants.TAG, "Selected audio format not supported, falling back to 16-bit PCM")
206
+ audioFormat = AudioFormat.ENCODING_PCM_16BIT
207
+
208
+ if (!isAudioFormatSupported(
209
+ recordingConfig.sampleRate,
210
+ recordingConfig.channels,
211
+ audioFormat
212
+ )
213
+ ) {
214
+ promise.reject(
215
+ "INITIALIZATION_FAILED",
216
+ "Failed to initialize audio recorder with any supported format",
217
+ null
218
+ )
219
+ return false
220
+ }
221
+ recordingConfig = recordingConfig.copy(encoding = "pcm_16bit")
222
+ mimeType = "audio/wav"
223
+ }
224
+ return true
225
+ }
226
+
227
+ private fun initializeBufferSize(promise: Promise): Boolean {
228
+ try {
229
+ val channelConfig = if (recordingConfig.channels == 1) {
230
+ AudioFormat.CHANNEL_IN_MONO
231
+ } else {
232
+ AudioFormat.CHANNEL_IN_STEREO
233
+ }
234
+
235
+ bufferSizeInBytes = AudioRecord.getMinBufferSize(
236
+ recordingConfig.sampleRate,
237
+ channelConfig,
238
+ audioFormat
239
+ )
240
+
241
+ when {
242
+ bufferSizeInBytes == AudioRecord.ERROR -> {
243
+ Log.e(Constants.TAG, "Error getting minimum buffer size: ERROR")
244
+ promise.reject(
245
+ "BUFFER_SIZE_ERROR",
246
+ "Failed to get minimum buffer size: generic error",
247
+ null
248
+ )
249
+ return false
250
+ }
251
+ bufferSizeInBytes == AudioRecord.ERROR_BAD_VALUE -> {
252
+ Log.e(Constants.TAG, "Error getting minimum buffer size: BAD_VALUE")
253
+ promise.reject(
254
+ "BUFFER_SIZE_ERROR",
255
+ "Failed to get minimum buffer size: invalid parameters",
256
+ null
257
+ )
258
+ return false
259
+ }
260
+ bufferSizeInBytes <= 0 -> {
261
+ Log.e(Constants.TAG, "Invalid buffer size: $bufferSizeInBytes")
262
+ promise.reject(
263
+ "BUFFER_SIZE_ERROR",
264
+ "Failed to get valid buffer size",
265
+ null
266
+ )
267
+ return false
268
+ }
269
+ else -> {
270
+ Log.d(Constants.TAG, "AudioFormat: $audioFormat, BufferSize: $bufferSizeInBytes")
271
+ return true
272
+ }
273
+ }
274
+ } catch (e: Exception) {
275
+ Log.e(Constants.TAG, "Failed to initialize buffer size", e)
276
+ promise.reject(
277
+ "BUFFER_SIZE_ERROR",
278
+ "Failed to initialize buffer size: ${e.message}",
279
+ e
280
+ )
281
+ return false
282
+ }
283
+ }
284
+
285
+
286
+ private fun initializeAudioRecord(promise: Promise): Boolean {
287
+ if (!permissionUtils.checkRecordingPermission()) {
288
+ promise.reject(
289
+ "PERMISSION_DENIED",
290
+ "Recording permission has not been granted",
291
+ null
292
+ )
293
+ return false
294
+ }
295
+
296
+ try {
297
+ if (audioRecord == null || !isPaused.get()) {
298
+ Log.d(Constants.TAG, "Initializing AudioRecord with format: $audioFormat, BufferSize: $bufferSizeInBytes")
299
+
300
+ audioRecord = AudioRecord(
301
+ MediaRecorder.AudioSource.MIC,
302
+ recordingConfig.sampleRate,
303
+ if (recordingConfig.channels == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
304
+ audioFormat,
305
+ bufferSizeInBytes
306
+ )
307
+
308
+ if (audioRecord?.state != AudioRecord.STATE_INITIALIZED) {
309
+ promise.reject(
310
+ "INITIALIZATION_FAILED",
311
+ "Failed to initialize the audio recorder",
312
+ null
313
+ )
314
+ return false
315
+ }
316
+ }
317
+ return true
318
+
319
+ } catch (e: SecurityException) {
320
+ Log.e(Constants.TAG, "Security exception while initializing AudioRecord", e)
321
+ promise.reject(
322
+ "PERMISSION_DENIED",
323
+ "Recording permission denied: ${e.message}",
324
+ e
325
+ )
326
+ return false
327
+ } catch (e: Exception) {
328
+ Log.e(Constants.TAG, "Failed to initialize AudioRecord", e)
329
+ promise.reject(
330
+ "INITIALIZATION_FAILED",
331
+ "Failed to initialize the audio recorder: ${e.message}",
332
+ e
333
+ )
334
+ return false
335
+ }
336
+ }
337
+
338
+ private fun initializeRecordingResources(fileExtension: String, promise: Promise): Boolean {
339
+ try {
340
+ streamUuid = java.util.UUID.randomUUID().toString()
341
+ audioFile = File(filesDir, "audio_${streamUuid}.$fileExtension")
342
+
343
+ FileOutputStream(audioFile, true).use { fos ->
344
+ audioFileHandler.writeWavHeader(
345
+ fos,
346
+ recordingConfig.sampleRate,
347
+ recordingConfig.channels,
348
+ AudioFormatUtils.getBitDepth(recordingConfig.encoding)
349
+ )
350
+ }
351
+
352
+ if (recordingConfig.showNotification) {
353
+ notificationManager.initialize(recordingConfig)
354
+ notificationManager.startUpdates(System.currentTimeMillis())
355
+ AudioRecordingService.startService(context)
356
+ }
357
+
358
+ acquireWakeLock()
359
+ audioProcessor.resetCumulativeAmplitudeRange()
360
+ return true
361
+
362
+ } catch (e: IOException) {
363
+ releaseWakeLock()
364
+ promise.reject("FILE_CREATION_FAILED", "Failed to create the audio file", e)
365
+ return false
366
+ } catch (e: Exception) {
367
+ releaseWakeLock()
368
+ Log.e(Constants.TAG, "Unexpected error in startRecording", e)
369
+ promise.reject("UNEXPECTED_ERROR", "Unexpected error: ${e.message}", e)
370
+ return false
371
+ }
372
+ }
373
+
374
+ private fun startRecordingProcess(promise: Promise): Boolean {
375
+ try {
376
+ Log.d(Constants.TAG, "Starting audio recording")
377
+ audioRecord?.startRecording()
378
+ isPaused.set(false)
379
+ isRecording.set(true)
380
+ isFirstChunk = true
381
+
382
+ if (!isPaused.get()) {
383
+ recordingStartTime = System.currentTimeMillis()
384
+ }
385
+
386
+ recordingThread = Thread { recordingProcess() }.apply { start() }
387
+ return true
388
+
389
+ } catch (e: Exception) {
390
+ Log.e(Constants.TAG, "Failed to start recording", e)
391
+ cleanup()
392
+ promise.reject("START_FAILED", "Failed to start recording: ${e.message}", e)
393
+ return false
394
+ }
395
+ }
396
+
279
397
  fun stopRecording(promise: Promise) {
280
398
  synchronized(audioRecordLock) {
281
399
 
@@ -286,6 +404,11 @@ class AudioRecorderManager(
286
404
  }
287
405
 
288
406
  try {
407
+ if (recordingConfig.showNotification) {
408
+ notificationManager.stopUpdates()
409
+ AudioRecordingService.stopService(context)
410
+ }
411
+
289
412
  val audioData = ByteArray(bufferSizeInBytes)
290
413
  val bytesRead = audioRecord?.read(audioData, 0, bufferSizeInBytes) ?: -1
291
414
  Log.d(Constants.TAG, "Last Read $bytesRead bytes")
@@ -295,27 +418,32 @@ class AudioRecorderManager(
295
418
 
296
419
  Log.d(Constants.TAG, "Stopping recording state = ${audioRecord?.state}")
297
420
  if (audioRecord != null && audioRecord!!.state == AudioRecord.STATE_INITIALIZED) {
298
- Log.d(Constants.TAG, "Stopping AudioRecord");
421
+ Log.d(Constants.TAG, "Stopping AudioRecord")
299
422
  audioRecord!!.stop()
300
423
  }
301
424
 
425
+ cleanup()
302
426
  } catch (e: IllegalStateException) {
303
- Log.e(Constants.TAG, "Error reading from AudioRecord", e);
427
+ Log.e(Constants.TAG, "Error reading from AudioRecord", e)
304
428
  } finally {
429
+ // Release wake lock at the end
430
+ releaseWakeLock()
305
431
  audioRecord?.release()
306
432
  }
307
433
 
308
434
  try {
435
+ AudioProcessor.resetUniqueIdCounter() // Reset the unique ID counter when stopping the recording
309
436
  audioProcessor.resetCumulativeAmplitudeRange()
310
437
 
311
438
  val fileSize = audioFile?.length() ?: 0
312
439
  val dataFileSize = fileSize - 44 // Subtract header size
313
- val byteRate = recordingConfig.sampleRate * recordingConfig.channels * when (recordingConfig.encoding) {
314
- "pcm_8bit" -> 1
315
- "pcm_16bit" -> 2
316
- "pcm_32bit" -> 4
317
- else -> 2 // Default to 2 bytes per sample if the encoding is not recognized
318
- }
440
+ val byteRate =
441
+ recordingConfig.sampleRate * recordingConfig.channels * when (recordingConfig.encoding) {
442
+ "pcm_8bit" -> 1
443
+ "pcm_16bit" -> 2
444
+ "pcm_32bit" -> 4
445
+ else -> 2 // Default to 2 bytes per sample if the encoding is not recognized
446
+ }
319
447
  // Calculate duration based on the data size and byte rate
320
448
  val duration = if (byteRate > 0) (dataFileSize * 1000 / byteRate) else 0
321
449
 
@@ -351,12 +479,39 @@ class AudioRecorderManager(
351
479
  }
352
480
  }
353
481
 
482
+ fun resumeRecording(promise: Promise) {
483
+ if (!isPaused.get()) {
484
+ promise.reject("NOT_PAUSED", "Recording is not paused", null)
485
+ return
486
+ }
487
+
488
+ try {
489
+ if (recordingConfig.showNotification) {
490
+ notificationManager.resumeUpdates()
491
+ }
492
+
493
+ acquireWakeLock()
494
+ pausedDuration += System.currentTimeMillis() - lastPauseTime
495
+ isPaused.set(false)
496
+ audioRecord?.startRecording()
497
+ promise.resolve("Recording resumed")
498
+ } catch (e: Exception) {
499
+ releaseWakeLock()
500
+ promise.reject("RESUME_FAILED", "Failed to resume recording", e)
501
+ }
502
+ }
503
+
354
504
  fun pauseRecording(promise: Promise) {
355
505
  if (isRecording.get() && !isPaused.get()) {
356
506
  audioRecord?.stop()
357
- lastPauseTime =
358
- System.currentTimeMillis() // Record the time when the recording was paused
507
+ lastPauseTime = System.currentTimeMillis()
359
508
  isPaused.set(true)
509
+
510
+ if (recordingConfig.showNotification) {
511
+ notificationManager.pauseUpdates()
512
+ }
513
+
514
+ releaseWakeLock()
360
515
  promise.resolve("Recording paused")
361
516
  } else {
362
517
  promise.reject(
@@ -367,21 +522,6 @@ class AudioRecorderManager(
367
522
  }
368
523
  }
369
524
 
370
- fun resumeRecording(promise: Promise) {
371
- if (isRecording.get() && !isPaused.get()) {
372
- promise.reject("NOT_PAUSED", "Recording is not paused", null)
373
- return
374
- } else if (audioRecord == null) {
375
- promise.reject("NOT_RECORDING", "Recording is not active", null)
376
- }
377
-
378
- // Calculate the duration the recording was paused
379
- pausedDuration += System.currentTimeMillis() - lastPauseTime
380
- isPaused.set(false)
381
- audioRecord?.startRecording()
382
- promise.resolve("Recording resumed")
383
- }
384
-
385
525
  fun getStatus(): Bundle {
386
526
  synchronized(audioRecordLock) {
387
527
  if (!isRecording.get()) {
@@ -401,11 +541,14 @@ class AudioRecorderManager(
401
541
 
402
542
  val duration = when (mimeType) {
403
543
  "audio/wav" -> {
404
- val dataFileSize = fileSize - Constants.WAV_HEADER_SIZE // Assuming header is always 44 bytes
405
- val byteRate = recordingConfig.sampleRate * recordingConfig.channels * (if (recordingConfig.encoding == "pcm_8bit") 8 else 16) / 8
544
+ val dataFileSize =
545
+ fileSize - Constants.WAV_HEADER_SIZE // Assuming header is always 44 bytes
546
+ val byteRate =
547
+ recordingConfig.sampleRate * recordingConfig.channels * (if (recordingConfig.encoding == "pcm_8bit") 8 else 16) / 8
406
548
  if (byteRate > 0) dataFileSize * 1000 / byteRate else 0
407
549
  }
408
- "audio/opus", "audio/aac" -> getCompressedAudioDuration(audioFile)
550
+
551
+ // "audio/opus", "audio/aac" -> getCompressedAudioDuration(audioFile)
409
552
  else -> 0
410
553
  }
411
554
  return bundleOf(
@@ -419,6 +562,43 @@ class AudioRecorderManager(
419
562
  }
420
563
  }
421
564
 
565
+ private val wakeLockTimeout = 60 * 60 * 1000L // 1 hour timeout
566
+
567
+ private fun acquireWakeLock() {
568
+ if (recordingConfig.keepAwake && wakeLock == null) {
569
+ try {
570
+ val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
571
+ wakeLock = powerManager.newWakeLock(
572
+ PowerManager.PARTIAL_WAKE_LOCK, // Use PARTIAL_WAKE_LOCK instead of deprecated SCREEN_DIM_WAKE_LOCK
573
+ "AudioRecorderManager::RecordingWakeLock"
574
+ ).apply {
575
+ setReferenceCounted(false)
576
+ acquire(wakeLockTimeout) // Add timeout
577
+ }
578
+ wasWakeLockEnabled = true
579
+ Log.d(Constants.TAG, "Wake lock acquired")
580
+ } catch (e: Exception) {
581
+ Log.e(Constants.TAG, "Failed to acquire wake lock", e)
582
+ }
583
+ }
584
+ }
585
+
586
+
587
+ private fun releaseWakeLock() {
588
+ try {
589
+ wakeLock?.let {
590
+ if (it.isHeld) {
591
+ it.release()
592
+ Log.d(Constants.TAG, "Wake lock released")
593
+ }
594
+ wakeLock = null
595
+ wasWakeLockEnabled = false
596
+ }
597
+ } catch (e: Exception) {
598
+ Log.e(Constants.TAG, "Failed to release wake lock", e)
599
+ }
600
+ }
601
+
422
602
  fun listAudioFiles(promise: Promise) {
423
603
  val fileList =
424
604
  filesDir.list()?.filter { it.endsWith(".wav") }?.map { File(filesDir, it).absolutePath }
@@ -431,66 +611,74 @@ class AudioRecorderManager(
431
611
  }
432
612
 
433
613
  private fun recordingProcess() {
434
- Log.i(Constants.TAG, "Starting recording process...")
435
- FileOutputStream(audioFile, true).use { fos ->
436
- // Buffer to accumulate data
437
- val accumulatedAudioData = ByteArrayOutputStream()
438
- audioFileHandler.writeWavHeader(
439
- accumulatedAudioData,
440
- recordingConfig.sampleRate,
441
- recordingConfig.channels,
442
- when (recordingConfig.encoding) {
443
- "pcm_8bit" -> 8
444
- "pcm_16bit" -> 16
445
- "pcm_32bit" -> 32
446
- else -> 16 // Default to 16 if the encoding is not recognized
447
- }
448
- )
449
- // Write audio data directly to the file
450
- val audioData = ByteArray(bufferSizeInBytes)
451
- Log.d(Constants.TAG, "Entering recording loop")
452
- while (isRecording.get() && !Thread.currentThread().isInterrupted) {
453
- if (isPaused.get()) {
454
- // If recording is paused, skip reading from the microphone
455
- continue
456
- }
614
+ try {
615
+ Log.i(Constants.TAG, "Starting recording process...")
616
+ FileOutputStream(audioFile, true).use { fos ->
617
+ // Buffer to accumulate data
618
+ val accumulatedAudioData = ByteArrayOutputStream()
619
+ audioFileHandler.writeWavHeader(
620
+ accumulatedAudioData,
621
+ recordingConfig.sampleRate,
622
+ recordingConfig.channels,
623
+ when (recordingConfig.encoding) {
624
+ "pcm_8bit" -> 8
625
+ "pcm_16bit" -> 16
626
+ "pcm_32bit" -> 32
627
+ else -> 16 // Default to 16 if the encoding is not recognized
628
+ }
629
+ )
630
+ // Write audio data directly to the file
631
+ val audioData = ByteArray(bufferSizeInBytes)
632
+ Log.d(Constants.TAG, "Entering recording loop")
633
+ while (isRecording.get() && !Thread.currentThread().isInterrupted) {
634
+ if (isPaused.get()) {
635
+ // If recording is paused, skip reading from the microphone
636
+ continue
637
+ }
457
638
 
458
- val bytesRead = synchronized(audioRecordLock) {
459
- // Only synchronize the read operation and the check
460
- audioRecord?.let {
461
- if (it.state != AudioRecord.STATE_INITIALIZED) {
462
- Log.e(Constants.TAG, "AudioRecord not initialized")
463
- return@let -1
464
- }
465
- it.read(audioData, 0, bufferSizeInBytes).also { bytes ->
466
- if (bytes < 0) {
467
- Log.e(Constants.TAG, "AudioRecord read error: $bytes")
639
+ val bytesRead = synchronized(audioRecordLock) {
640
+ // Only synchronize the read operation and the check
641
+ audioRecord?.let {
642
+ if (it.state != AudioRecord.STATE_INITIALIZED) {
643
+ Log.e(Constants.TAG, "AudioRecord not initialized")
644
+ return@let -1
468
645
  }
469
- }
470
- } ?: -1 // Handle null case
471
- }
472
- if (bytesRead > 0) {
473
- fos.write(audioData, 0, bytesRead)
474
- totalDataSize += bytesRead
475
- accumulatedAudioData.write(audioData, 0, bytesRead)
476
-
477
- // Emit audio data at defined intervals
478
- if (SystemClock.elapsedRealtime() - lastEmitTime >= recordingConfig.interval) {
479
- emitAudioData(
480
- accumulatedAudioData.toByteArray(),
481
- accumulatedAudioData.size()
482
- )
483
- lastEmitTime = SystemClock.elapsedRealtime() // Reset the timer
484
- accumulatedAudioData.reset() // Clear the accumulator
646
+ it.read(audioData, 0, bufferSizeInBytes).also { bytes ->
647
+ if (bytes < 0) {
648
+ Log.e(Constants.TAG, "AudioRecord read error: $bytes")
649
+ }
650
+ }
651
+ } ?: -1 // Handle null case
485
652
  }
653
+ if (bytesRead > 0) {
654
+ fos.write(audioData, 0, bytesRead)
655
+ totalDataSize += bytesRead
656
+ accumulatedAudioData.write(audioData, 0, bytesRead)
657
+
658
+ // Emit audio data at defined intervals
659
+ if (SystemClock.elapsedRealtime() - lastEmitTime >= recordingConfig.interval) {
660
+ emitAudioData(
661
+ accumulatedAudioData.toByteArray(),
662
+ accumulatedAudioData.size()
663
+ )
664
+ lastEmitTime = SystemClock.elapsedRealtime() // Reset the timer
665
+ accumulatedAudioData.reset() // Clear the accumulator
666
+ }
486
667
 
487
- Log.d(Constants.TAG, "Bytes written to file: $bytesRead")
668
+ Log.d(Constants.TAG, "Bytes written to file: $bytesRead")
669
+ }
488
670
  }
489
671
  }
490
- }
491
- // Update the WAV header to reflect the actual data size
492
- audioFile?.let { file ->
493
- audioFileHandler.updateWavHeader(file)
672
+ // Update the WAV header to reflect the actual data size
673
+ audioFile?.let { file ->
674
+ audioFileHandler.updateWavHeader(file)
675
+ }
676
+
677
+ } catch (e: Exception) {
678
+ // Ensure wake lock is released if the thread is interrupted
679
+ if (!isPaused.get()) {
680
+ releaseWakeLock()
681
+ }
494
682
  }
495
683
  }
496
684
 
@@ -499,11 +687,11 @@ class AudioRecorderManager(
499
687
 
500
688
  val fileSize = audioFile?.length() ?: 0
501
689
  val from = lastEmittedSize
502
- val deltaSize = fileSize - lastEmittedSize
503
690
  lastEmittedSize = fileSize
504
691
 
505
692
  // Calculate position in milliseconds
506
- val positionInMs = (from * 1000) / (recordingConfig.sampleRate * recordingConfig.channels * (if (recordingConfig.encoding == "pcm_8bit") 8 else 16) / 8)
693
+ val positionInMs =
694
+ (from * 1000) / (recordingConfig.sampleRate * recordingConfig.channels * (if (recordingConfig.encoding == "pcm_8bit") 8 else 16) / 8)
507
695
 
508
696
  mainHandler.post {
509
697
  try {
@@ -529,6 +717,15 @@ class AudioRecorderManager(
529
717
  }
530
718
  }
531
719
 
720
+ private fun convertByteArrayToFloatArray(audioData: ByteArray): FloatArray {
721
+ val floatArray = FloatArray(audioData.size / 2) // Assuming 16-bit PCM
722
+ val buffer = ByteBuffer.wrap(audioData).order(ByteOrder.LITTLE_ENDIAN)
723
+ for (i in floatArray.indices) {
724
+ floatArray[i] = buffer.short.toFloat()
725
+ }
726
+ return floatArray
727
+ }
728
+
532
729
  private fun processAudioData(audioData: ByteArray) {
533
730
  // Skip the WAV header only for the first chunk
534
731
  val dataToProcess = if (isFirstChunk && audioData.size > Constants.WAV_HEADER_SIZE) {
@@ -540,6 +737,11 @@ class AudioRecorderManager(
540
737
  val audioAnalysisData = audioProcessor.processAudioData(dataToProcess, recordingConfig)
541
738
  val analysisBundle = audioAnalysisData.toBundle()
542
739
 
740
+ if (recordingConfig.showNotification && recordingConfig.showWaveformInNotification) {
741
+ val floatArray = convertByteArrayToFloatArray(audioData)
742
+ notificationManager.updateNotification(floatArray)
743
+ }
744
+
543
745
  mainHandler.post {
544
746
  try {
545
747
  eventSender.sendExpoEvent(
@@ -554,10 +756,24 @@ class AudioRecorderManager(
554
756
  isFirstChunk = false
555
757
  }
556
758
 
759
+ private fun cleanup() {
760
+ try {
761
+ if (recordingConfig.showNotification) {
762
+ notificationManager.stopUpdates()
763
+ AudioRecordingService.stopService(context)
764
+ }
557
765
 
558
- private fun getCompressedAudioDuration(file: File?): Long {
559
- // Placeholder function for fetching duration from a compressed audio file
560
- // This would depend on how you store or can retrieve duration info for compressed formats
561
- return 0L // Implement this based on your specific requirements
766
+ // Reset all states
767
+ isRecording.set(false)
768
+ isPaused.set(false)
769
+ totalRecordedTime = 0
770
+ pausedDuration = 0
771
+ lastEmittedSize = 0
772
+ recordingStartTime = 0
773
+ } catch (e: Exception) {
774
+ Log.e(Constants.TAG, "Error in cleanup", e)
775
+ } finally {
776
+ releaseWakeLock()
777
+ }
562
778
  }
563
779
  }