flexaudio 0.3.0__tar.gz → 0.4.0__tar.gz

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 (129) hide show
  1. {flexaudio-0.3.0 → flexaudio-0.4.0}/Cargo.lock +17 -13
  2. {flexaudio-0.3.0 → flexaudio-0.4.0}/Cargo.toml +1 -1
  3. {flexaudio-0.3.0 → flexaudio-0.4.0}/PKG-INFO +3 -2
  4. {flexaudio-0.3.0 → flexaudio-0.4.0}/THIRD_PARTY_NOTICES.md +9 -9
  5. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/THIRD_PARTY_NOTICES.md +9 -9
  6. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/flexaudio.pyi +32 -2
  7. flexaudio-0.4.0/bindings/flexaudio-py/src/encode.rs +457 -0
  8. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/lib.rs +6 -3
  9. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/marshal.rs +85 -3
  10. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/stream.rs +112 -5
  11. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/vad.rs +7 -5
  12. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/Cargo.toml +6 -6
  13. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/README.md +1 -1
  14. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/lib.rs +23 -8
  15. flexaudio-0.4.0/crates/flexaudio/src/mix/permission_tests.rs +273 -0
  16. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/mix.rs +19 -1
  17. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/processes.rs +1 -1
  18. flexaudio-0.4.0/crates/flexaudio/src/stream/permission_tests.rs +403 -0
  19. flexaudio-0.4.0/crates/flexaudio/src/stream/terminal.rs +34 -0
  20. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/stream.rs +270 -23
  21. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/backend.rs +11 -1
  22. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/lib.rs +2 -2
  23. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/types.rs +149 -4
  24. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/Cargo.toml +1 -1
  25. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/src/writer.rs +319 -20
  26. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/Cargo.toml +9 -1
  27. flexaudio-0.4.0/crates/flexaudio-mic/src/capture_owner.rs +372 -0
  28. flexaudio-0.4.0/crates/flexaudio-mic/src/input_config.rs +84 -0
  29. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/src/lib.rs +159 -49
  30. flexaudio-0.4.0/crates/flexaudio-mic/src/mac_permission.rs +74 -0
  31. flexaudio-0.4.0/crates/flexaudio-mic/src/mac_policy/tests.rs +400 -0
  32. flexaudio-0.4.0/crates/flexaudio-mic/src/mac_policy.rs +249 -0
  33. flexaudio-0.4.0/crates/flexaudio-mic/src/permission.rs +45 -0
  34. flexaudio-0.4.0/crates/flexaudio-mic/src/windows_permission.rs +37 -0
  35. flexaudio-0.4.0/crates/flexaudio-mic/src/windows_policy.rs +106 -0
  36. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-linux/Cargo.toml +1 -1
  37. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-linux/src/processes.rs +326 -122
  38. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/Cargo.toml +5 -4
  39. flexaudio-0.4.0/crates/flexaudio-os-macos/README.md +57 -0
  40. flexaudio-0.4.0/crates/flexaudio-os-macos/src/activity.rs +126 -0
  41. flexaudio-0.4.0/crates/flexaudio-os-macos/src/capture_health.rs +340 -0
  42. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/common.rs +9 -3
  43. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/devices.rs +1 -1
  44. flexaudio-0.4.0/crates/flexaudio-os-macos/src/lib.rs +72 -0
  45. flexaudio-0.4.0/crates/flexaudio-os-macos/src/native_probe/capture.rs +288 -0
  46. flexaudio-0.4.0/crates/flexaudio-os-macos/src/native_probe/io.rs +263 -0
  47. flexaudio-0.4.0/crates/flexaudio-os-macos/src/native_probe/output.rs +239 -0
  48. flexaudio-0.4.0/crates/flexaudio-os-macos/src/native_probe.rs +181 -0
  49. flexaudio-0.4.0/crates/flexaudio-os-macos/src/probe/tests.rs +339 -0
  50. flexaudio-0.4.0/crates/flexaudio-os-macos/src/probe.rs +192 -0
  51. flexaudio-0.4.0/crates/flexaudio-os-macos/src/probe_signal.rs +453 -0
  52. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/process.rs +61 -4
  53. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/processes.rs +2 -2
  54. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/system.rs +148 -15
  55. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/tap.rs +56 -38
  56. flexaudio-0.4.0/crates/flexaudio-os-macos/src/terminal.rs +121 -0
  57. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/Cargo.toml +4 -1
  58. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/common.rs +167 -97
  59. flexaudio-0.4.0/crates/flexaudio-os-windows/src/format.rs +139 -0
  60. flexaudio-0.4.0/crates/flexaudio-os-windows/src/keepalive.rs +115 -0
  61. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/lib.rs +9 -1
  62. flexaudio-0.4.0/crates/flexaudio-os-windows/src/lifecycle.rs +349 -0
  63. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/process.rs +23 -15
  64. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/system.rs +156 -61
  65. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/README.md +1 -1
  66. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/examples/probe.rs +1 -1
  67. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/src/lib.rs +313 -79
  68. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/src/resample.rs +33 -1
  69. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/tests/speech_fixture.rs +3 -3
  70. {flexaudio-0.3.0 → flexaudio-0.4.0}/pyproject.toml +7 -9
  71. flexaudio-0.3.0/bindings/flexaudio-py/src/encode.rs +0 -254
  72. flexaudio-0.3.0/crates/flexaudio-os-macos/README.md +0 -32
  73. flexaudio-0.3.0/crates/flexaudio-os-macos/src/lib.rs +0 -41
  74. {flexaudio-0.3.0 → flexaudio-0.4.0}/LICENSE +0 -0
  75. {flexaudio-0.3.0 → flexaudio-0.4.0}/README.md +0 -0
  76. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/Cargo.toml +0 -0
  77. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/LICENSE +0 -0
  78. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/README.md +0 -0
  79. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/config.rs +0 -0
  80. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/denoise.rs +0 -0
  81. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/src/watcher.rs +0 -0
  82. {flexaudio-0.3.0 → flexaudio-0.4.0}/bindings/flexaudio-py/tests/test_exclude_pids.py +0 -0
  83. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/LICENSE +0 -0
  84. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/THIRD_PARTY_NOTICES.md +0 -0
  85. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/device_watcher.rs +0 -0
  86. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/src/mock.rs +0 -0
  87. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/tests/integration.rs +0 -0
  88. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio/tests/processes_linux.rs +0 -0
  89. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/Cargo.toml +0 -0
  90. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/LICENSE +0 -0
  91. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/README.md +0 -0
  92. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/chunk_ring.rs +0 -0
  93. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/clock.rs +0 -0
  94. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/normalizer.rs +0 -0
  95. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/process_list.rs +0 -0
  96. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/quant.rs +0 -0
  97. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/raw_ring.rs +0 -0
  98. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-core/src/secondary_ring.rs +0 -0
  99. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-denoise/Cargo.toml +0 -0
  100. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-denoise/LICENSE +0 -0
  101. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-denoise/README.md +0 -0
  102. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-denoise/src/lib.rs +0 -0
  103. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/LICENSE +0 -0
  104. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/README.md +0 -0
  105. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/src/error.rs +0 -0
  106. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/src/lib.rs +0 -0
  107. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-encode/tests/roundtrip.rs +0 -0
  108. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/LICENSE +0 -0
  109. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/README.md +0 -0
  110. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/src/windows_keeper.rs +0 -0
  111. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-mic/tests/windows_cpal_keeper.rs +0 -0
  112. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-linux/LICENSE +0 -0
  113. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-linux/README.md +0 -0
  114. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-linux/src/lib.rs +0 -0
  115. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/LICENSE +0 -0
  116. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-macos/src/version.rs +0 -0
  117. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/LICENSE +0 -0
  118. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/README.md +0 -0
  119. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/processes.rs +0 -0
  120. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-os-windows/src/version.rs +0 -0
  121. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/Cargo.toml +0 -0
  122. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/LICENSE +0 -0
  123. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/THIRD_PARTY_NOTICES.md +0 -0
  124. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/assets/silero_vad_openvino_16k.onnx +0 -0
  125. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/src/config.rs +0 -0
  126. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/src/infer.rs +0 -0
  127. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/src/segmenter.rs +0 -0
  128. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/tests/fixtures/jp_2spk_FF_4s_16k.probs.txt +0 -0
  129. {flexaudio-0.3.0 → flexaudio-0.4.0}/crates/flexaudio-vad/tests/fixtures/jp_2spk_FF_4s_16k.wav +0 -0
@@ -722,7 +722,7 @@ dependencies = [
722
722
 
723
723
  [[package]]
724
724
  name = "flexaudio"
725
- version = "0.3.0"
725
+ version = "0.4.0"
726
726
  dependencies = [
727
727
  "flexaudio-core",
728
728
  "flexaudio-denoise",
@@ -734,7 +734,7 @@ dependencies = [
734
734
 
735
735
  [[package]]
736
736
  name = "flexaudio-cli"
737
- version = "0.3.0"
737
+ version = "0.4.0"
738
738
  dependencies = [
739
739
  "clap",
740
740
  "ctrlc",
@@ -746,7 +746,7 @@ dependencies = [
746
746
 
747
747
  [[package]]
748
748
  name = "flexaudio-core"
749
- version = "0.3.0"
749
+ version = "0.4.0"
750
750
  dependencies = [
751
751
  "bitflags 2.13.0",
752
752
  "ringbuf",
@@ -757,14 +757,14 @@ dependencies = [
757
757
 
758
758
  [[package]]
759
759
  name = "flexaudio-denoise"
760
- version = "0.3.0"
760
+ version = "0.4.0"
761
761
  dependencies = [
762
762
  "nnnoiseless",
763
763
  ]
764
764
 
765
765
  [[package]]
766
766
  name = "flexaudio-encode"
767
- version = "0.3.0"
767
+ version = "0.4.0"
768
768
  dependencies = [
769
769
  "claxon",
770
770
  "flacenc",
@@ -774,7 +774,7 @@ dependencies = [
774
774
 
775
775
  [[package]]
776
776
  name = "flexaudio-ffi"
777
- version = "0.3.0"
777
+ version = "0.4.0"
778
778
  dependencies = [
779
779
  "flexaudio",
780
780
  "flexaudio-denoise",
@@ -784,15 +784,19 @@ dependencies = [
784
784
 
785
785
  [[package]]
786
786
  name = "flexaudio-mic"
787
- version = "0.3.0"
787
+ version = "0.4.0"
788
788
  dependencies = [
789
+ "block2",
789
790
  "cpal",
790
791
  "flexaudio-core",
792
+ "objc2",
793
+ "objc2-foundation",
794
+ "windows",
791
795
  ]
792
796
 
793
797
  [[package]]
794
798
  name = "flexaudio-napi"
795
- version = "0.3.0"
799
+ version = "0.4.0"
796
800
  dependencies = [
797
801
  "flexaudio",
798
802
  "flexaudio-denoise",
@@ -805,7 +809,7 @@ dependencies = [
805
809
 
806
810
  [[package]]
807
811
  name = "flexaudio-os-linux"
808
- version = "0.3.0"
812
+ version = "0.4.0"
809
813
  dependencies = [
810
814
  "flexaudio-core",
811
815
  "pipewire",
@@ -813,7 +817,7 @@ dependencies = [
813
817
 
814
818
  [[package]]
815
819
  name = "flexaudio-os-macos"
816
- version = "0.3.0"
820
+ version = "0.4.0"
817
821
  dependencies = [
818
822
  "block2",
819
823
  "flexaudio-core",
@@ -827,7 +831,7 @@ dependencies = [
827
831
 
828
832
  [[package]]
829
833
  name = "flexaudio-os-windows"
830
- version = "0.3.0"
834
+ version = "0.4.0"
831
835
  dependencies = [
832
836
  "flexaudio-core",
833
837
  "windows",
@@ -835,7 +839,7 @@ dependencies = [
835
839
 
836
840
  [[package]]
837
841
  name = "flexaudio-py"
838
- version = "0.3.0"
842
+ version = "0.4.0"
839
843
  dependencies = [
840
844
  "flexaudio",
841
845
  "flexaudio-denoise",
@@ -846,7 +850,7 @@ dependencies = [
846
850
 
847
851
  [[package]]
848
852
  name = "flexaudio-vad"
849
- version = "0.3.0"
853
+ version = "0.4.0"
850
854
  dependencies = [
851
855
  "rubato",
852
856
  "tract-onnx",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/flexaudio-core", "crates/flexaudio-os-windows", "crates/flexaudio-os-macos", "crates/flexaudio-os-linux", "crates/flexaudio-mic", "crates/flexaudio", "crates/flexaudio-vad", "crates/flexaudio-encode", "crates/flexaudio-denoise", "bindings/flexaudio-py"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0"
6
+ version = "0.4.0"
7
7
  edition = "2021"
8
8
  license = "MIT"
9
9
  rust-version = "1.85"
@@ -1,14 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flexaudio
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Topic :: Multimedia :: Sound/Audio :: Capture/Recording
7
- Classifier: License :: OSI Approved :: MIT License
8
7
  License-File: LICENSE
8
+ License-File: THIRD_PARTY_NOTICES.md
9
9
  Summary: Flexible cross-platform audio capture (microphone, system loopback, per-process) for Python, via native bindings to the flexaudio Rust library.
10
10
  Keywords: audio,capture,loopback,recording,pyo3
11
11
  Author: tubome (Studio Sadola)
12
+ License-Expression: MIT
12
13
  Requires-Python: >=3.8
13
14
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
14
15
  Project-URL: Repository, https://github.com/Studio-Sadola/flexaudio
@@ -2633,15 +2633,15 @@ SOFTWARE.
2633
2633
 
2634
2634
  Used by:
2635
2635
 
2636
- - [flexaudio 0.3.0](https://crates.io/crates/flexaudio/0.3.0)
2637
- - [flexaudio-core 0.3.0](https://crates.io/crates/flexaudio-core/0.3.0)
2638
- - [flexaudio-denoise 0.3.0](https://crates.io/crates/flexaudio-denoise/0.3.0)
2639
- - [flexaudio-encode 0.3.0](https://crates.io/crates/flexaudio-encode/0.3.0)
2640
- - [flexaudio-mic 0.3.0](https://crates.io/crates/flexaudio-mic/0.3.0)
2641
- - [flexaudio-os-linux 0.3.0](https://crates.io/crates/flexaudio-os-linux/0.3.0)
2642
- - [flexaudio-os-macos 0.3.0](https://crates.io/crates/flexaudio-os-macos/0.3.0)
2643
- - [flexaudio-os-windows 0.3.0](https://crates.io/crates/flexaudio-os-windows/0.3.0)
2644
- - [flexaudio-vad 0.3.0](https://crates.io/crates/flexaudio-vad/0.3.0)
2636
+ - [flexaudio 0.4.0](https://crates.io/crates/flexaudio/0.4.0)
2637
+ - [flexaudio-core 0.4.0](https://crates.io/crates/flexaudio-core/0.4.0)
2638
+ - [flexaudio-denoise 0.4.0](https://crates.io/crates/flexaudio-denoise/0.4.0)
2639
+ - [flexaudio-encode 0.4.0](https://crates.io/crates/flexaudio-encode/0.4.0)
2640
+ - [flexaudio-mic 0.4.0](https://crates.io/crates/flexaudio-mic/0.4.0)
2641
+ - [flexaudio-os-linux 0.4.0](https://crates.io/crates/flexaudio-os-linux/0.4.0)
2642
+ - [flexaudio-os-macos 0.4.0](https://crates.io/crates/flexaudio-os-macos/0.4.0)
2643
+ - [flexaudio-os-windows 0.4.0](https://crates.io/crates/flexaudio-os-windows/0.4.0)
2644
+ - [flexaudio-vad 0.4.0](https://crates.io/crates/flexaudio-vad/0.4.0)
2645
2645
 
2646
2646
  ````text
2647
2647
  MIT License
@@ -2633,15 +2633,15 @@ SOFTWARE.
2633
2633
 
2634
2634
  Used by:
2635
2635
 
2636
- - [flexaudio 0.3.0](https://crates.io/crates/flexaudio/0.3.0)
2637
- - [flexaudio-core 0.3.0](https://crates.io/crates/flexaudio-core/0.3.0)
2638
- - [flexaudio-denoise 0.3.0](https://crates.io/crates/flexaudio-denoise/0.3.0)
2639
- - [flexaudio-encode 0.3.0](https://crates.io/crates/flexaudio-encode/0.3.0)
2640
- - [flexaudio-mic 0.3.0](https://crates.io/crates/flexaudio-mic/0.3.0)
2641
- - [flexaudio-os-linux 0.3.0](https://crates.io/crates/flexaudio-os-linux/0.3.0)
2642
- - [flexaudio-os-macos 0.3.0](https://crates.io/crates/flexaudio-os-macos/0.3.0)
2643
- - [flexaudio-os-windows 0.3.0](https://crates.io/crates/flexaudio-os-windows/0.3.0)
2644
- - [flexaudio-vad 0.3.0](https://crates.io/crates/flexaudio-vad/0.3.0)
2636
+ - [flexaudio 0.4.0](https://crates.io/crates/flexaudio/0.4.0)
2637
+ - [flexaudio-core 0.4.0](https://crates.io/crates/flexaudio-core/0.4.0)
2638
+ - [flexaudio-denoise 0.4.0](https://crates.io/crates/flexaudio-denoise/0.4.0)
2639
+ - [flexaudio-encode 0.4.0](https://crates.io/crates/flexaudio-encode/0.4.0)
2640
+ - [flexaudio-mic 0.4.0](https://crates.io/crates/flexaudio-mic/0.4.0)
2641
+ - [flexaudio-os-linux 0.4.0](https://crates.io/crates/flexaudio-os-linux/0.4.0)
2642
+ - [flexaudio-os-macos 0.4.0](https://crates.io/crates/flexaudio-os-macos/0.4.0)
2643
+ - [flexaudio-os-windows 0.4.0](https://crates.io/crates/flexaudio-os-windows/0.4.0)
2644
+ - [flexaudio-vad 0.4.0](https://crates.io/crates/flexaudio-vad/0.4.0)
2645
2645
 
2646
2646
  ````text
2647
2647
  MIT License
@@ -18,7 +18,13 @@ exception; FlacEncoder propagates finalization errors only on normal exit.
18
18
  """
19
19
 
20
20
  from os import PathLike
21
- from typing import List, Optional, Sequence, Tuple, TypedDict, Union
21
+ from typing import List, Literal, Optional, Sequence, Tuple, TypedDict, Union
22
+
23
+ StreamEventType = Literal[
24
+ "chunkDropped", "stalled", "recovered", "permissionDenied", "permissionPending",
25
+ "silenceWhileSourceActive", "deviceLost", "error", "unknown"
26
+ ]
27
+ RecordingPermission = Literal["microphone", "systemAudio"]
22
28
 
23
29
  class VadSettings(TypedDict, total=False):
24
30
  threshold: float
@@ -88,9 +94,26 @@ class AudioChunk:
88
94
  def rms(self) -> float: ...
89
95
 
90
96
  class StreamEvent:
97
+ """Stream notification; permissionPending and silenceWhileSourceActive are advisories.
98
+
99
+ permissionPending carries permission and an actionable message; capture
100
+ continues and may remain silent until granted. permissionDenied is terminal
101
+ and carries permission and a cause/remedy message. silenceWhileSourceActive
102
+ means the system-audio diagnosis is inconclusive; capture continues because
103
+ missing permission and genuine digital silence remain possible. error carries
104
+ a message and may represent a terminal backend failure; consult terminal_error.
105
+
106
+ On macOS, system/process capture can confirm SystemAudio denial with an active
107
+ self-probe after sustained exact zeros and eligible external output activity.
108
+ Its separate private tap captures our own diagnostic output; this signal may
109
+ also enter user capture if our process is included. An inconclusive probe is
110
+ advisory only. Stopping cancels the probe without a late event.
111
+ """
91
112
  def __repr__(self) -> str: ...
92
113
  @property
93
- def type(self) -> str: ...
114
+ def type(self) -> StreamEventType: ...
115
+ @property
116
+ def permission(self) -> Optional[RecordingPermission]: ...
94
117
  @property
95
118
  def count(self) -> Optional[int]: ...
96
119
  @property
@@ -118,6 +141,13 @@ class Stream:
118
141
  def dropped_chunks(self) -> int: ...
119
142
  def poll_chunk(self) -> Optional[AudioChunk]: ...
120
143
  def poll_event(self) -> Optional[StreamEvent]: ...
144
+ def terminal_error(self) -> Optional[StreamEvent]:
145
+ """Retained terminal failure, including after stop; does not consume events.
146
+
147
+ poll_chunk, resume and switch_source raise RuntimeError once terminal.
148
+ A failed stream cannot be restarted; resolve the cause and open a new one.
149
+ """
150
+ ...
121
151
  def switch_source(
122
152
  self, kind: str, *, device_id: Optional[str] = None,
123
153
  process_id: Optional[int] = None, mode: str = "include", exclude_self: bool = False,