@siteed/expo-audio-studio 2.18.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/README.md +13 -297
  2. package/index.d.ts +1 -0
  3. package/index.js +1 -0
  4. package/package.json +6 -135
  5. package/CHANGELOG.md +0 -493
  6. package/LICENSE +0 -21
  7. package/android/build.gradle +0 -129
  8. package/android/src/androidTest/assets/chorus.wav +0 -0
  9. package/android/src/androidTest/assets/jfk.wav +0 -0
  10. package/android/src/androidTest/assets/osr_us_000_0010_8k.wav +0 -0
  11. package/android/src/androidTest/assets/recorder_hello_world.wav +0 -0
  12. package/android/src/androidTest/java/net/siteed/audiostream/AudioProcessorInstrumentedTest.kt +0 -197
  13. package/android/src/androidTest/java/net/siteed/audiostream/AudioRecorderInstrumentedTest.kt +0 -541
  14. package/android/src/androidTest/java/net/siteed/audiostream/AudioRecorderPerformanceInstrumentedTest.kt +0 -234
  15. package/android/src/androidTest/java/net/siteed/audiostream/integration/AudioFocusStrategyIntegrationTest.kt +0 -332
  16. package/android/src/androidTest/java/net/siteed/audiostream/integration/BufferDurationIntegrationTest.kt +0 -324
  17. package/android/src/androidTest/java/net/siteed/audiostream/integration/CompressedOnlyOutputTest.kt +0 -253
  18. package/android/src/androidTest/java/net/siteed/audiostream/integration/DeviceDisconnectionFallbackTest.kt +0 -218
  19. package/android/src/androidTest/java/net/siteed/audiostream/integration/EventEmissionIntervalTest.kt +0 -120
  20. package/android/src/androidTest/java/net/siteed/audiostream/integration/M4aFormatTest.kt +0 -345
  21. package/android/src/androidTest/java/net/siteed/audiostream/integration/OutputControlIntegrationTest.kt +0 -340
  22. package/android/src/androidTest/java/net/siteed/audiostream/integration/PcmStreamingDurationTest.kt +0 -252
  23. package/android/src/androidTest/java/net/siteed/audiostream/integration/README.md +0 -95
  24. package/android/src/androidTest/java/net/siteed/audiostream/integration/run_integration_tests.sh +0 -43
  25. package/android/src/main/AndroidManifest.xml +0 -30
  26. package/android/src/main/java/net/siteed/audiostream/AudioAnalysisData.kt +0 -188
  27. package/android/src/main/java/net/siteed/audiostream/AudioDataEncoder.kt +0 -9
  28. package/android/src/main/java/net/siteed/audiostream/AudioDeviceManager.kt +0 -1741
  29. package/android/src/main/java/net/siteed/audiostream/AudioFileHandler.kt +0 -136
  30. package/android/src/main/java/net/siteed/audiostream/AudioFormatUtils.kt +0 -354
  31. package/android/src/main/java/net/siteed/audiostream/AudioNotificationsManager.kt +0 -439
  32. package/android/src/main/java/net/siteed/audiostream/AudioProcessor.kt +0 -2237
  33. package/android/src/main/java/net/siteed/audiostream/AudioRecorderManager.kt +0 -2141
  34. package/android/src/main/java/net/siteed/audiostream/AudioRecordingService.kt +0 -167
  35. package/android/src/main/java/net/siteed/audiostream/AudioTrimmer.kt +0 -1099
  36. package/android/src/main/java/net/siteed/audiostream/Constants.kt +0 -37
  37. package/android/src/main/java/net/siteed/audiostream/EventSender.kt +0 -7
  38. package/android/src/main/java/net/siteed/audiostream/ExpoAudioStreamModule.kt +0 -1113
  39. package/android/src/main/java/net/siteed/audiostream/FFT.kt +0 -99
  40. package/android/src/main/java/net/siteed/audiostream/Features.kt +0 -98
  41. package/android/src/main/java/net/siteed/audiostream/LogUtils.kt +0 -93
  42. package/android/src/main/java/net/siteed/audiostream/NotificationConfig.kt +0 -72
  43. package/android/src/main/java/net/siteed/audiostream/PermissionUtils.kt +0 -68
  44. package/android/src/main/java/net/siteed/audiostream/RecordingActionReceiver.kt +0 -59
  45. package/android/src/main/java/net/siteed/audiostream/RecordingConfig.kt +0 -257
  46. package/android/src/main/java/net/siteed/audiostream/WaveformConfig.kt +0 -19
  47. package/android/src/main/java/net/siteed/audiostream/WaveformRenderer.kt +0 -159
  48. package/android/src/main/res/drawable/ic_default_action_icon.xml +0 -16
  49. package/android/src/main/res/drawable/ic_microphone.xml +0 -13
  50. package/android/src/main/res/drawable/ic_pause.xml +0 -10
  51. package/android/src/main/res/drawable/ic_play.xml +0 -10
  52. package/android/src/main/res/drawable/ic_stop.xml +0 -10
  53. package/android/src/main/res/layout/notification_recording.xml +0 -37
  54. package/android/src/test/java/net/siteed/audiostream/AudioFileHandlerTest.kt +0 -279
  55. package/android/src/test/java/net/siteed/audiostream/AudioFocusStrategyTest.kt +0 -249
  56. package/android/src/test/java/net/siteed/audiostream/AudioFormatTest.kt +0 -151
  57. package/android/src/test/java/net/siteed/audiostream/AudioFormatUtilsTest.kt +0 -273
  58. package/android/src/test/java/net/siteed/audiostream/DeviceDisconnectionFallbackUnitTest.kt +0 -140
  59. package/android/src/test/resources/chorus.wav +0 -0
  60. package/android/src/test/resources/generate_test_audio.py +0 -94
  61. package/android/src/test/resources/jfk.wav +0 -0
  62. package/android/src/test/resources/osr_us_000_0010_8k.wav +0 -0
  63. package/android/src/test/resources/recorder_hello_world.wav +0 -0
  64. package/app.plugin.js +0 -3
  65. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js +0 -4
  66. package/build/cjs/AudioAnalysis/AudioAnalysis.types.js.map +0 -1
  67. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js +0 -210
  68. package/build/cjs/AudioAnalysis/extractAudioAnalysis.js.map +0 -1
  69. package/build/cjs/AudioAnalysis/extractAudioData.js +0 -21
  70. package/build/cjs/AudioAnalysis/extractAudioData.js.map +0 -1
  71. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js +0 -92
  72. package/build/cjs/AudioAnalysis/extractMelSpectrogram.js.map +0 -1
  73. package/build/cjs/AudioAnalysis/extractPreview.js +0 -28
  74. package/build/cjs/AudioAnalysis/extractPreview.js.map +0 -1
  75. package/build/cjs/AudioAnalysis/extractWaveform.js +0 -18
  76. package/build/cjs/AudioAnalysis/extractWaveform.js.map +0 -1
  77. package/build/cjs/AudioDeviceManager.js +0 -689
  78. package/build/cjs/AudioDeviceManager.js.map +0 -1
  79. package/build/cjs/AudioRecorder.provider.js +0 -78
  80. package/build/cjs/AudioRecorder.provider.js.map +0 -1
  81. package/build/cjs/ExpoAudioStream.native.js +0 -8
  82. package/build/cjs/ExpoAudioStream.native.js.map +0 -1
  83. package/build/cjs/ExpoAudioStream.types.js +0 -11
  84. package/build/cjs/ExpoAudioStream.types.js.map +0 -1
  85. package/build/cjs/ExpoAudioStream.web.js +0 -708
  86. package/build/cjs/ExpoAudioStream.web.js.map +0 -1
  87. package/build/cjs/ExpoAudioStreamModule.js +0 -718
  88. package/build/cjs/ExpoAudioStreamModule.js.map +0 -1
  89. package/build/cjs/WebRecorder.web.js +0 -777
  90. package/build/cjs/WebRecorder.web.js.map +0 -1
  91. package/build/cjs/constants/platformLimitations.js +0 -99
  92. package/build/cjs/constants/platformLimitations.js.map +0 -1
  93. package/build/cjs/constants.js +0 -17
  94. package/build/cjs/constants.js.map +0 -1
  95. package/build/cjs/events.js +0 -29
  96. package/build/cjs/events.js.map +0 -1
  97. package/build/cjs/hooks/useAudioDevices.js +0 -179
  98. package/build/cjs/hooks/useAudioDevices.js.map +0 -1
  99. package/build/cjs/index.js +0 -58
  100. package/build/cjs/index.js.map +0 -1
  101. package/build/cjs/trimAudio.js +0 -76
  102. package/build/cjs/trimAudio.js.map +0 -1
  103. package/build/cjs/useAudioRecorder.js +0 -518
  104. package/build/cjs/useAudioRecorder.js.map +0 -1
  105. package/build/cjs/utils/BlobFix.js +0 -502
  106. package/build/cjs/utils/BlobFix.js.map +0 -1
  107. package/build/cjs/utils/audioProcessing.js +0 -136
  108. package/build/cjs/utils/audioProcessing.js.map +0 -1
  109. package/build/cjs/utils/cleanNativeOptions.js +0 -22
  110. package/build/cjs/utils/cleanNativeOptions.js.map +0 -1
  111. package/build/cjs/utils/concatenateBuffers.js +0 -25
  112. package/build/cjs/utils/concatenateBuffers.js.map +0 -1
  113. package/build/cjs/utils/convertPCMToFloat32.js +0 -124
  114. package/build/cjs/utils/convertPCMToFloat32.js.map +0 -1
  115. package/build/cjs/utils/crc32.js +0 -52
  116. package/build/cjs/utils/crc32.js.map +0 -1
  117. package/build/cjs/utils/encodingToBitDepth.js +0 -17
  118. package/build/cjs/utils/encodingToBitDepth.js.map +0 -1
  119. package/build/cjs/utils/getWavFileInfo.js +0 -96
  120. package/build/cjs/utils/getWavFileInfo.js.map +0 -1
  121. package/build/cjs/utils/writeWavHeader.js +0 -88
  122. package/build/cjs/utils/writeWavHeader.js.map +0 -1
  123. package/build/cjs/workers/InlineFeaturesExtractor.web.js +0 -859
  124. package/build/cjs/workers/InlineFeaturesExtractor.web.js.map +0 -1
  125. package/build/cjs/workers/inlineAudioWebWorker.web.js +0 -184
  126. package/build/cjs/workers/inlineAudioWebWorker.web.js.map +0 -1
  127. package/build/esm/AudioAnalysis/AudioAnalysis.types.js +0 -3
  128. package/build/esm/AudioAnalysis/AudioAnalysis.types.js.map +0 -1
  129. package/build/esm/AudioAnalysis/extractAudioAnalysis.js +0 -202
  130. package/build/esm/AudioAnalysis/extractAudioAnalysis.js.map +0 -1
  131. package/build/esm/AudioAnalysis/extractAudioData.js +0 -14
  132. package/build/esm/AudioAnalysis/extractAudioData.js.map +0 -1
  133. package/build/esm/AudioAnalysis/extractMelSpectrogram.js +0 -89
  134. package/build/esm/AudioAnalysis/extractMelSpectrogram.js.map +0 -1
  135. package/build/esm/AudioAnalysis/extractPreview.js +0 -25
  136. package/build/esm/AudioAnalysis/extractPreview.js.map +0 -1
  137. package/build/esm/AudioAnalysis/extractWaveform.js +0 -11
  138. package/build/esm/AudioAnalysis/extractWaveform.js.map +0 -1
  139. package/build/esm/AudioDeviceManager.js +0 -682
  140. package/build/esm/AudioDeviceManager.js.map +0 -1
  141. package/build/esm/AudioRecorder.provider.js +0 -40
  142. package/build/esm/AudioRecorder.provider.js.map +0 -1
  143. package/build/esm/ExpoAudioStream.native.js +0 -6
  144. package/build/esm/ExpoAudioStream.native.js.map +0 -1
  145. package/build/esm/ExpoAudioStream.types.js +0 -8
  146. package/build/esm/ExpoAudioStream.types.js.map +0 -1
  147. package/build/esm/ExpoAudioStream.web.js +0 -704
  148. package/build/esm/ExpoAudioStream.web.js.map +0 -1
  149. package/build/esm/ExpoAudioStreamModule.js +0 -713
  150. package/build/esm/ExpoAudioStreamModule.js.map +0 -1
  151. package/build/esm/WebRecorder.web.js +0 -773
  152. package/build/esm/WebRecorder.web.js.map +0 -1
  153. package/build/esm/constants/platformLimitations.js +0 -90
  154. package/build/esm/constants/platformLimitations.js.map +0 -1
  155. package/build/esm/constants.js +0 -14
  156. package/build/esm/constants.js.map +0 -1
  157. package/build/esm/events.js +0 -21
  158. package/build/esm/events.js.map +0 -1
  159. package/build/esm/hooks/useAudioDevices.js +0 -176
  160. package/build/esm/hooks/useAudioDevices.js.map +0 -1
  161. package/build/esm/index.js +0 -20
  162. package/build/esm/index.js.map +0 -1
  163. package/build/esm/trimAudio.js +0 -69
  164. package/build/esm/trimAudio.js.map +0 -1
  165. package/build/esm/useAudioRecorder.js +0 -512
  166. package/build/esm/useAudioRecorder.js.map +0 -1
  167. package/build/esm/utils/BlobFix.js +0 -498
  168. package/build/esm/utils/BlobFix.js.map +0 -1
  169. package/build/esm/utils/audioProcessing.js +0 -133
  170. package/build/esm/utils/audioProcessing.js.map +0 -1
  171. package/build/esm/utils/cleanNativeOptions.js +0 -19
  172. package/build/esm/utils/cleanNativeOptions.js.map +0 -1
  173. package/build/esm/utils/concatenateBuffers.js +0 -21
  174. package/build/esm/utils/concatenateBuffers.js.map +0 -1
  175. package/build/esm/utils/convertPCMToFloat32.js +0 -120
  176. package/build/esm/utils/convertPCMToFloat32.js.map +0 -1
  177. package/build/esm/utils/crc32.js +0 -50
  178. package/build/esm/utils/crc32.js.map +0 -1
  179. package/build/esm/utils/encodingToBitDepth.js +0 -13
  180. package/build/esm/utils/encodingToBitDepth.js.map +0 -1
  181. package/build/esm/utils/getWavFileInfo.js +0 -92
  182. package/build/esm/utils/getWavFileInfo.js.map +0 -1
  183. package/build/esm/utils/writeWavHeader.js +0 -84
  184. package/build/esm/utils/writeWavHeader.js.map +0 -1
  185. package/build/esm/workers/InlineFeaturesExtractor.web.js +0 -856
  186. package/build/esm/workers/InlineFeaturesExtractor.web.js.map +0 -1
  187. package/build/esm/workers/inlineAudioWebWorker.web.js +0 -181
  188. package/build/esm/workers/inlineAudioWebWorker.web.js.map +0 -1
  189. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts +0 -196
  190. package/build/types/AudioAnalysis/AudioAnalysis.types.d.ts.map +0 -1
  191. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts +0 -74
  192. package/build/types/AudioAnalysis/extractAudioAnalysis.d.ts.map +0 -1
  193. package/build/types/AudioAnalysis/extractAudioData.d.ts +0 -3
  194. package/build/types/AudioAnalysis/extractAudioData.d.ts.map +0 -1
  195. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts +0 -14
  196. package/build/types/AudioAnalysis/extractMelSpectrogram.d.ts.map +0 -1
  197. package/build/types/AudioAnalysis/extractPreview.d.ts +0 -11
  198. package/build/types/AudioAnalysis/extractPreview.d.ts.map +0 -1
  199. package/build/types/AudioAnalysis/extractWaveform.d.ts +0 -8
  200. package/build/types/AudioAnalysis/extractWaveform.d.ts.map +0 -1
  201. package/build/types/AudioDeviceManager.d.ts +0 -187
  202. package/build/types/AudioDeviceManager.d.ts.map +0 -1
  203. package/build/types/AudioRecorder.provider.d.ts +0 -11
  204. package/build/types/AudioRecorder.provider.d.ts.map +0 -1
  205. package/build/types/ExpoAudioStream.native.d.ts +0 -3
  206. package/build/types/ExpoAudioStream.native.d.ts.map +0 -1
  207. package/build/types/ExpoAudioStream.types.d.ts +0 -738
  208. package/build/types/ExpoAudioStream.types.d.ts.map +0 -1
  209. package/build/types/ExpoAudioStream.web.d.ts +0 -96
  210. package/build/types/ExpoAudioStream.web.d.ts.map +0 -1
  211. package/build/types/ExpoAudioStreamModule.d.ts +0 -3
  212. package/build/types/ExpoAudioStreamModule.d.ts.map +0 -1
  213. package/build/types/WebRecorder.web.d.ts +0 -198
  214. package/build/types/WebRecorder.web.d.ts.map +0 -1
  215. package/build/types/constants/platformLimitations.d.ts +0 -40
  216. package/build/types/constants/platformLimitations.d.ts.map +0 -1
  217. package/build/types/constants.d.ts +0 -11
  218. package/build/types/constants.d.ts.map +0 -1
  219. package/build/types/events.d.ts +0 -26
  220. package/build/types/events.d.ts.map +0 -1
  221. package/build/types/hooks/useAudioDevices.d.ts +0 -15
  222. package/build/types/hooks/useAudioDevices.d.ts.map +0 -1
  223. package/build/types/index.d.ts +0 -18
  224. package/build/types/index.d.ts.map +0 -1
  225. package/build/types/trimAudio.d.ts +0 -25
  226. package/build/types/trimAudio.d.ts.map +0 -1
  227. package/build/types/useAudioRecorder.d.ts +0 -22
  228. package/build/types/useAudioRecorder.d.ts.map +0 -1
  229. package/build/types/utils/BlobFix.d.ts +0 -9
  230. package/build/types/utils/BlobFix.d.ts.map +0 -1
  231. package/build/types/utils/audioProcessing.d.ts +0 -24
  232. package/build/types/utils/audioProcessing.d.ts.map +0 -1
  233. package/build/types/utils/cleanNativeOptions.d.ts +0 -15
  234. package/build/types/utils/cleanNativeOptions.d.ts.map +0 -1
  235. package/build/types/utils/concatenateBuffers.d.ts +0 -8
  236. package/build/types/utils/concatenateBuffers.d.ts.map +0 -1
  237. package/build/types/utils/convertPCMToFloat32.d.ts +0 -13
  238. package/build/types/utils/convertPCMToFloat32.d.ts.map +0 -1
  239. package/build/types/utils/crc32.d.ts +0 -7
  240. package/build/types/utils/crc32.d.ts.map +0 -1
  241. package/build/types/utils/encodingToBitDepth.d.ts +0 -5
  242. package/build/types/utils/encodingToBitDepth.d.ts.map +0 -1
  243. package/build/types/utils/getWavFileInfo.d.ts +0 -26
  244. package/build/types/utils/getWavFileInfo.d.ts.map +0 -1
  245. package/build/types/utils/writeWavHeader.d.ts +0 -34
  246. package/build/types/utils/writeWavHeader.d.ts.map +0 -1
  247. package/build/types/workers/InlineFeaturesExtractor.web.d.ts +0 -2
  248. package/build/types/workers/InlineFeaturesExtractor.web.d.ts.map +0 -1
  249. package/build/types/workers/inlineAudioWebWorker.web.d.ts +0 -2
  250. package/build/types/workers/inlineAudioWebWorker.web.d.ts.map +0 -1
  251. package/expo-module.config.json +0 -10
  252. package/ios/AudioAnalysisData.swift +0 -74
  253. package/ios/AudioDeviceManager.swift +0 -666
  254. package/ios/AudioNotificationManager.swift +0 -154
  255. package/ios/AudioProcessingHelpers.swift +0 -743
  256. package/ios/AudioProcessor.swift +0 -1151
  257. package/ios/AudioStreamError.swift +0 -7
  258. package/ios/AudioStreamManager.swift +0 -2352
  259. package/ios/AudioStreamManagerDelegate.swift +0 -16
  260. package/ios/DataPoint.swift +0 -54
  261. package/ios/DecodingConfig.swift +0 -59
  262. package/ios/ExpoAudioStream.podspec +0 -33
  263. package/ios/ExpoAudioStreamModule.swift +0 -1013
  264. package/ios/ExpoAudioStudioTests/AudioFileHandlerTests.swift +0 -338
  265. package/ios/ExpoAudioStudioTests/AudioFormatUtilsTests.swift +0 -331
  266. package/ios/ExpoAudioStudioTests/AudioTestHelpers.swift +0 -130
  267. package/ios/ExpoAudioStudioTests/CompressedOnlyOutputTests.swift +0 -294
  268. package/ios/ExpoAudioStudioTests/EventEmissionIntervalTests.swift +0 -105
  269. package/ios/ExpoAudioStudioTests/Info.plist +0 -22
  270. package/ios/ExpoAudioStudioTests/README.md +0 -39
  271. package/ios/ExpoAudioStudioTests/SimpleAudioTest.swift +0 -98
  272. package/ios/ExpoAudioStudioTests/TestAudioGenerator.swift +0 -75
  273. package/ios/FFT.swift +0 -62
  274. package/ios/Features.swift +0 -95
  275. package/ios/ISSUE_IOS.md +0 -68
  276. package/ios/Logger.swift +0 -39
  277. package/ios/NotificationExtension.swift +0 -15
  278. package/ios/RecordingResult.swift +0 -22
  279. package/ios/RecordingSettings.swift +0 -308
  280. package/ios/WaveformExtractor.swift +0 -105
  281. package/ios/tests/README.md +0 -41
  282. package/ios/tests/integration/buffer_and_fallback_test.swift +0 -178
  283. package/ios/tests/integration/buffer_duration_test.swift +0 -185
  284. package/ios/tests/integration/compressed_only_output_test.swift +0 -271
  285. package/ios/tests/integration/output_control_test.swift +0 -322
  286. package/ios/tests/integration/run_integration_tests.sh +0 -37
  287. package/ios/tests/opus_support_test_macos.swift +0 -154
  288. package/ios/tests/standalone/audio_processing_test.swift +0 -144
  289. package/ios/tests/standalone/audio_recording_test.swift +0 -277
  290. package/ios/tests/standalone/audio_streaming_test.swift +0 -249
  291. package/ios/tests/standalone/standalone_test.swift +0 -144
  292. package/plugin/build/index.cjs +0 -194
  293. package/plugin/build/index.d.cts +0 -22
  294. package/plugin/build/index.js +0 -194
  295. package/plugin/src/index.ts +0 -285
  296. package/plugin/tsconfig.json +0 -10
  297. package/plugin/tsconfig.tsbuildinfo +0 -1
  298. package/src/AudioAnalysis/AudioAnalysis.types.ts +0 -224
  299. package/src/AudioAnalysis/extractAudioAnalysis.ts +0 -344
  300. package/src/AudioAnalysis/extractAudioData.ts +0 -17
  301. package/src/AudioAnalysis/extractMelSpectrogram.ts +0 -154
  302. package/src/AudioAnalysis/extractPreview.ts +0 -34
  303. package/src/AudioAnalysis/extractWaveform.ts +0 -22
  304. package/src/AudioDeviceManager.ts +0 -803
  305. package/src/AudioRecorder.provider.tsx +0 -57
  306. package/src/ExpoAudioStream.native.ts +0 -6
  307. package/src/ExpoAudioStream.types.ts +0 -874
  308. package/src/ExpoAudioStream.web.ts +0 -905
  309. package/src/ExpoAudioStreamModule.ts +0 -990
  310. package/src/WebRecorder.web.ts +0 -1005
  311. package/src/constants/platformLimitations.ts +0 -118
  312. package/src/constants.ts +0 -18
  313. package/src/events.ts +0 -60
  314. package/src/hooks/useAudioDevices.ts +0 -213
  315. package/src/index.ts +0 -54
  316. package/src/trimAudio.ts +0 -94
  317. package/src/types/crc-32.d.ts +0 -9
  318. package/src/useAudioRecorder.tsx +0 -766
  319. package/src/utils/BlobFix.ts +0 -561
  320. package/src/utils/audioProcessing.ts +0 -205
  321. package/src/utils/cleanNativeOptions.ts +0 -18
  322. package/src/utils/concatenateBuffers.ts +0 -24
  323. package/src/utils/convertPCMToFloat32.ts +0 -170
  324. package/src/utils/crc32.ts +0 -59
  325. package/src/utils/encodingToBitDepth.ts +0 -18
  326. package/src/utils/getWavFileInfo.ts +0 -132
  327. package/src/utils/writeWavHeader.ts +0 -115
  328. package/src/workers/InlineFeaturesExtractor.web.tsx +0 -855
  329. package/src/workers/inlineAudioWebWorker.web.tsx +0 -180
@@ -1,498 +0,0 @@
1
- /*
2
- * There is a bug where `navigator.mediaDevices.getUserMedia` + `MediaRecorder`
3
- * creates WEBM files without duration metadata. See:
4
- * - https://bugs.chromium.org/p/chromium/issues/detail?id=642012
5
- * - https://stackoverflow.com/a/39971175/13989043
6
- *
7
- * This file contains a function that fixes the duration metadata of a WEBM file.
8
- * - Answer found: https://stackoverflow.com/a/75218309/13989043
9
- * - Code adapted from: https://github.com/mat-sz/webm-fix-duration
10
- * (forked from https://github.com/yusitnikov/fix-webm-duration)
11
- */
12
- const sections = {
13
- 0xa45dfa3: { name: 'EBML', type: 'Container' },
14
- 0x286: { name: 'EBMLVersion', type: 'Uint' },
15
- 0x2f7: { name: 'EBMLReadVersion', type: 'Uint' },
16
- 0x2f2: { name: 'EBMLMaxIDLength', type: 'Uint' },
17
- 0x2f3: { name: 'EBMLMaxSizeLength', type: 'Uint' },
18
- 0x282: { name: 'DocType', type: 'String' },
19
- 0x287: { name: 'DocTypeVersion', type: 'Uint' },
20
- 0x285: { name: 'DocTypeReadVersion', type: 'Uint' },
21
- 0x6c: { name: 'Void', type: 'Binary' },
22
- 0x3f: { name: 'CRC-32', type: 'Binary' },
23
- 0xb538667: { name: 'SignatureSlot', type: 'Container' },
24
- 0x3e8a: { name: 'SignatureAlgo', type: 'Uint' },
25
- 0x3e9a: { name: 'SignatureHash', type: 'Uint' },
26
- 0x3ea5: { name: 'SignaturePublicKey', type: 'Binary' },
27
- 0x3eb5: { name: 'Signature', type: 'Binary' },
28
- 0x3e5b: { name: 'SignatureElements', type: 'Container' },
29
- 0x3e7b: { name: 'SignatureElementList', type: 'Container' },
30
- 0x2532: { name: 'SignedElement', type: 'Binary' },
31
- 0x8538067: { name: 'Segment', type: 'Container' },
32
- 0x14d9b74: { name: 'SeekHead', type: 'Container' },
33
- 0xdbb: { name: 'Seek', type: 'Container' },
34
- 0x13ab: { name: 'SeekID', type: 'Binary' },
35
- 0x13ac: { name: 'SeekPosition', type: 'Uint' },
36
- 0x549a966: { name: 'Info', type: 'Container' },
37
- 0x33a4: { name: 'SegmentUID', type: 'Binary' },
38
- 0x3384: { name: 'SegmentFilename', type: 'String' },
39
- 0x1cb923: { name: 'PrevUID', type: 'Binary' },
40
- 0x1c83ab: { name: 'PrevFilename', type: 'String' },
41
- 0x1eb923: { name: 'NextUID', type: 'Binary' },
42
- 0x1e83bb: { name: 'NextFilename', type: 'String' },
43
- 0x444: { name: 'SegmentFamily', type: 'Binary' },
44
- 0x2924: { name: 'ChapterTranslate', type: 'Container' },
45
- 0x29fc: { name: 'ChapterTranslateEditionUID', type: 'Uint' },
46
- 0x29bf: { name: 'ChapterTranslateCodec', type: 'Uint' },
47
- 0x29a5: { name: 'ChapterTranslateID', type: 'Binary' },
48
- 0xad7b1: { name: 'TimecodeScale', type: 'Uint' },
49
- 0x489: { name: 'Duration', type: 'Float' },
50
- 0x461: { name: 'DateUTC', type: 'Date' },
51
- 0x3ba9: { name: 'Title', type: 'String' },
52
- 0xd80: { name: 'MuxingApp', type: 'String' },
53
- 0x1741: { name: 'WritingApp', type: 'String' },
54
- // 0xf43b675: { name: 'Cluster', type: 'Container' },
55
- 0x67: { name: 'Timecode', type: 'Uint' },
56
- 0x1854: { name: 'SilentTracks', type: 'Container' },
57
- 0x18d7: { name: 'SilentTrackNumber', type: 'Uint' },
58
- 0x27: { name: 'Position', type: 'Uint' },
59
- 0x2b: { name: 'PrevSize', type: 'Uint' },
60
- 0x23: { name: 'SimpleBlock', type: 'Binary' },
61
- 0x20: { name: 'BlockGroup', type: 'Container' },
62
- 0x21: { name: 'Block', type: 'Binary' },
63
- 0x22: { name: 'BlockVirtual', type: 'Binary' },
64
- 0x35a1: { name: 'BlockAdditions', type: 'Container' },
65
- 0x26: { name: 'BlockMore', type: 'Container' },
66
- 0x6e: { name: 'BlockAddID', type: 'Uint' },
67
- 0x25: { name: 'BlockAdditional', type: 'Binary' },
68
- 0x1b: { name: 'BlockDuration', type: 'Uint' },
69
- 0x7a: { name: 'ReferencePriority', type: 'Uint' },
70
- 0x7b: { name: 'ReferenceBlock', type: 'Int' },
71
- 0x7d: { name: 'ReferenceVirtual', type: 'Int' },
72
- 0x24: { name: 'CodecState', type: 'Binary' },
73
- 0x35a2: { name: 'DiscardPadding', type: 'Int' },
74
- 0xe: { name: 'Slices', type: 'Container' },
75
- 0x68: { name: 'TimeSlice', type: 'Container' },
76
- 0x4c: { name: 'LaceNumber', type: 'Uint' },
77
- 0x4d: { name: 'FrameNumber', type: 'Uint' },
78
- 0x4b: { name: 'BlockAdditionID', type: 'Uint' },
79
- 0x4e: { name: 'Delay', type: 'Uint' },
80
- 0x4f: { name: 'SliceDuration', type: 'Uint' },
81
- 0x48: { name: 'ReferenceFrame', type: 'Container' },
82
- 0x49: { name: 'ReferenceOffset', type: 'Uint' },
83
- 0x4a: { name: 'ReferenceTimeCode', type: 'Uint' },
84
- 0x2f: { name: 'EncryptedBlock', type: 'Binary' },
85
- 0x654ae6b: { name: 'Tracks', type: 'Container' },
86
- 0x2e: { name: 'TrackEntry', type: 'Container' },
87
- 0x57: { name: 'TrackNumber', type: 'Uint' },
88
- 0x33c5: { name: 'TrackUID', type: 'Uint' },
89
- 0x3: { name: 'TrackType', type: 'Uint' },
90
- 0x39: { name: 'FlagEnabled', type: 'Uint' },
91
- 0x8: { name: 'FlagDefault', type: 'Uint' },
92
- 0x15aa: { name: 'FlagForced', type: 'Uint' },
93
- 0x1c: { name: 'FlagLacing', type: 'Uint' },
94
- 0x2de7: { name: 'MinCache', type: 'Uint' },
95
- 0x2df8: { name: 'MaxCache', type: 'Uint' },
96
- 0x3e383: { name: 'DefaultDuration', type: 'Uint' },
97
- 0x34e7a: { name: 'DefaultDecodedFieldDuration', type: 'Uint' },
98
- 0x3314f: { name: 'TrackTimecodeScale', type: 'Float' },
99
- 0x137f: { name: 'TrackOffset', type: 'Int' },
100
- 0x15ee: { name: 'MaxBlockAdditionID', type: 'Uint' },
101
- 0x136e: { name: 'Name', type: 'String' },
102
- 0x2b59c: { name: 'Language', type: 'String' },
103
- 0x6: { name: 'CodecID', type: 'String' },
104
- 0x23a2: { name: 'CodecPrivate', type: 'Binary' },
105
- 0x58688: { name: 'CodecName', type: 'String' },
106
- 0x3446: { name: 'AttachmentLink', type: 'Uint' },
107
- 0x1a9697: { name: 'CodecSettings', type: 'String' },
108
- 0x1b4040: { name: 'CodecInfoURL', type: 'String' },
109
- 0x6b240: { name: 'CodecDownloadURL', type: 'String' },
110
- 0x2a: { name: 'CodecDecodeAll', type: 'Uint' },
111
- 0x2fab: { name: 'TrackOverlay', type: 'Uint' },
112
- 0x16aa: { name: 'CodecDelay', type: 'Uint' },
113
- 0x16bb: { name: 'SeekPreRoll', type: 'Uint' },
114
- 0x2624: { name: 'TrackTranslate', type: 'Container' },
115
- 0x26fc: { name: 'TrackTranslateEditionUID', type: 'Uint' },
116
- 0x26bf: { name: 'TrackTranslateCodec', type: 'Uint' },
117
- 0x26a5: { name: 'TrackTranslateTrackID', type: 'Binary' },
118
- 0x60: { name: 'Video', type: 'Container' },
119
- 0x1a: { name: 'FlagInterlaced', type: 'Uint' },
120
- 0x13b8: { name: 'StereoMode', type: 'Uint' },
121
- 0x13c0: { name: 'AlphaMode', type: 'Uint' },
122
- 0x13b9: { name: 'OldStereoMode', type: 'Uint' },
123
- 0x30: { name: 'PixelWidth', type: 'Uint' },
124
- 0x3a: { name: 'PixelHeight', type: 'Uint' },
125
- 0x14aa: { name: 'PixelCropBottom', type: 'Uint' },
126
- 0x14bb: { name: 'PixelCropTop', type: 'Uint' },
127
- 0x14cc: { name: 'PixelCropLeft', type: 'Uint' },
128
- 0x14dd: { name: 'PixelCropRight', type: 'Uint' },
129
- 0x14b0: { name: 'DisplayWidth', type: 'Uint' },
130
- 0x14ba: { name: 'DisplayHeight', type: 'Uint' },
131
- 0x14b2: { name: 'DisplayUnit', type: 'Uint' },
132
- 0x14b3: { name: 'AspectRatioType', type: 'Uint' },
133
- 0xeb524: { name: 'ColourSpace', type: 'Binary' },
134
- 0xfb523: { name: 'GammaValue', type: 'Float' },
135
- 0x383e3: { name: 'FrameRate', type: 'Float' },
136
- 0x61: { name: 'Audio', type: 'Container' },
137
- 0x35: { name: 'SamplingFrequency', type: 'Float' },
138
- 0x38b5: { name: 'OutputSamplingFrequency', type: 'Float' },
139
- 0x1f: { name: 'Channels', type: 'Uint' },
140
- 0x3d7b: { name: 'ChannelPositions', type: 'Binary' },
141
- 0x2264: { name: 'BitDepth', type: 'Uint' },
142
- 0x62: { name: 'TrackOperation', type: 'Container' },
143
- 0x63: { name: 'TrackCombinePlanes', type: 'Container' },
144
- 0x64: { name: 'TrackPlane', type: 'Container' },
145
- 0x65: { name: 'TrackPlaneUID', type: 'Uint' },
146
- 0x66: { name: 'TrackPlaneType', type: 'Uint' },
147
- 0x69: { name: 'TrackJoinBlocks', type: 'Container' },
148
- 0x6d: { name: 'TrackJoinUID', type: 'Uint' },
149
- 0x40: { name: 'TrickTrackUID', type: 'Uint' },
150
- 0x41: { name: 'TrickTrackSegmentUID', type: 'Binary' },
151
- 0x46: { name: 'TrickTrackFlag', type: 'Uint' },
152
- 0x47: { name: 'TrickMasterTrackUID', type: 'Uint' },
153
- 0x44: { name: 'TrickMasterTrackSegmentUID', type: 'Binary' },
154
- 0x2d80: { name: 'ContentEncodings', type: 'Container' },
155
- 0x2240: { name: 'ContentEncoding', type: 'Container' },
156
- 0x1031: { name: 'ContentEncodingOrder', type: 'Uint' },
157
- 0x1032: { name: 'ContentEncodingScope', type: 'Uint' },
158
- 0x1033: { name: 'ContentEncodingType', type: 'Uint' },
159
- 0x1034: { name: 'ContentCompression', type: 'Container' },
160
- 0x254: { name: 'ContentCompAlgo', type: 'Uint' },
161
- 0x255: { name: 'ContentCompSettings', type: 'Binary' },
162
- 0x1035: { name: 'ContentEncryption', type: 'Container' },
163
- 0x7e1: { name: 'ContentEncAlgo', type: 'Uint' },
164
- 0x7e2: { name: 'ContentEncKeyID', type: 'Binary' },
165
- 0x7e3: { name: 'ContentSignature', type: 'Binary' },
166
- 0x7e4: { name: 'ContentSigKeyID', type: 'Binary' },
167
- 0x7e5: { name: 'ContentSigAlgo', type: 'Uint' },
168
- 0x7e6: { name: 'ContentSigHashAlgo', type: 'Uint' },
169
- 0xc53bb6b: { name: 'Cues', type: 'Container' },
170
- 0x3b: { name: 'CuePoint', type: 'Container' },
171
- 0x33: { name: 'CueTime', type: 'Uint' },
172
- 0x37: { name: 'CueTrackPositions', type: 'Container' },
173
- 0x77: { name: 'CueTrack', type: 'Uint' },
174
- 0x71: { name: 'CueClusterPosition', type: 'Uint' },
175
- 0x70: { name: 'CueRelativePosition', type: 'Uint' },
176
- 0x32: { name: 'CueDuration', type: 'Uint' },
177
- 0x1378: { name: 'CueBlockNumber', type: 'Uint' },
178
- 0x6a: { name: 'CueCodecState', type: 'Uint' },
179
- 0x5b: { name: 'CueReference', type: 'Container' },
180
- 0x16: { name: 'CueRefTime', type: 'Uint' },
181
- 0x17: { name: 'CueRefCluster', type: 'Uint' },
182
- 0x135f: { name: 'CueRefNumber', type: 'Uint' },
183
- 0x6b: { name: 'CueRefCodecState', type: 'Uint' },
184
- 0x941a469: { name: 'Attachments', type: 'Container' },
185
- 0x21a7: { name: 'AttachedFile', type: 'Container' },
186
- 0x67e: { name: 'FileDescription', type: 'String' },
187
- 0x66e: { name: 'FileName', type: 'String' },
188
- 0x660: { name: 'FileMimeType', type: 'String' },
189
- 0x65c: { name: 'FileData', type: 'Binary' },
190
- 0x6ae: { name: 'FileUID', type: 'Uint' },
191
- 0x675: { name: 'FileReferral', type: 'Binary' },
192
- 0x661: { name: 'FileUsedStartTime', type: 'Uint' },
193
- 0x662: { name: 'FileUsedEndTime', type: 'Uint' },
194
- 0x43a770: { name: 'Chapters', type: 'Container' },
195
- 0x5b9: { name: 'EditionEntry', type: 'Container' },
196
- 0x5bc: { name: 'EditionUID', type: 'Uint' },
197
- 0x5bd: { name: 'EditionFlagHidden', type: 'Uint' },
198
- 0x5db: { name: 'EditionFlagDefault', type: 'Uint' },
199
- 0x5dd: { name: 'EditionFlagOrdered', type: 'Uint' },
200
- 0x36: { name: 'ChapterAtom', type: 'Container' },
201
- 0x33c4: { name: 'ChapterUID', type: 'Uint' },
202
- 0x1654: { name: 'ChapterStringUID', type: 'String' },
203
- 0x11: { name: 'ChapterTimeStart', type: 'Uint' },
204
- 0x12: { name: 'ChapterTimeEnd', type: 'Uint' },
205
- 0x18: { name: 'ChapterFlagHidden', type: 'Uint' },
206
- 0x598: { name: 'ChapterFlagEnabled', type: 'Uint' },
207
- 0x2e67: { name: 'ChapterSegmentUID', type: 'Binary' },
208
- 0x2ebc: { name: 'ChapterSegmentEditionUID', type: 'Uint' },
209
- 0x23c3: { name: 'ChapterPhysicalEquiv', type: 'Uint' },
210
- 0xf: { name: 'ChapterTrack', type: 'Container' },
211
- 0x9: { name: 'ChapterTrackNumber', type: 'Uint' },
212
- 0x0: { name: 'ChapterDisplay', type: 'Container' },
213
- 0x5: { name: 'ChapString', type: 'String' },
214
- 0x37c: { name: 'ChapLanguage', type: 'String' },
215
- 0x37e: { name: 'ChapCountry', type: 'String' },
216
- 0x2944: { name: 'ChapProcess', type: 'Container' },
217
- 0x2955: { name: 'ChapProcessCodecID', type: 'Uint' },
218
- 0x50d: { name: 'ChapProcessPrivate', type: 'Binary' },
219
- 0x2911: { name: 'ChapProcessCommand', type: 'Container' },
220
- 0x2922: { name: 'ChapProcessTime', type: 'Uint' },
221
- 0x2933: { name: 'ChapProcessData', type: 'Binary' },
222
- 0x254c367: { name: 'Tags', type: 'Container' },
223
- 0x3373: { name: 'Tag', type: 'Container' },
224
- 0x23c0: { name: 'Targets', type: 'Container' },
225
- 0x28ca: { name: 'TargetTypeValue', type: 'Uint' },
226
- 0x23ca: { name: 'TargetType', type: 'String' },
227
- 0x23c5: { name: 'TagTrackUID', type: 'Uint' },
228
- 0x23c9: { name: 'TagEditionUID', type: 'Uint' },
229
- 0x23c4: { name: 'TagChapterUID', type: 'Uint' },
230
- 0x23c6: { name: 'TagAttachmentUID', type: 'Uint' },
231
- 0x27c8: { name: 'SimpleTag', type: 'Container' },
232
- 0x5a3: { name: 'TagName', type: 'String' },
233
- 0x47a: { name: 'TagLanguage', type: 'String' },
234
- 0x484: { name: 'TagDefault', type: 'Uint' },
235
- 0x487: { name: 'TagString', type: 'String' },
236
- 0x485: { name: 'TagBinary', type: 'Binary' },
237
- };
238
- class WebmBase {
239
- source;
240
- data;
241
- name;
242
- type;
243
- constructor(name = 'Unknown', type = 'Unknown') {
244
- this.name = name;
245
- this.type = type;
246
- }
247
- updateBySource() { }
248
- setSource(source) {
249
- this.source = source;
250
- this.updateBySource();
251
- }
252
- updateByData() { }
253
- setData(data) {
254
- this.data = data;
255
- this.updateByData();
256
- }
257
- }
258
- class WebmUint extends WebmBase {
259
- constructor(name, type) {
260
- super(name, type || 'Uint');
261
- }
262
- updateBySource() {
263
- // use hex representation of a number instead of number value
264
- this.data = '';
265
- for (let i = 0; i < this.source.length; i++) {
266
- const hex = this.source[i].toString(16);
267
- this.data += padHex(hex);
268
- }
269
- }
270
- updateByData() {
271
- const length = this.data.length / 2;
272
- this.source = new Uint8Array(length);
273
- for (let i = 0; i < length; i++) {
274
- const hex = this.data.substr(i * 2, 2);
275
- this.source[i] = parseInt(hex, 16);
276
- }
277
- }
278
- getValue() {
279
- return parseInt(this.data, 16);
280
- }
281
- setValue(value) {
282
- this.setData(padHex(value.toString(16)));
283
- }
284
- }
285
- function padHex(hex) {
286
- return hex.length % 2 === 1 ? '0' + hex : hex;
287
- }
288
- class WebmFloat extends WebmBase {
289
- constructor(name, type) {
290
- super(name, type || 'Float');
291
- }
292
- getFloatArrayType() {
293
- return this.source && this.source.length === 4
294
- ? Float32Array
295
- : Float64Array;
296
- }
297
- updateBySource() {
298
- const byteArray = this.source.reverse();
299
- const floatArrayType = this.getFloatArrayType();
300
- const buffer = new ArrayBuffer(byteArray.buffer.byteLength);
301
- new Uint8Array(buffer).set(new Uint8Array(byteArray.buffer));
302
- const floatArray = new floatArrayType(buffer);
303
- this.data = floatArray[0];
304
- }
305
- updateByData() {
306
- const floatArrayType = this.getFloatArrayType();
307
- const floatArray = new floatArrayType([this.data]);
308
- const byteArray = new Uint8Array(floatArray.buffer);
309
- this.source = byteArray.reverse();
310
- }
311
- getValue() {
312
- return this.data;
313
- }
314
- setValue(value) {
315
- this.setData(value);
316
- }
317
- }
318
- class WebmContainer extends WebmBase {
319
- offset = 0;
320
- data = [];
321
- constructor(name, type) {
322
- super(name, type || 'Container');
323
- }
324
- readByte() {
325
- return this.source[this.offset++];
326
- }
327
- readUint() {
328
- const firstByte = this.readByte();
329
- const bytes = 8 - firstByte.toString(2).length;
330
- let value = firstByte - (1 << (7 - bytes));
331
- for (let i = 0; i < bytes; i++) {
332
- // don't use bit operators to support x86
333
- value *= 256;
334
- value += this.readByte();
335
- }
336
- return value;
337
- }
338
- updateBySource() {
339
- let end = undefined;
340
- this.data = [];
341
- for (this.offset = 0; this.offset < this.source.length; this.offset = end) {
342
- const id = this.readUint();
343
- const len = this.readUint();
344
- end = Math.min(this.offset + len, this.source.length);
345
- const data = this.source.slice(this.offset, end);
346
- const info = sections[id] || { name: 'Unknown', type: 'Unknown' };
347
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
348
- let ctr = WebmBase;
349
- switch (info.type) {
350
- case 'Container':
351
- ctr = WebmContainer;
352
- break;
353
- case 'Uint':
354
- ctr = WebmUint;
355
- break;
356
- case 'Float':
357
- ctr = WebmFloat;
358
- break;
359
- }
360
- const section = new ctr(info.name, info.type);
361
- section.setSource(data);
362
- this.data.push({
363
- id,
364
- idHex: id.toString(16),
365
- data: section,
366
- });
367
- }
368
- }
369
- writeUint(x, draft = false) {
370
- let flag = 0x80;
371
- let bytes = 1;
372
- // eslint-disable-next-line no-empty
373
- for (; x >= flag && bytes < 8; bytes++, flag *= 0x80) { }
374
- if (!draft) {
375
- let value = flag + x;
376
- for (let i = bytes - 1; i >= 0; i--) {
377
- // don't use bit operators to support x86
378
- const c = value % 256;
379
- this.source[this.offset + i] = c;
380
- value = (value - c) / 256;
381
- }
382
- }
383
- this.offset += bytes;
384
- }
385
- writeSections(draft = false) {
386
- this.offset = 0;
387
- for (let i = 0; i < this.data.length; i++) {
388
- const section = this.data[i], content = section.data.source, contentLength = content.length;
389
- this.writeUint(section.id, draft);
390
- this.writeUint(contentLength, draft);
391
- if (!draft) {
392
- this.source.set(content, this.offset);
393
- }
394
- this.offset += contentLength;
395
- }
396
- return this.offset;
397
- }
398
- updateByData() {
399
- // run without accessing this.source to determine total length - need to know it to create Uint8Array
400
- const length = this.writeSections(true);
401
- this.source = new Uint8Array(length);
402
- // now really write data
403
- this.writeSections();
404
- }
405
- getSectionById(id) {
406
- for (let i = 0; i < this.data.length; i++) {
407
- const section = this.data[i];
408
- if (section.id === id) {
409
- return section.data;
410
- }
411
- }
412
- return undefined;
413
- }
414
- }
415
- class WebmFile extends WebmContainer {
416
- constructor(source) {
417
- super('File', 'File');
418
- this.setSource(source);
419
- }
420
- fixDuration(duration) {
421
- const segmentSection = this.getSectionById(0x8538067);
422
- if (!segmentSection) {
423
- return false;
424
- }
425
- const infoSection = segmentSection.getSectionById(0x549a966);
426
- if (!infoSection) {
427
- return false;
428
- }
429
- const timeScaleSection = infoSection.getSectionById(0xad7b1);
430
- if (!timeScaleSection) {
431
- return false;
432
- }
433
- let durationSection = infoSection.getSectionById(0x489);
434
- if (durationSection) {
435
- if (durationSection.getValue() <= 0) {
436
- durationSection.setValue(duration);
437
- }
438
- else {
439
- return false;
440
- }
441
- }
442
- else {
443
- // append Duration section
444
- durationSection = new WebmFloat('Duration', 'Float');
445
- durationSection.setValue(duration);
446
- infoSection.data.push({
447
- id: 0x489,
448
- data: durationSection,
449
- });
450
- }
451
- // set default time scale to 1 millisecond (1000000 nanoseconds)
452
- timeScaleSection.setValue(1000000);
453
- infoSection.updateByData();
454
- segmentSection.updateByData();
455
- this.updateByData();
456
- return true;
457
- }
458
- toBlob(type = 'video/webm') {
459
- const buffer = new ArrayBuffer(this.source.buffer.byteLength);
460
- new Uint8Array(buffer).set(new Uint8Array(this.source.buffer));
461
- return new Blob([buffer], { type });
462
- }
463
- }
464
- /**
465
- * Fixes duration on MediaRecorder output.
466
- * @param blob Input Blob with incorrect duration.
467
- * @param duration Correct duration (in milliseconds).
468
- * @param type Output blob mimetype (default: video/webm).
469
- * @returns
470
- */
471
- export const webmFixDuration = (blob, duration, type = 'video/webm') => {
472
- return new Promise((resolve, reject) => {
473
- try {
474
- const reader = new FileReader();
475
- reader.addEventListener('loadend', () => {
476
- try {
477
- const result = reader.result;
478
- const file = new WebmFile(new Uint8Array(result));
479
- if (file.fixDuration(duration)) {
480
- resolve(file.toBlob(type));
481
- }
482
- else {
483
- resolve(blob);
484
- }
485
- }
486
- catch (ex) {
487
- reject(ex);
488
- }
489
- });
490
- reader.addEventListener('error', () => reject(new Error('FileReader error')));
491
- reader.readAsArrayBuffer(blob);
492
- }
493
- catch (ex) {
494
- reject(ex);
495
- }
496
- });
497
- };
498
- //# sourceMappingURL=BlobFix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BlobFix.js","sourceRoot":"","sources":["../../../src/utils/BlobFix.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * There is a bug where `navigator.mediaDevices.getUserMedia` + `MediaRecorder`\n * creates WEBM files without duration metadata. See:\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=642012\n * - https://stackoverflow.com/a/39971175/13989043\n *\n * This file contains a function that fixes the duration metadata of a WEBM file.\n * - Answer found: https://stackoverflow.com/a/75218309/13989043\n * - Code adapted from: https://github.com/mat-sz/webm-fix-duration\n * (forked from https://github.com/yusitnikov/fix-webm-duration)\n */\n\n/*\n * This is the list of possible WEBM file sections by their IDs.\n * Possible types: Container, Binary, Uint, Int, String, Float, Date\n */\ninterface Section {\n name: string\n type: string\n}\n\nconst sections: Record<number, Section> = {\n 0xa45dfa3: { name: 'EBML', type: 'Container' },\n 0x286: { name: 'EBMLVersion', type: 'Uint' },\n 0x2f7: { name: 'EBMLReadVersion', type: 'Uint' },\n 0x2f2: { name: 'EBMLMaxIDLength', type: 'Uint' },\n 0x2f3: { name: 'EBMLMaxSizeLength', type: 'Uint' },\n 0x282: { name: 'DocType', type: 'String' },\n 0x287: { name: 'DocTypeVersion', type: 'Uint' },\n 0x285: { name: 'DocTypeReadVersion', type: 'Uint' },\n 0x6c: { name: 'Void', type: 'Binary' },\n 0x3f: { name: 'CRC-32', type: 'Binary' },\n 0xb538667: { name: 'SignatureSlot', type: 'Container' },\n 0x3e8a: { name: 'SignatureAlgo', type: 'Uint' },\n 0x3e9a: { name: 'SignatureHash', type: 'Uint' },\n 0x3ea5: { name: 'SignaturePublicKey', type: 'Binary' },\n 0x3eb5: { name: 'Signature', type: 'Binary' },\n 0x3e5b: { name: 'SignatureElements', type: 'Container' },\n 0x3e7b: { name: 'SignatureElementList', type: 'Container' },\n 0x2532: { name: 'SignedElement', type: 'Binary' },\n 0x8538067: { name: 'Segment', type: 'Container' },\n 0x14d9b74: { name: 'SeekHead', type: 'Container' },\n 0xdbb: { name: 'Seek', type: 'Container' },\n 0x13ab: { name: 'SeekID', type: 'Binary' },\n 0x13ac: { name: 'SeekPosition', type: 'Uint' },\n 0x549a966: { name: 'Info', type: 'Container' },\n 0x33a4: { name: 'SegmentUID', type: 'Binary' },\n 0x3384: { name: 'SegmentFilename', type: 'String' },\n 0x1cb923: { name: 'PrevUID', type: 'Binary' },\n 0x1c83ab: { name: 'PrevFilename', type: 'String' },\n 0x1eb923: { name: 'NextUID', type: 'Binary' },\n 0x1e83bb: { name: 'NextFilename', type: 'String' },\n 0x444: { name: 'SegmentFamily', type: 'Binary' },\n 0x2924: { name: 'ChapterTranslate', type: 'Container' },\n 0x29fc: { name: 'ChapterTranslateEditionUID', type: 'Uint' },\n 0x29bf: { name: 'ChapterTranslateCodec', type: 'Uint' },\n 0x29a5: { name: 'ChapterTranslateID', type: 'Binary' },\n 0xad7b1: { name: 'TimecodeScale', type: 'Uint' },\n 0x489: { name: 'Duration', type: 'Float' },\n 0x461: { name: 'DateUTC', type: 'Date' },\n 0x3ba9: { name: 'Title', type: 'String' },\n 0xd80: { name: 'MuxingApp', type: 'String' },\n 0x1741: { name: 'WritingApp', type: 'String' },\n // 0xf43b675: { name: 'Cluster', type: 'Container' },\n 0x67: { name: 'Timecode', type: 'Uint' },\n 0x1854: { name: 'SilentTracks', type: 'Container' },\n 0x18d7: { name: 'SilentTrackNumber', type: 'Uint' },\n 0x27: { name: 'Position', type: 'Uint' },\n 0x2b: { name: 'PrevSize', type: 'Uint' },\n 0x23: { name: 'SimpleBlock', type: 'Binary' },\n 0x20: { name: 'BlockGroup', type: 'Container' },\n 0x21: { name: 'Block', type: 'Binary' },\n 0x22: { name: 'BlockVirtual', type: 'Binary' },\n 0x35a1: { name: 'BlockAdditions', type: 'Container' },\n 0x26: { name: 'BlockMore', type: 'Container' },\n 0x6e: { name: 'BlockAddID', type: 'Uint' },\n 0x25: { name: 'BlockAdditional', type: 'Binary' },\n 0x1b: { name: 'BlockDuration', type: 'Uint' },\n 0x7a: { name: 'ReferencePriority', type: 'Uint' },\n 0x7b: { name: 'ReferenceBlock', type: 'Int' },\n 0x7d: { name: 'ReferenceVirtual', type: 'Int' },\n 0x24: { name: 'CodecState', type: 'Binary' },\n 0x35a2: { name: 'DiscardPadding', type: 'Int' },\n 0xe: { name: 'Slices', type: 'Container' },\n 0x68: { name: 'TimeSlice', type: 'Container' },\n 0x4c: { name: 'LaceNumber', type: 'Uint' },\n 0x4d: { name: 'FrameNumber', type: 'Uint' },\n 0x4b: { name: 'BlockAdditionID', type: 'Uint' },\n 0x4e: { name: 'Delay', type: 'Uint' },\n 0x4f: { name: 'SliceDuration', type: 'Uint' },\n 0x48: { name: 'ReferenceFrame', type: 'Container' },\n 0x49: { name: 'ReferenceOffset', type: 'Uint' },\n 0x4a: { name: 'ReferenceTimeCode', type: 'Uint' },\n 0x2f: { name: 'EncryptedBlock', type: 'Binary' },\n 0x654ae6b: { name: 'Tracks', type: 'Container' },\n 0x2e: { name: 'TrackEntry', type: 'Container' },\n 0x57: { name: 'TrackNumber', type: 'Uint' },\n 0x33c5: { name: 'TrackUID', type: 'Uint' },\n 0x3: { name: 'TrackType', type: 'Uint' },\n 0x39: { name: 'FlagEnabled', type: 'Uint' },\n 0x8: { name: 'FlagDefault', type: 'Uint' },\n 0x15aa: { name: 'FlagForced', type: 'Uint' },\n 0x1c: { name: 'FlagLacing', type: 'Uint' },\n 0x2de7: { name: 'MinCache', type: 'Uint' },\n 0x2df8: { name: 'MaxCache', type: 'Uint' },\n 0x3e383: { name: 'DefaultDuration', type: 'Uint' },\n 0x34e7a: { name: 'DefaultDecodedFieldDuration', type: 'Uint' },\n 0x3314f: { name: 'TrackTimecodeScale', type: 'Float' },\n 0x137f: { name: 'TrackOffset', type: 'Int' },\n 0x15ee: { name: 'MaxBlockAdditionID', type: 'Uint' },\n 0x136e: { name: 'Name', type: 'String' },\n 0x2b59c: { name: 'Language', type: 'String' },\n 0x6: { name: 'CodecID', type: 'String' },\n 0x23a2: { name: 'CodecPrivate', type: 'Binary' },\n 0x58688: { name: 'CodecName', type: 'String' },\n 0x3446: { name: 'AttachmentLink', type: 'Uint' },\n 0x1a9697: { name: 'CodecSettings', type: 'String' },\n 0x1b4040: { name: 'CodecInfoURL', type: 'String' },\n 0x6b240: { name: 'CodecDownloadURL', type: 'String' },\n 0x2a: { name: 'CodecDecodeAll', type: 'Uint' },\n 0x2fab: { name: 'TrackOverlay', type: 'Uint' },\n 0x16aa: { name: 'CodecDelay', type: 'Uint' },\n 0x16bb: { name: 'SeekPreRoll', type: 'Uint' },\n 0x2624: { name: 'TrackTranslate', type: 'Container' },\n 0x26fc: { name: 'TrackTranslateEditionUID', type: 'Uint' },\n 0x26bf: { name: 'TrackTranslateCodec', type: 'Uint' },\n 0x26a5: { name: 'TrackTranslateTrackID', type: 'Binary' },\n 0x60: { name: 'Video', type: 'Container' },\n 0x1a: { name: 'FlagInterlaced', type: 'Uint' },\n 0x13b8: { name: 'StereoMode', type: 'Uint' },\n 0x13c0: { name: 'AlphaMode', type: 'Uint' },\n 0x13b9: { name: 'OldStereoMode', type: 'Uint' },\n 0x30: { name: 'PixelWidth', type: 'Uint' },\n 0x3a: { name: 'PixelHeight', type: 'Uint' },\n 0x14aa: { name: 'PixelCropBottom', type: 'Uint' },\n 0x14bb: { name: 'PixelCropTop', type: 'Uint' },\n 0x14cc: { name: 'PixelCropLeft', type: 'Uint' },\n 0x14dd: { name: 'PixelCropRight', type: 'Uint' },\n 0x14b0: { name: 'DisplayWidth', type: 'Uint' },\n 0x14ba: { name: 'DisplayHeight', type: 'Uint' },\n 0x14b2: { name: 'DisplayUnit', type: 'Uint' },\n 0x14b3: { name: 'AspectRatioType', type: 'Uint' },\n 0xeb524: { name: 'ColourSpace', type: 'Binary' },\n 0xfb523: { name: 'GammaValue', type: 'Float' },\n 0x383e3: { name: 'FrameRate', type: 'Float' },\n 0x61: { name: 'Audio', type: 'Container' },\n 0x35: { name: 'SamplingFrequency', type: 'Float' },\n 0x38b5: { name: 'OutputSamplingFrequency', type: 'Float' },\n 0x1f: { name: 'Channels', type: 'Uint' },\n 0x3d7b: { name: 'ChannelPositions', type: 'Binary' },\n 0x2264: { name: 'BitDepth', type: 'Uint' },\n 0x62: { name: 'TrackOperation', type: 'Container' },\n 0x63: { name: 'TrackCombinePlanes', type: 'Container' },\n 0x64: { name: 'TrackPlane', type: 'Container' },\n 0x65: { name: 'TrackPlaneUID', type: 'Uint' },\n 0x66: { name: 'TrackPlaneType', type: 'Uint' },\n 0x69: { name: 'TrackJoinBlocks', type: 'Container' },\n 0x6d: { name: 'TrackJoinUID', type: 'Uint' },\n 0x40: { name: 'TrickTrackUID', type: 'Uint' },\n 0x41: { name: 'TrickTrackSegmentUID', type: 'Binary' },\n 0x46: { name: 'TrickTrackFlag', type: 'Uint' },\n 0x47: { name: 'TrickMasterTrackUID', type: 'Uint' },\n 0x44: { name: 'TrickMasterTrackSegmentUID', type: 'Binary' },\n 0x2d80: { name: 'ContentEncodings', type: 'Container' },\n 0x2240: { name: 'ContentEncoding', type: 'Container' },\n 0x1031: { name: 'ContentEncodingOrder', type: 'Uint' },\n 0x1032: { name: 'ContentEncodingScope', type: 'Uint' },\n 0x1033: { name: 'ContentEncodingType', type: 'Uint' },\n 0x1034: { name: 'ContentCompression', type: 'Container' },\n 0x254: { name: 'ContentCompAlgo', type: 'Uint' },\n 0x255: { name: 'ContentCompSettings', type: 'Binary' },\n 0x1035: { name: 'ContentEncryption', type: 'Container' },\n 0x7e1: { name: 'ContentEncAlgo', type: 'Uint' },\n 0x7e2: { name: 'ContentEncKeyID', type: 'Binary' },\n 0x7e3: { name: 'ContentSignature', type: 'Binary' },\n 0x7e4: { name: 'ContentSigKeyID', type: 'Binary' },\n 0x7e5: { name: 'ContentSigAlgo', type: 'Uint' },\n 0x7e6: { name: 'ContentSigHashAlgo', type: 'Uint' },\n 0xc53bb6b: { name: 'Cues', type: 'Container' },\n 0x3b: { name: 'CuePoint', type: 'Container' },\n 0x33: { name: 'CueTime', type: 'Uint' },\n 0x37: { name: 'CueTrackPositions', type: 'Container' },\n 0x77: { name: 'CueTrack', type: 'Uint' },\n 0x71: { name: 'CueClusterPosition', type: 'Uint' },\n 0x70: { name: 'CueRelativePosition', type: 'Uint' },\n 0x32: { name: 'CueDuration', type: 'Uint' },\n 0x1378: { name: 'CueBlockNumber', type: 'Uint' },\n 0x6a: { name: 'CueCodecState', type: 'Uint' },\n 0x5b: { name: 'CueReference', type: 'Container' },\n 0x16: { name: 'CueRefTime', type: 'Uint' },\n 0x17: { name: 'CueRefCluster', type: 'Uint' },\n 0x135f: { name: 'CueRefNumber', type: 'Uint' },\n 0x6b: { name: 'CueRefCodecState', type: 'Uint' },\n 0x941a469: { name: 'Attachments', type: 'Container' },\n 0x21a7: { name: 'AttachedFile', type: 'Container' },\n 0x67e: { name: 'FileDescription', type: 'String' },\n 0x66e: { name: 'FileName', type: 'String' },\n 0x660: { name: 'FileMimeType', type: 'String' },\n 0x65c: { name: 'FileData', type: 'Binary' },\n 0x6ae: { name: 'FileUID', type: 'Uint' },\n 0x675: { name: 'FileReferral', type: 'Binary' },\n 0x661: { name: 'FileUsedStartTime', type: 'Uint' },\n 0x662: { name: 'FileUsedEndTime', type: 'Uint' },\n 0x43a770: { name: 'Chapters', type: 'Container' },\n 0x5b9: { name: 'EditionEntry', type: 'Container' },\n 0x5bc: { name: 'EditionUID', type: 'Uint' },\n 0x5bd: { name: 'EditionFlagHidden', type: 'Uint' },\n 0x5db: { name: 'EditionFlagDefault', type: 'Uint' },\n 0x5dd: { name: 'EditionFlagOrdered', type: 'Uint' },\n 0x36: { name: 'ChapterAtom', type: 'Container' },\n 0x33c4: { name: 'ChapterUID', type: 'Uint' },\n 0x1654: { name: 'ChapterStringUID', type: 'String' },\n 0x11: { name: 'ChapterTimeStart', type: 'Uint' },\n 0x12: { name: 'ChapterTimeEnd', type: 'Uint' },\n 0x18: { name: 'ChapterFlagHidden', type: 'Uint' },\n 0x598: { name: 'ChapterFlagEnabled', type: 'Uint' },\n 0x2e67: { name: 'ChapterSegmentUID', type: 'Binary' },\n 0x2ebc: { name: 'ChapterSegmentEditionUID', type: 'Uint' },\n 0x23c3: { name: 'ChapterPhysicalEquiv', type: 'Uint' },\n 0xf: { name: 'ChapterTrack', type: 'Container' },\n 0x9: { name: 'ChapterTrackNumber', type: 'Uint' },\n 0x0: { name: 'ChapterDisplay', type: 'Container' },\n 0x5: { name: 'ChapString', type: 'String' },\n 0x37c: { name: 'ChapLanguage', type: 'String' },\n 0x37e: { name: 'ChapCountry', type: 'String' },\n 0x2944: { name: 'ChapProcess', type: 'Container' },\n 0x2955: { name: 'ChapProcessCodecID', type: 'Uint' },\n 0x50d: { name: 'ChapProcessPrivate', type: 'Binary' },\n 0x2911: { name: 'ChapProcessCommand', type: 'Container' },\n 0x2922: { name: 'ChapProcessTime', type: 'Uint' },\n 0x2933: { name: 'ChapProcessData', type: 'Binary' },\n 0x254c367: { name: 'Tags', type: 'Container' },\n 0x3373: { name: 'Tag', type: 'Container' },\n 0x23c0: { name: 'Targets', type: 'Container' },\n 0x28ca: { name: 'TargetTypeValue', type: 'Uint' },\n 0x23ca: { name: 'TargetType', type: 'String' },\n 0x23c5: { name: 'TagTrackUID', type: 'Uint' },\n 0x23c9: { name: 'TagEditionUID', type: 'Uint' },\n 0x23c4: { name: 'TagChapterUID', type: 'Uint' },\n 0x23c6: { name: 'TagAttachmentUID', type: 'Uint' },\n 0x27c8: { name: 'SimpleTag', type: 'Container' },\n 0x5a3: { name: 'TagName', type: 'String' },\n 0x47a: { name: 'TagLanguage', type: 'String' },\n 0x484: { name: 'TagDefault', type: 'Uint' },\n 0x487: { name: 'TagString', type: 'String' },\n 0x485: { name: 'TagBinary', type: 'Binary' },\n}\n\nclass WebmBase<T> {\n source?: Uint8Array\n data?: T\n name: string\n type: string\n\n constructor(name = 'Unknown', type = 'Unknown') {\n this.name = name\n this.type = type\n }\n\n updateBySource() {}\n\n setSource(source: Uint8Array) {\n this.source = source\n this.updateBySource()\n }\n\n updateByData() {}\n\n setData(data: T) {\n this.data = data\n this.updateByData()\n }\n}\n\nclass WebmUint extends WebmBase<string> {\n constructor(name: string, type: string) {\n super(name, type || 'Uint')\n }\n\n updateBySource() {\n // use hex representation of a number instead of number value\n this.data = ''\n for (let i = 0; i < this.source!.length; i++) {\n const hex = this.source![i].toString(16)\n this.data += padHex(hex)\n }\n }\n\n updateByData() {\n const length = this.data!.length / 2\n this.source = new Uint8Array(length)\n for (let i = 0; i < length; i++) {\n const hex = this.data!.substr(i * 2, 2)\n this.source[i] = parseInt(hex, 16)\n }\n }\n\n getValue() {\n return parseInt(this.data!, 16)\n }\n\n setValue(value: number) {\n this.setData(padHex(value.toString(16)))\n }\n}\n\nfunction padHex(hex: string) {\n return hex.length % 2 === 1 ? '0' + hex : hex\n}\n\nclass WebmFloat extends WebmBase<number> {\n constructor(name: string, type: string) {\n super(name, type || 'Float')\n }\n\n getFloatArrayType() {\n return this.source && this.source.length === 4\n ? Float32Array\n : Float64Array\n }\n updateBySource() {\n const byteArray = this.source!.reverse()\n const floatArrayType = this.getFloatArrayType()\n const buffer = new ArrayBuffer(byteArray.buffer.byteLength)\n new Uint8Array(buffer).set(new Uint8Array(byteArray.buffer))\n const floatArray = new floatArrayType(buffer)\n this.data! = floatArray[0]\n }\n updateByData() {\n const floatArrayType = this.getFloatArrayType()\n const floatArray = new floatArrayType([this.data!])\n const byteArray = new Uint8Array(floatArray.buffer)\n this.source = byteArray.reverse()\n }\n getValue() {\n return this.data\n }\n setValue(value: number) {\n this.setData(value)\n }\n}\n\ninterface ContainerData {\n id: number\n idHex?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: WebmBase<any>\n}\n\nclass WebmContainer extends WebmBase<ContainerData[]> {\n offset: number = 0\n data: ContainerData[] = []\n\n constructor(name: string, type: string) {\n super(name, type || 'Container')\n }\n\n readByte() {\n return this.source![this.offset++]\n }\n readUint() {\n const firstByte = this.readByte()\n const bytes = 8 - firstByte.toString(2).length\n let value = firstByte - (1 << (7 - bytes))\n for (let i = 0; i < bytes; i++) {\n // don't use bit operators to support x86\n value *= 256\n value += this.readByte()\n }\n return value\n }\n updateBySource() {\n let end: number | undefined = undefined\n this.data = []\n for (\n this.offset = 0;\n this.offset < this.source!.length;\n this.offset = end\n ) {\n const id = this.readUint()\n const len = this.readUint()\n end = Math.min(this.offset + len, this.source!.length)\n const data = this.source!.slice(this.offset, end)\n\n const info = sections[id] || { name: 'Unknown', type: 'Unknown' }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let ctr: any = WebmBase\n switch (info.type) {\n case 'Container':\n ctr = WebmContainer\n break\n case 'Uint':\n ctr = WebmUint\n break\n case 'Float':\n ctr = WebmFloat\n break\n }\n const section = new ctr(info.name, info.type)\n section.setSource(data)\n this.data.push({\n id,\n idHex: id.toString(16),\n data: section,\n })\n }\n }\n writeUint(x: number, draft = false) {\n let flag = 0x80\n let bytes = 1\n // eslint-disable-next-line no-empty\n for (; x >= flag && bytes < 8; bytes++, flag *= 0x80) {}\n\n if (!draft) {\n let value = flag + x\n for (let i = bytes - 1; i >= 0; i--) {\n // don't use bit operators to support x86\n const c = value % 256\n this.source![this.offset! + i] = c\n value = (value - c) / 256\n }\n }\n\n this.offset += bytes\n }\n\n writeSections(draft = false) {\n this.offset = 0\n for (let i = 0; i < this.data.length; i++) {\n const section = this.data[i],\n content = section.data.source,\n contentLength = content!.length\n this.writeUint(section.id, draft)\n this.writeUint(contentLength, draft)\n if (!draft) {\n this.source!.set(content!, this.offset)\n }\n this.offset += contentLength\n }\n return this.offset\n }\n\n updateByData() {\n // run without accessing this.source to determine total length - need to know it to create Uint8Array\n const length = this.writeSections(true)\n this.source = new Uint8Array(length)\n // now really write data\n this.writeSections()\n }\n\n getSectionById(id: number) {\n for (let i = 0; i < this.data.length; i++) {\n const section = this.data[i]\n if (section.id === id) {\n return section.data\n }\n }\n\n return undefined\n }\n}\n\nclass WebmFile extends WebmContainer {\n constructor(source: Uint8Array) {\n super('File', 'File')\n this.setSource(source)\n }\n\n fixDuration(duration: number) {\n const segmentSection = this.getSectionById(0x8538067) as WebmContainer\n if (!segmentSection) {\n return false\n }\n\n const infoSection = segmentSection.getSectionById(\n 0x549a966\n ) as WebmContainer\n if (!infoSection) {\n return false\n }\n\n const timeScaleSection = infoSection.getSectionById(\n 0xad7b1\n ) as WebmFloat\n if (!timeScaleSection) {\n return false\n }\n\n let durationSection = infoSection.getSectionById(0x489) as WebmFloat\n if (durationSection) {\n if (durationSection.getValue()! <= 0) {\n durationSection.setValue(duration)\n } else {\n return false\n }\n } else {\n // append Duration section\n durationSection = new WebmFloat('Duration', 'Float')\n durationSection.setValue(duration)\n infoSection.data.push({\n id: 0x489,\n data: durationSection,\n })\n }\n\n // set default time scale to 1 millisecond (1000000 nanoseconds)\n timeScaleSection.setValue(1000000)\n infoSection.updateByData()\n segmentSection.updateByData()\n this.updateByData()\n\n return true\n }\n\n toBlob(type = 'video/webm') {\n const buffer = new ArrayBuffer(this.source!.buffer.byteLength)\n new Uint8Array(buffer).set(new Uint8Array(this.source!.buffer))\n return new Blob([buffer], { type })\n }\n}\n\n/**\n * Fixes duration on MediaRecorder output.\n * @param blob Input Blob with incorrect duration.\n * @param duration Correct duration (in milliseconds).\n * @param type Output blob mimetype (default: video/webm).\n * @returns\n */\nexport const webmFixDuration = (\n blob: Blob,\n duration: number,\n type = 'video/webm'\n): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n try {\n const reader = new FileReader()\n\n reader.addEventListener('loadend', () => {\n try {\n const result = reader.result as ArrayBuffer\n const file = new WebmFile(new Uint8Array(result))\n if (file.fixDuration(duration)) {\n resolve(file.toBlob(type))\n } else {\n resolve(blob)\n }\n } catch (ex) {\n reject(ex)\n }\n })\n\n reader.addEventListener('error', () =>\n reject(new Error('FileReader error'))\n )\n\n reader.readAsArrayBuffer(blob)\n } catch (ex) {\n reject(ex)\n }\n })\n}\n"]}