├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── build.md │ ├── chore.md │ ├── ci.md │ ├── config.yml │ ├── documentation.md │ ├── feature_request.md │ ├── performance.md │ ├── refactor.md │ ├── revert.md │ ├── style.md │ └── test.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── analyze.yaml ├── .gitignore ├── .metadata ├── .vscode ├── c_cpp_properties.json ├── launch.json ├── settings.json └── tasks.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── build.gradle ├── settings.gradle └── src │ └── main │ └── AndroidManifest.xml ├── example ├── .gitignore ├── .metadata ├── README.md ├── analysis_options copy.yaml ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── .cxx │ │ │ └── Debug │ │ │ │ └── 5i1255y6 │ │ │ │ ├── arm64-v8a │ │ │ │ ├── .cmake │ │ │ │ │ └── api │ │ │ │ │ │ └── v1 │ │ │ │ │ │ ├── query │ │ │ │ │ │ └── client-agp │ │ │ │ │ │ │ ├── cache-v2 │ │ │ │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ │ │ │ └── codemodel-v2 │ │ │ │ │ │ └── reply │ │ │ │ │ │ ├── cache-v2-32d46ad4048c5aaf990c.json │ │ │ │ │ │ ├── cmakeFiles-v1-241ada182bdec281307a.json │ │ │ │ │ │ ├── codemodel-v2-a03655a577fd570ad80f.json │ │ │ │ │ │ ├── directory-.-Debug-f5ebdc15457944623624.json │ │ │ │ │ │ └── index-2025-03-31T09-43-03-0666.json │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ │ ├── 3.22.1-g37088a8 │ │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ │ ├── CMakeSystem.cmake │ │ │ │ │ │ ├── CompilerIdC │ │ │ │ │ │ │ ├── CMakeCCompilerId.c │ │ │ │ │ │ │ └── CMakeCCompilerId.o │ │ │ │ │ │ └── CompilerIdCXX │ │ │ │ │ │ │ ├── CMakeCXXCompilerId.cpp │ │ │ │ │ │ │ └── CMakeCXXCompilerId.o │ │ │ │ │ ├── TargetDirectories.txt │ │ │ │ │ ├── cmake.check_cache │ │ │ │ │ └── rules.ninja │ │ │ │ ├── additional_project_files.txt │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── build_file_index.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── configure_fingerprint.bin │ │ │ │ ├── metadata_generation_command.txt │ │ │ │ ├── prefab_config.json │ │ │ │ └── symbol_folder_index.txt │ │ │ │ ├── armeabi-v7a │ │ │ │ ├── .cmake │ │ │ │ │ └── api │ │ │ │ │ │ └── v1 │ │ │ │ │ │ ├── query │ │ │ │ │ │ └── client-agp │ │ │ │ │ │ │ ├── cache-v2 │ │ │ │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ │ │ │ └── codemodel-v2 │ │ │ │ │ │ └── reply │ │ │ │ │ │ ├── cache-v2-152b882f7da94495ab15.json │ │ │ │ │ │ ├── cmakeFiles-v1-bb8a1d74b5fb57c5e33d.json │ │ │ │ │ │ ├── codemodel-v2-59b5e505704537ad8c93.json │ │ │ │ │ │ ├── directory-.-Debug-f5ebdc15457944623624.json │ │ │ │ │ │ └── index-2025-03-31T09-43-09-0753.json │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ │ ├── 3.22.1-g37088a8 │ │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ │ ├── CMakeSystem.cmake │ │ │ │ │ │ ├── CompilerIdC │ │ │ │ │ │ │ ├── CMakeCCompilerId.c │ │ │ │ │ │ │ └── CMakeCCompilerId.o │ │ │ │ │ │ └── CompilerIdCXX │ │ │ │ │ │ │ ├── CMakeCXXCompilerId.cpp │ │ │ │ │ │ │ └── CMakeCXXCompilerId.o │ │ │ │ │ ├── TargetDirectories.txt │ │ │ │ │ ├── cmake.check_cache │ │ │ │ │ └── rules.ninja │ │ │ │ ├── additional_project_files.txt │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── build_file_index.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── configure_fingerprint.bin │ │ │ │ ├── metadata_generation_command.txt │ │ │ │ ├── prefab_config.json │ │ │ │ └── symbol_folder_index.txt │ │ │ │ ├── hash_key.txt │ │ │ │ ├── x86 │ │ │ │ ├── .cmake │ │ │ │ │ └── api │ │ │ │ │ │ └── v1 │ │ │ │ │ │ ├── query │ │ │ │ │ │ └── client-agp │ │ │ │ │ │ │ ├── cache-v2 │ │ │ │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ │ │ │ └── codemodel-v2 │ │ │ │ │ │ └── reply │ │ │ │ │ │ ├── cache-v2-8e86bcaafae3a7d8e3e4.json │ │ │ │ │ │ ├── cmakeFiles-v1-003336abfe70de13df08.json │ │ │ │ │ │ ├── codemodel-v2-0fbb297bac4b0dfeca1f.json │ │ │ │ │ │ ├── directory-.-Debug-f5ebdc15457944623624.json │ │ │ │ │ │ └── index-2025-03-31T09-43-09-0958.json │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ │ ├── 3.22.1-g37088a8 │ │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ │ ├── CMakeSystem.cmake │ │ │ │ │ │ ├── CompilerIdC │ │ │ │ │ │ │ ├── CMakeCCompilerId.c │ │ │ │ │ │ │ └── CMakeCCompilerId.o │ │ │ │ │ │ └── CompilerIdCXX │ │ │ │ │ │ │ ├── CMakeCXXCompilerId.cpp │ │ │ │ │ │ │ └── CMakeCXXCompilerId.o │ │ │ │ │ ├── TargetDirectories.txt │ │ │ │ │ ├── cmake.check_cache │ │ │ │ │ └── rules.ninja │ │ │ │ ├── additional_project_files.txt │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── build_file_index.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── configure_fingerprint.bin │ │ │ │ ├── metadata_generation_command.txt │ │ │ │ ├── prefab_config.json │ │ │ │ └── symbol_folder_index.txt │ │ │ │ └── x86_64 │ │ │ │ ├── .cmake │ │ │ │ └── api │ │ │ │ │ └── v1 │ │ │ │ │ ├── query │ │ │ │ │ └── client-agp │ │ │ │ │ │ ├── cache-v2 │ │ │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ │ │ └── codemodel-v2 │ │ │ │ │ └── reply │ │ │ │ │ ├── cache-v2-c3548645ed54a48523a7.json │ │ │ │ │ ├── cmakeFiles-v1-432ff342d6b674b7d823.json │ │ │ │ │ ├── codemodel-v2-727aaac1f2f871b2fb46.json │ │ │ │ │ ├── directory-.-Debug-f5ebdc15457944623624.json │ │ │ │ │ └── index-2025-03-31T09-43-10-0134.json │ │ │ │ ├── CMakeCache.txt │ │ │ │ ├── CMakeFiles │ │ │ │ ├── 3.22.1-g37088a8 │ │ │ │ │ ├── CMakeCCompiler.cmake │ │ │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ │ │ ├── CMakeSystem.cmake │ │ │ │ │ ├── CompilerIdC │ │ │ │ │ │ ├── CMakeCCompilerId.c │ │ │ │ │ │ └── CMakeCCompilerId.o │ │ │ │ │ └── CompilerIdCXX │ │ │ │ │ │ ├── CMakeCXXCompilerId.cpp │ │ │ │ │ │ └── CMakeCXXCompilerId.o │ │ │ │ ├── TargetDirectories.txt │ │ │ │ ├── cmake.check_cache │ │ │ │ └── rules.ninja │ │ │ │ ├── additional_project_files.txt │ │ │ │ ├── android_gradle_build.json │ │ │ │ ├── android_gradle_build_mini.json │ │ │ │ ├── build.ninja │ │ │ │ ├── build_file_index.txt │ │ │ │ ├── cmake_install.cmake │ │ │ │ ├── configure_fingerprint.bin │ │ │ │ ├── metadata_generation_command.txt │ │ │ │ ├── prefab_config.json │ │ │ │ └── symbol_folder_index.txt │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── flutter_recorder_example │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-v21 │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable │ │ │ │ └── launch_background.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values-night │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Podfile │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ ├── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ └── LaunchImage.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ └── README.md │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ └── RunnerTests │ │ └── RunnerTests.swift ├── lib │ ├── loopback.dart │ ├── main.dart │ └── ui │ │ ├── bars.dart │ │ ├── fft_painter.dart │ │ ├── vu_meter.dart │ │ └── wave_painter.dart ├── linux │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ │ ├── CMakeLists.txt │ │ ├── generated_plugin_registrant.cc │ │ ├── generated_plugin_registrant.h │ │ └── generated_plugins.cmake │ └── runner │ │ ├── CMakeLists.txt │ │ ├── main.cc │ │ ├── my_application.cc │ │ └── my_application.h ├── macos │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── Podfile │ ├── Podfile.lock │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── app_icon_1024.png │ │ │ │ ├── app_icon_128.png │ │ │ │ ├── app_icon_16.png │ │ │ │ ├── app_icon_256.png │ │ │ │ ├── app_icon_32.png │ │ │ │ ├── app_icon_512.png │ │ │ │ └── app_icon_64.png │ │ ├── Base.lproj │ │ │ └── MainMenu.xib │ │ ├── Configs │ │ │ ├── AppInfo.xcconfig │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── Warnings.xcconfig │ │ ├── DebugProfile.entitlements │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ └── RunnerTests │ │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── test │ └── test_recording.dart ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json └── windows │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake │ └── runner │ ├── CMakeLists.txt │ ├── Runner.rc │ ├── flutter_window.cpp │ ├── flutter_window.h │ ├── main.cpp │ ├── resource.h │ ├── resources │ └── app_icon.ico │ ├── runner.exe.manifest │ ├── utils.cpp │ ├── utils.h │ ├── win32_window.cpp │ └── win32_window.h ├── ffigen.yaml ├── images ├── audio_data.png └── recorder.png ├── init_recorder_module.sh ├── ios ├── Classes │ ├── flutter_recorder.c │ └── flutter_recorder.mm └── flutter_recorder.podspec ├── lib ├── flutter_recorder.dart └── src │ ├── audio_data_container.dart │ ├── bindings │ ├── flutter_recorder_bindings_generated.dart │ ├── js_extension.dart │ ├── recorder.dart │ ├── recorder_io.dart │ └── recorder_web.dart │ ├── enums.dart │ ├── exceptions │ ├── exceptions.dart │ └── exceptions_from_cpp.dart │ ├── filters │ ├── autogain.dart │ ├── echo_cancellation.dart │ └── filters.dart │ ├── flutter_recorder.dart │ └── worker │ └── worker.dart ├── linux └── CMakeLists.txt ├── macos ├── Classes │ ├── flutter_recorder.c │ └── flutter_recorder.mm └── flutter_recorder.podspec ├── pubspec.yaml ├── src ├── CMakeLists.txt ├── analyzer.cpp ├── analyzer.h ├── capture.cpp ├── capture.h ├── circular_buffer.h ├── common.h ├── enums.h ├── fft │ ├── soloud_fft.cpp │ └── soloud_fft.h ├── filters │ ├── autogain.cpp │ ├── autogain.h │ ├── echo_cancellation.cpp │ ├── echo_cancellation.h │ ├── filters.cpp │ ├── filters.h │ └── generic_filter.h ├── flutter_recorder.c ├── flutter_recorder.cpp ├── flutter_recorder.h ├── miniaudio.h └── wav.h ├── wasm.sh ├── web.sh ├── web ├── compile_init_recorder_module.sh ├── compile_wasm.sh ├── compile_worker.sh ├── init_recorder_module.dart ├── init_recorder_module.dart.js ├── init_recorder_module.dart.js.deps ├── init_recorder_module.dart.js.map ├── libflutter_recorder_plugin.js ├── libflutter_recorder_plugin.wasm ├── worker.dart ├── worker.dart.js ├── worker.dart.js.deps └── worker.dart.js.map └── windows ├── .gitignore └── CMakeLists.txt /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [alnitak] -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Create a report to help us improve 4 | title: "fix: " 5 | --- 6 | 7 | **Description** 8 | 9 | A clear and concise description of what the bug is. 10 | 11 | **Steps To Reproduce** 12 | 13 | 1. Go to '...' 14 | 2. Click on '....' 15 | 3. Scroll down to '....' 16 | 4. See error 17 | 18 | **Expected Behavior** 19 | 20 | A clear and concise description of what you expected to happen. 21 | 22 | **Screenshots** 23 | 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional Context** 27 | 28 | Add any other context about the problem here. 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/build.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build System 3 | about: Changes that affect the build system or external dependencies 4 | title: "build: " 5 | labels: build 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the build system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The build system is passing 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/chore.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Chore 3 | about: Other changes that don't modify src or test files 4 | title: "chore: " 5 | labels: chore 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what change is needed and why. If this changes code then please use another issue type. 11 | 12 | **Requirements** 13 | 14 | - [ ] No functional changes to the code 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/ci.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Continuous Integration 3 | about: Changes to the CI configuration files and scripts 4 | title: "ci: " 5 | labels: ci 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the ci/cd system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The ci system is passing 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Improve the documentation so all collaborators have a common understanding 4 | title: "docs: " 5 | labels: documentation 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what documentation you are looking to add or improve. 11 | 12 | **Requirements** 13 | 14 | - [ ] Requirements go here 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: A new feature to be added to the project 4 | title: "feat: " 5 | labels: feature 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to add. The more context the better. 11 | 12 | **Requirements** 13 | 14 | - [ ] Checklist of requirements to be fulfilled 15 | 16 | **Additional Context** 17 | 18 | Add any other context or screenshots about the feature request go here. 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/performance.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Performance Update 3 | about: A code change that improves performance 4 | title: "perf: " 5 | labels: performance 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what code needs to be changed and what the performance impact is going to be. Bonus point's if you can tie this directly to user experience. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Refactor 3 | about: A code change that neither fixes a bug nor adds a feature 4 | title: "refactor: " 5 | labels: refactor 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what needs to be refactored and why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/revert.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Revert Commit 3 | about: Reverts a previous commit 4 | title: "revert: " 5 | labels: revert 6 | --- 7 | 8 | **Description** 9 | 10 | Provide a link to a PR/Commit that you are looking to revert and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] Change has been reverted 15 | - [ ] No change in test coverage has happened 16 | - [ ] A new ticket is created for any follow on work that needs to happen 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/style.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Style Changes 3 | about: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc) 4 | title: "style: " 5 | labels: style 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to change and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Test 3 | about: Adding missing tests or correcting existing tests 4 | title: "test: " 5 | labels: test 6 | --- 7 | 8 | **Description** 9 | 10 | List out the tests that need to be added or changed. Please also include any information as to why this was not covered in the past. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Description 10 | 11 | 12 | 13 | ## Type of Change 14 | 15 | 16 | 17 | - [ ] ✨ New feature (non-breaking change which adds functionality) 18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 20 | - [ ] 🧹 Code refactor 21 | - [ ] ✅ Build configuration change 22 | - [ ] 📝 Documentation 23 | - [ ] 🗑️ Chore 24 | -------------------------------------------------------------------------------- /.github/workflows/analyze.yaml: -------------------------------------------------------------------------------- 1 | name: Flutter Analyze 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | push: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | build: 13 | name: Analyze code and requirements 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v4 19 | 20 | - name: Setup Flutter 21 | uses: subosito/flutter-action@v2 22 | with: 23 | channel: 'stable' 24 | 25 | - name: Verify Flutter installation 26 | run: flutter doctor 27 | 28 | - name: Check pub dependencies 29 | run: flutter pub get 30 | 31 | - name: "Run Dart Analyze" 32 | uses: invertase/github-action-dart-analyzer@v3 33 | with: 34 | fatal-infos: true 35 | fatal-warnings: true 36 | annotate: true 37 | working-directory: lib/ 38 | 39 | - name: Check Code formatting 40 | run: dart format -o none --set-exit-if-changed . 41 | 42 | - name: Check pub.dev requirements 43 | run: flutter pub publish --dry-run 44 | 45 | - name: Block merge if checks fail 46 | if: ${{ failure() }} 47 | run: echo "Checks failed, cannot merge." && exit 1 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 26 | /pubspec.lock 27 | **/doc/api/ 28 | .dart_tool/ 29 | build/ 30 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3" 8 | channel: "stable" 9 | 10 | project_type: plugin_ffi 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 17 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 18 | - platform: android 19 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 20 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 21 | - platform: ios 22 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 23 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 24 | - platform: linux 25 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 26 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 27 | - platform: macos 28 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 29 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 30 | - platform: web 31 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 32 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 33 | - platform: windows 34 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 35 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Linux", 5 | "includePath": [ 6 | "${workspaceFolder}/**", 7 | "${workspaceFolder}/src/**", 8 | "${workspaceFolder}/src/fft/**" 9 | ], 10 | "defines": [], 11 | "compilerPath": "/usr/bin/clang", 12 | "cStandard": "c17", 13 | "cppStandard": "c++17", 14 | "intelliSenseMode": "linux-clang-x64" 15 | }, 16 | { 17 | "name": "Chrome", 18 | "includePath": [ 19 | "${workspaceFolder}/**", 20 | "${workspaceFolder}/src", 21 | "/usr/lib/emscripten/system/include" 22 | ], 23 | "defines": ["__EMSCRIPTEN__"], // to see the code in between "#if defined" 24 | "compilerPath": "/usr/bin/clang", 25 | "cStandard": "c17", 26 | "cppStandard": "c++17", 27 | "intelliSenseMode": "${default}", 28 | "configurationProvider": "ms-vscode.cmake-tools" 29 | }, 30 | { 31 | "name": "Win32", 32 | "includePath": [ 33 | "${workspaceFolder}/**", 34 | "${workspaceFolder}/src", 35 | "/usr/lib/emscripten/system/include" 36 | ], 37 | "defines": [ 38 | "_DEBUG", 39 | "UNICODE", 40 | "_UNICODE" 41 | ], 42 | "windowsSdkVersion": "10.0.19041.0", 43 | "compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe", 44 | "cStandard": "c17", 45 | "cppStandard": "c++17", 46 | "intelliSenseMode": "windows-msvc-x64", 47 | "configurationProvider": "ms-vscode.cmake-tools" 48 | } 49 | ], 50 | "version": 4 51 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "compile linux debug verbose", 6 | "command": "cd ${workspaceFolder}/example; flutter build linux -t lib/main.dart --debug --verbose", 7 | // "args": ["build", "linux", "--verbose"], 8 | "type": "shell" 9 | }, 10 | { 11 | "label": "compile linux debug", 12 | "command": "cd ${workspaceFolder}/example; flutter build linux -t lib/main.dart --debug", 13 | "type": "shell" 14 | }, 15 | { 16 | "label": "compile linux test debug", 17 | "command": "cd ${workspaceFolder}/example; flutter build linux -t tests/tests.dart --debug", 18 | "type": "shell" 19 | }, 20 | { 21 | "label": "compile windows debug verbose", 22 | "command": "cd ${workspaceFolder}/example; flutter build windows -t lib/main.dart --debug --verbose", 23 | "type": "shell" 24 | }, 25 | { 26 | "label": "compile windows debug", 27 | "command": "cd ${workspaceFolder}/example; flutter build windows -t lib/main.dart --debug", 28 | "type": "shell" 29 | }, 30 | { 31 | "label": "compile web release", 32 | "command": "cd ${workspaceFolder}/example; flutter run -d chrome --web-renderer canvaskit --web-browser-flag '--disable-web-security' -t lib/loopback.dart --release", 33 | "type": "shell" 34 | }, 35 | { 36 | "label": "compile WASM", 37 | "command": "sh ${workspaceFolder}/wasm.sh", 38 | "type": "shell" 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.1.1 2 | - fix building issue with XCode 16.3 #32 3 | - fix: `listPlaybackDevices` fails to retrieve devices when the device prefix contains Chinese characters #35 by @WHYBBE 4 | - fix: some legitimate paths are unavailable on Windows #38 by @WHYBBE 5 | 6 | ## 1.1.0 7 | - when calling AudioData.getAudioData is now possible to check if the audio data is the same as before. Useful to visualize waveforms. This is because AudioData.getAudioData returns the current data in the buffer and if it is called before the buffer has been updated, it will return the previous data. 8 | - better FFT data for a better visualization. 9 | 10 | ## 1.0.4 11 | - added getTexture and a check for all get* methods to know if the current data is the same audio data computed previously. 12 | - better FFT data 13 | 14 | ## 1.0.3 15 | - update WASM lib 16 | 17 | ## 1.0.2 18 | - resolved conflicts with flutter_soloud #25 19 | 20 | ## 1.0.1 21 | - detailed exception when passing an invalind file name to `startRecording` #23 22 | - removed deprecated `dart:js_util` 23 | 24 | ## 1.0.0 25 | - fixed choppy PCM playback on macOS #18. 26 | - fix `startRecording` empty path on the web 27 | 28 | ## 0.9.4 29 | - fixed mic permission iOS example 30 | - fixed `listCaptureDevices` when there are not input devices 31 | - update doc 32 | 33 | ## 0.9.3 34 | - added `autoGain` filter 35 | - breaking changes: 36 | - the `init` method is now async 37 | - `FilterType` renamed to `RecorderFilterType` 38 | - an [additional script](https://github.com/alnitak/flutter_recorder#web) must be added for the web platform. Now it looks like: 39 | ``` 40 | 41 | 42 | ``` 43 | 44 | ## 0.9.2 45 | - fix: the stop was instead einit the device 46 | - fix: removed dialog when stopping stream in the example 47 | 48 | ## 0.9.1 49 | - breaking changes: 50 | - renamed `startListen` to `start` 51 | - renamed `stopListen` to `stop` 52 | - renamed `isDeviceStartedListen` to `isDeviceStarted` 53 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.yaml 2 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .cxx 10 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // The Android Gradle Plugin builds the native code with the Android NDK. 2 | 3 | group = "com.example.flutter_recorder" 4 | version = "1.0" 5 | 6 | buildscript { 7 | repositories { 8 | google() 9 | mavenCentral() 10 | } 11 | 12 | dependencies { 13 | // The Android Gradle Plugin knows how to build native code with the NDK. 14 | classpath("com.android.tools.build:gradle:7.3.0") 15 | } 16 | } 17 | 18 | rootProject.allprojects { 19 | repositories { 20 | google() 21 | mavenCentral() 22 | } 23 | } 24 | 25 | apply plugin: "com.android.library" 26 | 27 | android { 28 | if (project.android.hasProperty("namespace")) { 29 | namespace = "com.example.flutter_recorder" 30 | } 31 | 32 | // Bumping the plugin compileSdk version requires all clients of this plugin 33 | // to bump the version in their app. 34 | compileSdk = 34 35 | 36 | // Use the NDK version 37 | // declared in /android/app/build.gradle file of the Flutter project. 38 | // Replace it with a version number if this plugin requires a specific NDK version. 39 | // (e.g. ndkVersion "23.1.7779620") 40 | ndkVersion = android.ndkVersion 41 | 42 | // Invoke the shared CMake build with the Android Gradle Plugin. 43 | externalNativeBuild { 44 | cmake { 45 | path = "../src/CMakeLists.txt" 46 | 47 | // The default CMake version for the Android Gradle Plugin is 3.10.2. 48 | // https://developer.android.com/studio/projects/install-ndk#vanilla_cmake 49 | // 50 | // The Flutter tooling requires that developers have CMake 3.10 or later 51 | // installed. You should not increase this version, as doing so will cause 52 | // the plugin to fail to compile for some customers of the plugin. 53 | // version "3.10.2" 54 | } 55 | } 56 | 57 | compileOptions { 58 | sourceCompatibility = JavaVersion.VERSION_1_8 59 | targetCompatibility = JavaVersion.VERSION_1_8 60 | } 61 | 62 | defaultConfig { 63 | minSdk = 21 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'flutter_recorder' 2 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .build/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | .swiftpm/ 13 | migrate_working_dir/ 14 | 15 | # IntelliJ related 16 | *.iml 17 | *.ipr 18 | *.iws 19 | .idea/ 20 | 21 | # The .vscode folder contains launch configuration and tasks you configure in 22 | # VS Code which you may wish to be included in version control, so this line 23 | # is commented out by default. 24 | #.vscode/ 25 | 26 | # Flutter/Dart/Pub related 27 | **/doc/api/ 28 | **/ios/Flutter/.last_build_id 29 | .dart_tool/ 30 | .flutter-plugins 31 | .flutter-plugins-dependencies 32 | .pub-cache/ 33 | .pub/ 34 | /build/ 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Android Studio will place build artifacts here 43 | /android/app/debug 44 | /android/app/profile 45 | /android/app/release 46 | -------------------------------------------------------------------------------- /example/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 17 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 18 | - platform: android 19 | create_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 20 | base_revision: 68415ad1d920f6fe5ec284f5c2febf7c4dd5b0b3 21 | 22 | # User provided section 23 | 24 | # List of Local paths (relative to this file) that should be 25 | # ignored by the migrate tool. 26 | # 27 | # Files that are not part of the templates will be ignored by default. 28 | unmanaged_files: 29 | - 'lib/main.dart' 30 | - 'ios/Runner.xcodeproj/project.pbxproj' 31 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # flutter_recorder_example 2 | 3 | Demonstrates how to use the flutter_recorder plugin. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /example/analysis_options copy.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.yaml 2 | -------------------------------------------------------------------------------- /example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /example/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/to/reference-keystore 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-a03655a577fd570ad80f.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations" : 3 | [ 4 | { 5 | "directories" : 6 | [ 7 | { 8 | "build" : ".", 9 | "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json", 10 | "minimumCMakeVersion" : 11 | { 12 | "string" : "3.6.0" 13 | }, 14 | "projectIndex" : 0, 15 | "source" : "." 16 | } 17 | ], 18 | "name" : "Debug", 19 | "projects" : 20 | [ 21 | { 22 | "directoryIndexes" : 23 | [ 24 | 0 25 | ], 26 | "name" : "Project" 27 | } 28 | ], 29 | "targets" : [] 30 | } 31 | ], 32 | "kind" : "codemodel", 33 | "paths" : 34 | { 35 | "build" : "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a", 36 | "source" : "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy" 37 | }, 38 | "version" : 39 | { 40 | "major" : 2, 41 | "minor" : 3 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json: -------------------------------------------------------------------------------- 1 | { 2 | "backtraceGraph" : 3 | { 4 | "commands" : [], 5 | "files" : [], 6 | "nodes" : [] 7 | }, 8 | "installers" : [], 9 | "paths" : 10 | { 11 | "build" : ".", 12 | "source" : "." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/.cmake/api/v1/reply/index-2025-03-31T09-43-03-0666.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake" : 3 | { 4 | "generator" : 5 | { 6 | "multiConfig" : false, 7 | "name" : "Ninja" 8 | }, 9 | "paths" : 10 | { 11 | "cmake" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake", 12 | "cpack" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cpack", 13 | "ctest" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ctest", 14 | "root" : "/home/deimos/Android/Sdk/cmake/3.22.1/share/cmake-3.22" 15 | }, 16 | "version" : 17 | { 18 | "isDirty" : false, 19 | "major" : 3, 20 | "minor" : 22, 21 | "patch" : 1, 22 | "string" : "3.22.1-g37088a8", 23 | "suffix" : "g37088a8" 24 | } 25 | }, 26 | "objects" : 27 | [ 28 | { 29 | "jsonFile" : "codemodel-v2-a03655a577fd570ad80f.json", 30 | "kind" : "codemodel", 31 | "version" : 32 | { 33 | "major" : 2, 34 | "minor" : 3 35 | } 36 | }, 37 | { 38 | "jsonFile" : "cache-v2-32d46ad4048c5aaf990c.json", 39 | "kind" : "cache", 40 | "version" : 41 | { 42 | "major" : 2, 43 | "minor" : 0 44 | } 45 | }, 46 | { 47 | "jsonFile" : "cmakeFiles-v1-241ada182bdec281307a.json", 48 | "kind" : "cmakeFiles", 49 | "version" : 50 | { 51 | "major" : 1, 52 | "minor" : 0 53 | } 54 | } 55 | ], 56 | "reply" : 57 | { 58 | "client-agp" : 59 | { 60 | "cache-v2" : 61 | { 62 | "jsonFile" : "cache-v2-32d46ad4048c5aaf990c.json", 63 | "kind" : "cache", 64 | "version" : 65 | { 66 | "major" : 2, 67 | "minor" : 0 68 | } 69 | }, 70 | "cmakeFiles-v1" : 71 | { 72 | "jsonFile" : "cmakeFiles-v1-241ada182bdec281307a.json", 73 | "kind" : "cmakeFiles", 74 | "version" : 75 | { 76 | "major" : 1, 77 | "minor" : 0 78 | } 79 | }, 80 | "codemodel-v2" : 81 | { 82 | "jsonFile" : "codemodel-v2-a03655a577fd570ad80f.json", 83 | "kind" : "codemodel", 84 | "version" : 85 | { 86 | "major" : 2, 87 | "minor" : 3 88 | } 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Linux-6.12.20-2-MANJARO") 2 | set(CMAKE_HOST_SYSTEM_NAME "Linux") 3 | set(CMAKE_HOST_SYSTEM_VERSION "6.12.20-2-MANJARO") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "aarch64") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/edit_cache.dir 2 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/rebuild_cache.dir 3 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/CMakeFiles/rules.ninja: -------------------------------------------------------------------------------- 1 | # CMAKE generated file: DO NOT EDIT! 2 | # Generated by "Ninja" Generator, CMake Version 3.22 3 | 4 | # This file contains all the rules used to get the outputs files 5 | # built from the input files. 6 | # It is included in the main 'build.ninja'. 7 | 8 | # ============================================================================= 9 | # Project: Project 10 | # Configurations: Debug 11 | # ============================================================================= 12 | # ============================================================================= 13 | 14 | ############################################# 15 | # Rule for running custom commands. 16 | 17 | rule CUSTOM_COMMAND 18 | command = $COMMAND 19 | description = $DESC 20 | 21 | 22 | ############################################# 23 | # Rule for re-running cmake. 24 | 25 | rule RERUN_CMAKE 26 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake --regenerate-during-build -S/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a 27 | description = Re-running CMake... 28 | generator = 1 29 | 30 | 31 | ############################################# 32 | # Rule for cleaning all built files. 33 | 34 | rule CLEAN 35 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja $FILE_ARG -t clean $TARGETS 36 | description = Cleaning all built files... 37 | 38 | 39 | ############################################# 40 | # Rule for printing all primary targets available. 41 | 42 | rule HELP 43 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja -t targets 44 | description = All primary targets available: 45 | 46 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/additional_project_files.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/additional_project_files.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/android_gradle_build.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {}, 20 | "toolchains": { 21 | "toolchain": { 22 | "cCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang.lld", 23 | "cppCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++.lld" 24 | } 25 | }, 26 | "cFileExtensions": [], 27 | "cppFileExtensions": [] 28 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {} 20 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/build_file_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | # Set default install directory permissions. 41 | if(NOT DEFINED CMAKE_OBJDUMP) 42 | set(CMAKE_OBJDUMP "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump") 43 | endif() 44 | 45 | if(CMAKE_INSTALL_COMPONENT) 46 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 47 | else() 48 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 49 | endif() 50 | 51 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 52 | "${CMAKE_INSTALL_MANIFEST_FILES}") 53 | file(WRITE "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/${CMAKE_INSTALL_MANIFEST}" 54 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 55 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/configure_fingerprint.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/configure_fingerprint.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/metadata_generation_command.txt: -------------------------------------------------------------------------------- 1 | -H/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | -DCMAKE_SYSTEM_NAME=Android 3 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 4 | -DCMAKE_SYSTEM_VERSION=21 5 | -DANDROID_PLATFORM=android-21 6 | -DANDROID_ABI=arm64-v8a 7 | -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a 8 | -DANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 9 | -DCMAKE_ANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 10 | -DCMAKE_TOOLCHAIN_FILE=/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake 11 | -DCMAKE_MAKE_PROGRAM=/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja 12 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/arm64-v8a 13 | -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/arm64-v8a 14 | -DCMAKE_BUILD_TYPE=Debug 15 | -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/arm64-v8a 16 | -GNinja 17 | -Wno-dev 18 | --no-warn-unused-cli 19 | Build command args: [] 20 | Version: 2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/prefab_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": false, 3 | "packages": [] 4 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/arm64-v8a/symbol_folder_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/arm64-v8a -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-59b5e505704537ad8c93.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations" : 3 | [ 4 | { 5 | "directories" : 6 | [ 7 | { 8 | "build" : ".", 9 | "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json", 10 | "minimumCMakeVersion" : 11 | { 12 | "string" : "3.6.0" 13 | }, 14 | "projectIndex" : 0, 15 | "source" : "." 16 | } 17 | ], 18 | "name" : "Debug", 19 | "projects" : 20 | [ 21 | { 22 | "directoryIndexes" : 23 | [ 24 | 0 25 | ], 26 | "name" : "Project" 27 | } 28 | ], 29 | "targets" : [] 30 | } 31 | ], 32 | "kind" : "codemodel", 33 | "paths" : 34 | { 35 | "build" : "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a", 36 | "source" : "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy" 37 | }, 38 | "version" : 39 | { 40 | "major" : 2, 41 | "minor" : 3 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json: -------------------------------------------------------------------------------- 1 | { 2 | "backtraceGraph" : 3 | { 4 | "commands" : [], 5 | "files" : [], 6 | "nodes" : [] 7 | }, 8 | "installers" : [], 9 | "paths" : 10 | { 11 | "build" : ".", 12 | "source" : "." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/.cmake/api/v1/reply/index-2025-03-31T09-43-09-0753.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake" : 3 | { 4 | "generator" : 5 | { 6 | "multiConfig" : false, 7 | "name" : "Ninja" 8 | }, 9 | "paths" : 10 | { 11 | "cmake" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake", 12 | "cpack" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cpack", 13 | "ctest" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ctest", 14 | "root" : "/home/deimos/Android/Sdk/cmake/3.22.1/share/cmake-3.22" 15 | }, 16 | "version" : 17 | { 18 | "isDirty" : false, 19 | "major" : 3, 20 | "minor" : 22, 21 | "patch" : 1, 22 | "string" : "3.22.1-g37088a8", 23 | "suffix" : "g37088a8" 24 | } 25 | }, 26 | "objects" : 27 | [ 28 | { 29 | "jsonFile" : "codemodel-v2-59b5e505704537ad8c93.json", 30 | "kind" : "codemodel", 31 | "version" : 32 | { 33 | "major" : 2, 34 | "minor" : 3 35 | } 36 | }, 37 | { 38 | "jsonFile" : "cache-v2-152b882f7da94495ab15.json", 39 | "kind" : "cache", 40 | "version" : 41 | { 42 | "major" : 2, 43 | "minor" : 0 44 | } 45 | }, 46 | { 47 | "jsonFile" : "cmakeFiles-v1-bb8a1d74b5fb57c5e33d.json", 48 | "kind" : "cmakeFiles", 49 | "version" : 50 | { 51 | "major" : 1, 52 | "minor" : 0 53 | } 54 | } 55 | ], 56 | "reply" : 57 | { 58 | "client-agp" : 59 | { 60 | "cache-v2" : 61 | { 62 | "jsonFile" : "cache-v2-152b882f7da94495ab15.json", 63 | "kind" : "cache", 64 | "version" : 65 | { 66 | "major" : 2, 67 | "minor" : 0 68 | } 69 | }, 70 | "cmakeFiles-v1" : 71 | { 72 | "jsonFile" : "cmakeFiles-v1-bb8a1d74b5fb57c5e33d.json", 73 | "kind" : "cmakeFiles", 74 | "version" : 75 | { 76 | "major" : 1, 77 | "minor" : 0 78 | } 79 | }, 80 | "codemodel-v2" : 81 | { 82 | "jsonFile" : "codemodel-v2-59b5e505704537ad8c93.json", 83 | "kind" : "codemodel", 84 | "version" : 85 | { 86 | "major" : 2, 87 | "minor" : 3 88 | } 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Linux-6.12.20-2-MANJARO") 2 | set(CMAKE_HOST_SYSTEM_NAME "Linux") 3 | set(CMAKE_HOST_SYSTEM_VERSION "6.12.20-2-MANJARO") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "armv7-a") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/edit_cache.dir 2 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/rebuild_cache.dir 3 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/CMakeFiles/rules.ninja: -------------------------------------------------------------------------------- 1 | # CMAKE generated file: DO NOT EDIT! 2 | # Generated by "Ninja" Generator, CMake Version 3.22 3 | 4 | # This file contains all the rules used to get the outputs files 5 | # built from the input files. 6 | # It is included in the main 'build.ninja'. 7 | 8 | # ============================================================================= 9 | # Project: Project 10 | # Configurations: Debug 11 | # ============================================================================= 12 | # ============================================================================= 13 | 14 | ############################################# 15 | # Rule for running custom commands. 16 | 17 | rule CUSTOM_COMMAND 18 | command = $COMMAND 19 | description = $DESC 20 | 21 | 22 | ############################################# 23 | # Rule for re-running cmake. 24 | 25 | rule RERUN_CMAKE 26 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake --regenerate-during-build -S/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a 27 | description = Re-running CMake... 28 | generator = 1 29 | 30 | 31 | ############################################# 32 | # Rule for cleaning all built files. 33 | 34 | rule CLEAN 35 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja $FILE_ARG -t clean $TARGETS 36 | description = Cleaning all built files... 37 | 38 | 39 | ############################################# 40 | # Rule for printing all primary targets available. 41 | 42 | rule HELP 43 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja -t targets 44 | description = All primary targets available: 45 | 46 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/additional_project_files.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/additional_project_files.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/android_gradle_build.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {}, 20 | "toolchains": { 21 | "toolchain": { 22 | "cCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang.lld", 23 | "cppCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++.lld" 24 | } 25 | }, 26 | "cFileExtensions": [], 27 | "cppFileExtensions": [] 28 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {} 20 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/build_file_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | # Set default install directory permissions. 41 | if(NOT DEFINED CMAKE_OBJDUMP) 42 | set(CMAKE_OBJDUMP "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump") 43 | endif() 44 | 45 | if(CMAKE_INSTALL_COMPONENT) 46 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 47 | else() 48 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 49 | endif() 50 | 51 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 52 | "${CMAKE_INSTALL_MANIFEST_FILES}") 53 | file(WRITE "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/${CMAKE_INSTALL_MANIFEST}" 54 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 55 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/configure_fingerprint.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/configure_fingerprint.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/metadata_generation_command.txt: -------------------------------------------------------------------------------- 1 | -H/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | -DCMAKE_SYSTEM_NAME=Android 3 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 4 | -DCMAKE_SYSTEM_VERSION=21 5 | -DANDROID_PLATFORM=android-21 6 | -DANDROID_ABI=armeabi-v7a 7 | -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a 8 | -DANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 9 | -DCMAKE_ANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 10 | -DCMAKE_TOOLCHAIN_FILE=/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake 11 | -DCMAKE_MAKE_PROGRAM=/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja 12 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/armeabi-v7a 13 | -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/armeabi-v7a 14 | -DCMAKE_BUILD_TYPE=Debug 15 | -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a 16 | -GNinja 17 | -Wno-dev 18 | --no-warn-unused-cli 19 | Build command args: [] 20 | Version: 2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/prefab_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": false, 3 | "packages": [] 4 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/armeabi-v7a/symbol_folder_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/armeabi-v7a -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/hash_key.txt: -------------------------------------------------------------------------------- 1 | # Values used to calculate the hash in this folder name. 2 | # Should not depend on the absolute path of the project itself. 3 | # - AGP: 8.2.1. 4 | # - $NDK is the path to NDK 26.3.11579264. 5 | # - $PROJECT is the path to the parent folder of the root Gradle build file. 6 | # - $ABI is the ABI to be built with. The specific value doesn't contribute to the value of the hash. 7 | # - $HASH is the hash value computed from this text. 8 | # - $CMAKE is the path to CMake 3.22.1. 9 | # - $NINJA is the path to Ninja. 10 | -H/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 11 | -DCMAKE_SYSTEM_NAME=Android 12 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 13 | -DCMAKE_SYSTEM_VERSION=21 14 | -DANDROID_PLATFORM=android-21 15 | -DANDROID_ABI=$ABI 16 | -DCMAKE_ANDROID_ARCH_ABI=$ABI 17 | -DANDROID_NDK=$NDK 18 | -DCMAKE_ANDROID_NDK=$NDK 19 | -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake 20 | -DCMAKE_MAKE_PROGRAM=$NINJA 21 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/$HASH/obj/$ABI 22 | -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/$HASH/obj/$ABI 23 | -DCMAKE_BUILD_TYPE=Debug 24 | -B$PROJECT/app/.cxx/Debug/$HASH/$ABI 25 | -GNinja 26 | -Wno-dev 27 | --no-warn-unused-cli -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/cache-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/cache-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/codemodel-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/query/client-agp/codemodel-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/reply/codemodel-v2-0fbb297bac4b0dfeca1f.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations" : 3 | [ 4 | { 5 | "directories" : 6 | [ 7 | { 8 | "build" : ".", 9 | "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json", 10 | "minimumCMakeVersion" : 11 | { 12 | "string" : "3.6.0" 13 | }, 14 | "projectIndex" : 0, 15 | "source" : "." 16 | } 17 | ], 18 | "name" : "Debug", 19 | "projects" : 20 | [ 21 | { 22 | "directoryIndexes" : 23 | [ 24 | 0 25 | ], 26 | "name" : "Project" 27 | } 28 | ], 29 | "targets" : [] 30 | } 31 | ], 32 | "kind" : "codemodel", 33 | "paths" : 34 | { 35 | "build" : "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86", 36 | "source" : "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy" 37 | }, 38 | "version" : 39 | { 40 | "major" : 2, 41 | "minor" : 3 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json: -------------------------------------------------------------------------------- 1 | { 2 | "backtraceGraph" : 3 | { 4 | "commands" : [], 5 | "files" : [], 6 | "nodes" : [] 7 | }, 8 | "installers" : [], 9 | "paths" : 10 | { 11 | "build" : ".", 12 | "source" : "." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/.cmake/api/v1/reply/index-2025-03-31T09-43-09-0958.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake" : 3 | { 4 | "generator" : 5 | { 6 | "multiConfig" : false, 7 | "name" : "Ninja" 8 | }, 9 | "paths" : 10 | { 11 | "cmake" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake", 12 | "cpack" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cpack", 13 | "ctest" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ctest", 14 | "root" : "/home/deimos/Android/Sdk/cmake/3.22.1/share/cmake-3.22" 15 | }, 16 | "version" : 17 | { 18 | "isDirty" : false, 19 | "major" : 3, 20 | "minor" : 22, 21 | "patch" : 1, 22 | "string" : "3.22.1-g37088a8", 23 | "suffix" : "g37088a8" 24 | } 25 | }, 26 | "objects" : 27 | [ 28 | { 29 | "jsonFile" : "codemodel-v2-0fbb297bac4b0dfeca1f.json", 30 | "kind" : "codemodel", 31 | "version" : 32 | { 33 | "major" : 2, 34 | "minor" : 3 35 | } 36 | }, 37 | { 38 | "jsonFile" : "cache-v2-8e86bcaafae3a7d8e3e4.json", 39 | "kind" : "cache", 40 | "version" : 41 | { 42 | "major" : 2, 43 | "minor" : 0 44 | } 45 | }, 46 | { 47 | "jsonFile" : "cmakeFiles-v1-003336abfe70de13df08.json", 48 | "kind" : "cmakeFiles", 49 | "version" : 50 | { 51 | "major" : 1, 52 | "minor" : 0 53 | } 54 | } 55 | ], 56 | "reply" : 57 | { 58 | "client-agp" : 59 | { 60 | "cache-v2" : 61 | { 62 | "jsonFile" : "cache-v2-8e86bcaafae3a7d8e3e4.json", 63 | "kind" : "cache", 64 | "version" : 65 | { 66 | "major" : 2, 67 | "minor" : 0 68 | } 69 | }, 70 | "cmakeFiles-v1" : 71 | { 72 | "jsonFile" : "cmakeFiles-v1-003336abfe70de13df08.json", 73 | "kind" : "cmakeFiles", 74 | "version" : 75 | { 76 | "major" : 1, 77 | "minor" : 0 78 | } 79 | }, 80 | "codemodel-v2" : 81 | { 82 | "jsonFile" : "codemodel-v2-0fbb297bac4b0dfeca1f.json", 83 | "kind" : "codemodel", 84 | "version" : 85 | { 86 | "major" : 2, 87 | "minor" : 3 88 | } 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Linux-6.12.20-2-MANJARO") 2 | set(CMAKE_HOST_SYSTEM_NAME "Linux") 3 | set(CMAKE_HOST_SYSTEM_VERSION "6.12.20-2-MANJARO") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "i686") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/edit_cache.dir 2 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/rebuild_cache.dir 3 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/CMakeFiles/rules.ninja: -------------------------------------------------------------------------------- 1 | # CMAKE generated file: DO NOT EDIT! 2 | # Generated by "Ninja" Generator, CMake Version 3.22 3 | 4 | # This file contains all the rules used to get the outputs files 5 | # built from the input files. 6 | # It is included in the main 'build.ninja'. 7 | 8 | # ============================================================================= 9 | # Project: Project 10 | # Configurations: Debug 11 | # ============================================================================= 12 | # ============================================================================= 13 | 14 | ############################################# 15 | # Rule for running custom commands. 16 | 17 | rule CUSTOM_COMMAND 18 | command = $COMMAND 19 | description = $DESC 20 | 21 | 22 | ############################################# 23 | # Rule for re-running cmake. 24 | 25 | rule RERUN_CMAKE 26 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake --regenerate-during-build -S/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86 27 | description = Re-running CMake... 28 | generator = 1 29 | 30 | 31 | ############################################# 32 | # Rule for cleaning all built files. 33 | 34 | rule CLEAN 35 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja $FILE_ARG -t clean $TARGETS 36 | description = Cleaning all built files... 37 | 38 | 39 | ############################################# 40 | # Rule for printing all primary targets available. 41 | 42 | rule HELP 43 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja -t targets 44 | description = All primary targets available: 45 | 46 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/additional_project_files.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/additional_project_files.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/android_gradle_build.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {}, 20 | "toolchains": { 21 | "toolchain": { 22 | "cCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang.lld", 23 | "cppCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++.lld" 24 | } 25 | }, 26 | "cFileExtensions": [], 27 | "cppFileExtensions": [] 28 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {} 20 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/build_file_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | # Set default install directory permissions. 41 | if(NOT DEFINED CMAKE_OBJDUMP) 42 | set(CMAKE_OBJDUMP "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump") 43 | endif() 44 | 45 | if(CMAKE_INSTALL_COMPONENT) 46 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 47 | else() 48 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 49 | endif() 50 | 51 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 52 | "${CMAKE_INSTALL_MANIFEST_FILES}") 53 | file(WRITE "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86/${CMAKE_INSTALL_MANIFEST}" 54 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 55 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/configure_fingerprint.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86/configure_fingerprint.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/metadata_generation_command.txt: -------------------------------------------------------------------------------- 1 | -H/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | -DCMAKE_SYSTEM_NAME=Android 3 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 4 | -DCMAKE_SYSTEM_VERSION=21 5 | -DANDROID_PLATFORM=android-21 6 | -DANDROID_ABI=x86 7 | -DCMAKE_ANDROID_ARCH_ABI=x86 8 | -DANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 9 | -DCMAKE_ANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 10 | -DCMAKE_TOOLCHAIN_FILE=/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake 11 | -DCMAKE_MAKE_PROGRAM=/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja 12 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86 13 | -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86 14 | -DCMAKE_BUILD_TYPE=Debug 15 | -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86 16 | -GNinja 17 | -Wno-dev 18 | --no-warn-unused-cli 19 | Build command args: [] 20 | Version: 2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/prefab_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": false, 3 | "packages": [] 4 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86/symbol_folder_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/cache-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/cache-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/reply/codemodel-v2-727aaac1f2f871b2fb46.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations" : 3 | [ 4 | { 5 | "directories" : 6 | [ 7 | { 8 | "build" : ".", 9 | "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json", 10 | "minimumCMakeVersion" : 11 | { 12 | "string" : "3.6.0" 13 | }, 14 | "projectIndex" : 0, 15 | "source" : "." 16 | } 17 | ], 18 | "name" : "Debug", 19 | "projects" : 20 | [ 21 | { 22 | "directoryIndexes" : 23 | [ 24 | 0 25 | ], 26 | "name" : "Project" 27 | } 28 | ], 29 | "targets" : [] 30 | } 31 | ], 32 | "kind" : "codemodel", 33 | "paths" : 34 | { 35 | "build" : "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64", 36 | "source" : "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy" 37 | }, 38 | "version" : 39 | { 40 | "major" : 2, 41 | "minor" : 3 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json: -------------------------------------------------------------------------------- 1 | { 2 | "backtraceGraph" : 3 | { 4 | "commands" : [], 5 | "files" : [], 6 | "nodes" : [] 7 | }, 8 | "installers" : [], 9 | "paths" : 10 | { 11 | "build" : ".", 12 | "source" : "." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/.cmake/api/v1/reply/index-2025-03-31T09-43-10-0134.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake" : 3 | { 4 | "generator" : 5 | { 6 | "multiConfig" : false, 7 | "name" : "Ninja" 8 | }, 9 | "paths" : 10 | { 11 | "cmake" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake", 12 | "cpack" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/cpack", 13 | "ctest" : "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ctest", 14 | "root" : "/home/deimos/Android/Sdk/cmake/3.22.1/share/cmake-3.22" 15 | }, 16 | "version" : 17 | { 18 | "isDirty" : false, 19 | "major" : 3, 20 | "minor" : 22, 21 | "patch" : 1, 22 | "string" : "3.22.1-g37088a8", 23 | "suffix" : "g37088a8" 24 | } 25 | }, 26 | "objects" : 27 | [ 28 | { 29 | "jsonFile" : "codemodel-v2-727aaac1f2f871b2fb46.json", 30 | "kind" : "codemodel", 31 | "version" : 32 | { 33 | "major" : 2, 34 | "minor" : 3 35 | } 36 | }, 37 | { 38 | "jsonFile" : "cache-v2-c3548645ed54a48523a7.json", 39 | "kind" : "cache", 40 | "version" : 41 | { 42 | "major" : 2, 43 | "minor" : 0 44 | } 45 | }, 46 | { 47 | "jsonFile" : "cmakeFiles-v1-432ff342d6b674b7d823.json", 48 | "kind" : "cmakeFiles", 49 | "version" : 50 | { 51 | "major" : 1, 52 | "minor" : 0 53 | } 54 | } 55 | ], 56 | "reply" : 57 | { 58 | "client-agp" : 59 | { 60 | "cache-v2" : 61 | { 62 | "jsonFile" : "cache-v2-c3548645ed54a48523a7.json", 63 | "kind" : "cache", 64 | "version" : 65 | { 66 | "major" : 2, 67 | "minor" : 0 68 | } 69 | }, 70 | "cmakeFiles-v1" : 71 | { 72 | "jsonFile" : "cmakeFiles-v1-432ff342d6b674b7d823.json", 73 | "kind" : "cmakeFiles", 74 | "version" : 75 | { 76 | "major" : 1, 77 | "minor" : 0 78 | } 79 | }, 80 | "codemodel-v2" : 81 | { 82 | "jsonFile" : "codemodel-v2-727aaac1f2f871b2fb46.json", 83 | "kind" : "codemodel", 84 | "version" : 85 | { 86 | "major" : 2, 87 | "minor" : 3 88 | } 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_HOST_SYSTEM "Linux-6.12.20-2-MANJARO") 2 | set(CMAKE_HOST_SYSTEM_NAME "Linux") 3 | set(CMAKE_HOST_SYSTEM_VERSION "6.12.20-2-MANJARO") 4 | set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") 5 | 6 | include("/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake") 7 | 8 | set(CMAKE_SYSTEM "Android-1") 9 | set(CMAKE_SYSTEM_NAME "Android") 10 | set(CMAKE_SYSTEM_VERSION "1") 11 | set(CMAKE_SYSTEM_PROCESSOR "x86_64") 12 | 13 | set(CMAKE_CROSSCOMPILING "TRUE") 14 | 15 | set(CMAKE_SYSTEM_LOADED 1) 16 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/TargetDirectories.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/edit_cache.dir 2 | /home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/rebuild_cache.dir 3 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/cmake.check_cache: -------------------------------------------------------------------------------- 1 | # This file is generated by cmake for dependency checking of the CMakeCache.txt file 2 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/CMakeFiles/rules.ninja: -------------------------------------------------------------------------------- 1 | # CMAKE generated file: DO NOT EDIT! 2 | # Generated by "Ninja" Generator, CMake Version 3.22 3 | 4 | # This file contains all the rules used to get the outputs files 5 | # built from the input files. 6 | # It is included in the main 'build.ninja'. 7 | 8 | # ============================================================================= 9 | # Project: Project 10 | # Configurations: Debug 11 | # ============================================================================= 12 | # ============================================================================= 13 | 14 | ############################################# 15 | # Rule for running custom commands. 16 | 17 | rule CUSTOM_COMMAND 18 | command = $COMMAND 19 | description = $DESC 20 | 21 | 22 | ############################################# 23 | # Rule for re-running cmake. 24 | 25 | rule RERUN_CMAKE 26 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/cmake --regenerate-during-build -S/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64 27 | description = Re-running CMake... 28 | generator = 1 29 | 30 | 31 | ############################################# 32 | # Rule for cleaning all built files. 33 | 34 | rule CLEAN 35 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja $FILE_ARG -t clean $TARGETS 36 | description = Cleaning all built files... 37 | 38 | 39 | ############################################# 40 | # Rule for printing all primary targets available. 41 | 42 | rule HELP 43 | command = /home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja -t targets 44 | description = All primary targets available: 45 | 46 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/additional_project_files.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/additional_project_files.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/android_gradle_build.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {}, 20 | "toolchains": { 21 | "toolchain": { 22 | "cCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang.lld", 23 | "cppCompilerExecutable": "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++.lld" 24 | } 25 | }, 26 | "cFileExtensions": [], 27 | "cppFileExtensions": [] 28 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/android_gradle_build_mini.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildFiles": [ 3 | "/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt" 4 | ], 5 | "cleanCommandsComponents": [ 6 | [ 7 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 8 | "-C", 9 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64", 10 | "clean" 11 | ] 12 | ], 13 | "buildTargetsCommandComponents": [ 14 | "/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja", 15 | "-C", 16 | "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64", 17 | "{LIST_OF_TARGETS_TO_BUILD}" 18 | ], 19 | "libraries": {} 20 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/build_file_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/cmake_install.cmake: -------------------------------------------------------------------------------- 1 | # Install script for directory: /home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | 3 | # Set the install prefix 4 | if(NOT DEFINED CMAKE_INSTALL_PREFIX) 5 | set(CMAKE_INSTALL_PREFIX "/usr/local") 6 | endif() 7 | string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 8 | 9 | # Set the install configuration name. 10 | if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) 11 | if(BUILD_TYPE) 12 | string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" 13 | CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") 14 | else() 15 | set(CMAKE_INSTALL_CONFIG_NAME "Debug") 16 | endif() 17 | message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") 18 | endif() 19 | 20 | # Set the component getting installed. 21 | if(NOT CMAKE_INSTALL_COMPONENT) 22 | if(COMPONENT) 23 | message(STATUS "Install component: \"${COMPONENT}\"") 24 | set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") 25 | else() 26 | set(CMAKE_INSTALL_COMPONENT) 27 | endif() 28 | endif() 29 | 30 | # Install shared libraries without execute permission? 31 | if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) 32 | set(CMAKE_INSTALL_SO_NO_EXE "0") 33 | endif() 34 | 35 | # Is this installation the result of a crosscompile? 36 | if(NOT DEFINED CMAKE_CROSSCOMPILING) 37 | set(CMAKE_CROSSCOMPILING "TRUE") 38 | endif() 39 | 40 | # Set default install directory permissions. 41 | if(NOT DEFINED CMAKE_OBJDUMP) 42 | set(CMAKE_OBJDUMP "/home/deimos/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump") 43 | endif() 44 | 45 | if(CMAKE_INSTALL_COMPONENT) 46 | set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") 47 | else() 48 | set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") 49 | endif() 50 | 51 | string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT 52 | "${CMAKE_INSTALL_MANIFEST_FILES}") 53 | file(WRITE "/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64/${CMAKE_INSTALL_MANIFEST}" 54 | "${CMAKE_INSTALL_MANIFEST_CONTENT}") 55 | -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/configure_fingerprint.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/.cxx/Debug/5i1255y6/x86_64/configure_fingerprint.bin -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/metadata_generation_command.txt: -------------------------------------------------------------------------------- 1 | -H/home/deimos/dev/flutter/packages/flutter_tools/gradle/src/main/groovy 2 | -DCMAKE_SYSTEM_NAME=Android 3 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 4 | -DCMAKE_SYSTEM_VERSION=21 5 | -DANDROID_PLATFORM=android-21 6 | -DANDROID_ABI=x86_64 7 | -DCMAKE_ANDROID_ARCH_ABI=x86_64 8 | -DANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 9 | -DCMAKE_ANDROID_NDK=/home/deimos/Android/Sdk/ndk/26.3.11579264 10 | -DCMAKE_TOOLCHAIN_FILE=/home/deimos/Android/Sdk/ndk/26.3.11579264/build/cmake/android.toolchain.cmake 11 | -DCMAKE_MAKE_PROGRAM=/home/deimos/Android/Sdk/cmake/3.22.1/bin/ninja 12 | -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86_64 13 | -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86_64 14 | -DCMAKE_BUILD_TYPE=Debug 15 | -B/home/deimos/FLUTTER/libs/flutter_recorder/example/android/app/.cxx/Debug/5i1255y6/x86_64 16 | -GNinja 17 | -Wno-dev 18 | --no-warn-unused-cli 19 | Build command args: [] 20 | Version: 2 -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/prefab_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": false, 3 | "packages": [] 4 | } -------------------------------------------------------------------------------- /example/android/app/.cxx/Debug/5i1255y6/x86_64/symbol_folder_index.txt: -------------------------------------------------------------------------------- 1 | /home/deimos/FLUTTER/libs/flutter_recorder/example/build/app/intermediates/cxx/Debug/5i1255y6/obj/x86_64 -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 5 | id "dev.flutter.flutter-gradle-plugin" 6 | } 7 | 8 | android { 9 | namespace = "com.example.flutter_recorder_example" 10 | compileSdk = flutter.compileSdkVersion 11 | ndkVersion = flutter.ndkVersion 12 | 13 | compileOptions { 14 | sourceCompatibility = JavaVersion.VERSION_1_8 15 | targetCompatibility = JavaVersion.VERSION_1_8 16 | } 17 | 18 | kotlinOptions { 19 | jvmTarget = JavaVersion.VERSION_1_8 20 | } 21 | 22 | defaultConfig { 23 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 24 | applicationId = "com.example.flutter_recorder_example" 25 | // You can update the following values to match your application needs. 26 | // For more information, see: https://flutter.dev/to/review-gradle-config. 27 | minSdk = flutter.minSdkVersion 28 | targetSdk = flutter.targetSdkVersion 29 | versionCode = flutter.versionCode 30 | versionName = flutter.versionName 31 | } 32 | 33 | buildTypes { 34 | release { 35 | // TODO: Add your own signing config for the release build. 36 | // Signing with the debug keys for now, so `flutter run --release` works. 37 | signingConfig = signingConfigs.debug 38 | } 39 | } 40 | } 41 | 42 | flutter { 43 | source = "../.." 44 | } 45 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 16 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 31 | 34 | 35 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /example/android/app/src/main/kotlin/com/example/flutter_recorder_example/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.flutter_recorder_example 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = "../build" 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(":app") 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip 6 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "8.2.1" apply false 22 | id "org.jetbrains.kotlin.android" version "1.8.22" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /example/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '13.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | target 'RunnerTests' do 36 | inherit! :search_paths 37 | end 38 | end 39 | 40 | post_install do |installer| 41 | installer.pods_project.targets.each do |target| 42 | flutter_additional_ios_build_settings(target) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Flutter Recorder 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | flutter_recorder_example 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | CADisableMinimumFrameDurationOnPhone 45 | 46 | UIApplicationSupportsIndirectInputEvents 47 | 48 | NSMicrophoneUsageDescription 49 | flutter_recorder needs your permission to use the mic 50 | 51 | 52 | -------------------------------------------------------------------------------- /example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /example/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /example/lib/ui/fft_painter.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_recorder/flutter_recorder.dart'; 4 | 5 | /// Custom painter to draw the FFT data. 6 | class FftPainter extends CustomPainter { 7 | const FftPainter(); 8 | 9 | @override 10 | void paint(Canvas canvas, Size size) { 11 | if (!Recorder.instance.isDeviceStarted()) return; 12 | 13 | final fftData = Recorder.instance.getFft(alwaysReturnData: true); 14 | // Using `alwaysReturnData: true` this will always return a non-empty list 15 | // even if the audio data is the same as the previous one. 16 | if (fftData.isEmpty) return; 17 | final barWidth = size.width / 256; 18 | 19 | final paint = Paint()..color = Colors.yellow; 20 | 21 | for (var i = 0; i < 256; i++) { 22 | late final double barHeight; 23 | barHeight = size.height * fftData[i]; 24 | canvas.drawRect( 25 | Rect.fromLTWH( 26 | barWidth * i, 27 | size.height - barHeight, 28 | barWidth, 29 | barHeight, 30 | ), 31 | paint, 32 | ); 33 | } 34 | } 35 | 36 | @override 37 | bool shouldRepaint(FftPainter oldDelegate) { 38 | return true; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /example/lib/ui/vu_meter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class VuMeter extends StatelessWidget { 4 | const VuMeter({ 5 | super.key, 6 | required this.width, 7 | required this.height, 8 | required this.vuMeter, 9 | required this.db, 10 | }); 11 | 12 | final double width; 13 | final double height; 14 | final double vuMeter; 15 | final double db; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return SizedBox( 20 | width: width, 21 | height: height, 22 | child: Stack( 23 | children: [ 24 | Container( 25 | decoration: const BoxDecoration( 26 | gradient: LinearGradient( 27 | colors: [ 28 | Colors.green, 29 | Colors.red, 30 | ], 31 | begin: Alignment.bottomCenter, 32 | end: Alignment.topCenter, 33 | ), 34 | ), 35 | ), 36 | Container( 37 | width: width, 38 | height: height * vuMeter, 39 | color: const Color.fromARGB(255, 55, 55, 55), 40 | ), 41 | Align( 42 | alignment: Alignment.bottomLeft, 43 | child: Text( 44 | db.toStringAsFixed(1), 45 | style: const TextStyle( 46 | fontSize: 12, 47 | fontWeight: FontWeight.bold, 48 | ), 49 | ), 50 | ), 51 | ], 52 | ), 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /example/lib/ui/wave_painter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_recorder/flutter_recorder.dart'; 3 | 4 | /// Custom painter to draw the wave data. 5 | class WavePainter extends CustomPainter { 6 | const WavePainter(); 7 | 8 | @override 9 | void paint(Canvas canvas, Size size) { 10 | if (!Recorder.instance.isDeviceStarted()) return; 11 | 12 | final waveData = Recorder.instance.getWave(alwaysReturnData: true); 13 | // Using `alwaysReturnData: true` this will always return a non-empty list 14 | // even if the audio data is the same as the previous one. 15 | if (waveData.isEmpty) return; 16 | 17 | final barWidth = size.width / 256; 18 | final paint = Paint()..color = Colors.yellow; 19 | 20 | for (var i = 0; i < 256; i++) { 21 | late final double barHeight; 22 | barHeight = size.height * waveData[i]; 23 | canvas.drawRect( 24 | Rect.fromLTWH( 25 | barWidth * i, 26 | (size.height - barHeight) / 2, 27 | barWidth, 28 | barHeight, 29 | ), 30 | paint, 31 | ); 32 | } 33 | } 34 | 35 | @override 36 | bool shouldRepaint(WavePainter oldDelegate) { 37 | return true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /example/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | 10 | void fl_register_plugins(FlPluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | flutter_recorder 10 | flutter_soloud 11 | ) 12 | 13 | set(PLUGIN_BUNDLED_LIBRARIES) 14 | 15 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 16 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 17 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 19 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 20 | endforeach(plugin) 21 | 22 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 23 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 24 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 25 | endforeach(ffi_plugin) 26 | -------------------------------------------------------------------------------- /example/linux/runner/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.13) 2 | project(runner LANGUAGES CXX) 3 | 4 | # Define the application target. To change its name, change BINARY_NAME in the 5 | # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer 6 | # work. 7 | # 8 | # Any new source files that you add to the application should be added here. 9 | add_executable(${BINARY_NAME} 10 | "main.cc" 11 | "my_application.cc" 12 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 13 | ) 14 | 15 | # Apply the standard set of build settings. This can be removed for applications 16 | # that need different build settings. 17 | apply_standard_settings(${BINARY_NAME}) 18 | 19 | # Add preprocessor definitions for the application ID. 20 | add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") 21 | 22 | # Add dependency libraries. Add any application-specific dependencies here. 23 | target_link_libraries(${BINARY_NAME} PRIVATE flutter) 24 | target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) 25 | 26 | target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") 27 | -------------------------------------------------------------------------------- /example/linux/runner/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /example/linux/runner/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /example/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /example/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import path_provider_foundation 9 | 10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 11 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 12 | } 13 | -------------------------------------------------------------------------------- /example/macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.15' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | use_frameworks! 31 | use_modular_headers! 32 | 33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 34 | target 'RunnerTests' do 35 | inherit! :search_paths 36 | end 37 | end 38 | 39 | post_install do |installer| 40 | installer.pods_project.targets.each do |target| 41 | flutter_additional_macos_build_settings(target) 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /example/macos/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - flutter_recorder (0.0.1): 3 | - FlutterMacOS 4 | - flutter_soloud (0.0.1): 5 | - FlutterMacOS 6 | - FlutterMacOS (1.0.0) 7 | - path_provider_foundation (0.0.1): 8 | - Flutter 9 | - FlutterMacOS 10 | 11 | DEPENDENCIES: 12 | - flutter_recorder (from `Flutter/ephemeral/.symlinks/plugins/flutter_recorder/macos`) 13 | - flutter_soloud (from `Flutter/ephemeral/.symlinks/plugins/flutter_soloud/macos`) 14 | - FlutterMacOS (from `Flutter/ephemeral`) 15 | - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) 16 | 17 | EXTERNAL SOURCES: 18 | flutter_recorder: 19 | :path: Flutter/ephemeral/.symlinks/plugins/flutter_recorder/macos 20 | flutter_soloud: 21 | :path: Flutter/ephemeral/.symlinks/plugins/flutter_soloud/macos 22 | FlutterMacOS: 23 | :path: Flutter/ephemeral 24 | path_provider_foundation: 25 | :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin 26 | 27 | SPEC CHECKSUMS: 28 | flutter_recorder: c93092a2b731a51bf81e2e0bcfc3021870c5a628 29 | flutter_soloud: 5fd8e08d9e9258da2993ef11bb0996cfe187da02 30 | FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 31 | path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 32 | 33 | PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3 34 | 35 | COCOAPODS: 1.16.2 36 | -------------------------------------------------------------------------------- /example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | 10 | override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { 11 | return true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /example/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = flutter_recorder_example 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterRecorderExample 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /example/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | com.apple.security.device.audio-input 12 | 13 | com.apple.security.app-sandbox 14 | 15 | com.apple.security.files.downloads.read-write 16 | 17 | com.apple.security.files.user-selected.read-write 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | NSMicrophoneUsageDescription 32 | flutter_recorder needs your permission to use the mic 33 | NSDownloadsFolderUsageDescription 34 | This app needs access to Downloads folder to save recorded audio files 35 | 36 | 37 | -------------------------------------------------------------------------------- /example/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.device.audio-input 8 | 9 | com.apple.security.app-sandbox 10 | 11 | com.apple.security.files.downloads.read-write 12 | 13 | com.apple.security.files.user-selected.read-write 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_recorder_example 2 | description: "Demonstrates how to use the flutter_recorder plugin." 3 | publish_to: 'none' 4 | version: 1.0.0+1 5 | 6 | environment: 7 | sdk: ^3.5.1 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | 13 | flutter_recorder: 14 | path: ../ 15 | 16 | flutter_soloud: ^3.0.1 17 | 18 | cupertino_icons: ^1.0.8 19 | logging: ^1.3.0 20 | open_filex: ^4.6.0 21 | path_provider: ^2.1.5 22 | permission_handler: ^11.4.0 23 | 24 | dev_dependencies: 25 | flutter_test: 26 | sdk: flutter 27 | flutter_lints: ^5.0.0 28 | very_good_analysis: ^6.0.0 29 | 30 | flutter: 31 | uses-material-design: true 32 | -------------------------------------------------------------------------------- /example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/web/favicon.png -------------------------------------------------------------------------------- /example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /example/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | example 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /example/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "short_name": "example", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /example/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | 11 | void RegisterPlugins(flutter::PluginRegistry* registry) { 12 | PermissionHandlerWindowsPluginRegisterWithRegistrar( 13 | registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); 14 | } 15 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | permission_handler_windows 7 | ) 8 | 9 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 10 | flutter_recorder 11 | flutter_soloud 12 | ) 13 | 14 | set(PLUGIN_BUNDLED_LIBRARIES) 15 | 16 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 17 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 18 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 19 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 20 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 21 | endforeach(plugin) 22 | 23 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 24 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 25 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 26 | endforeach(ffi_plugin) 27 | -------------------------------------------------------------------------------- /example/windows/runner/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | project(runner LANGUAGES CXX) 3 | 4 | # Define the application target. To change its name, change BINARY_NAME in the 5 | # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer 6 | # work. 7 | # 8 | # Any new source files that you add to the application should be added here. 9 | add_executable(${BINARY_NAME} WIN32 10 | "flutter_window.cpp" 11 | "main.cpp" 12 | "utils.cpp" 13 | "win32_window.cpp" 14 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 15 | "Runner.rc" 16 | "runner.exe.manifest" 17 | ) 18 | 19 | # Apply the standard set of build settings. This can be removed for applications 20 | # that need different build settings. 21 | apply_standard_settings(${BINARY_NAME}) 22 | 23 | # Add preprocessor definitions for the build version. 24 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") 25 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") 26 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") 27 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") 28 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") 29 | 30 | # Disable Windows macros that collide with C++ standard library functions. 31 | target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") 32 | 33 | # Add dependency libraries and include directories. Add any application-specific 34 | # dependencies here. 35 | target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) 36 | target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") 37 | target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") 38 | 39 | # Run the Flutter tool portions of the build. This must not be removed. 40 | add_dependencies(${BINARY_NAME} flutter_assemble) 41 | -------------------------------------------------------------------------------- /example/windows/runner/flutter_window.cpp: -------------------------------------------------------------------------------- 1 | #include "flutter_window.h" 2 | 3 | #include 4 | 5 | #include "flutter/generated_plugin_registrant.h" 6 | 7 | FlutterWindow::FlutterWindow(const flutter::DartProject& project) 8 | : project_(project) {} 9 | 10 | FlutterWindow::~FlutterWindow() {} 11 | 12 | bool FlutterWindow::OnCreate() { 13 | if (!Win32Window::OnCreate()) { 14 | return false; 15 | } 16 | 17 | RECT frame = GetClientArea(); 18 | 19 | // The size here must match the window dimensions to avoid unnecessary surface 20 | // creation / destruction in the startup path. 21 | flutter_controller_ = std::make_unique( 22 | frame.right - frame.left, frame.bottom - frame.top, project_); 23 | // Ensure that basic setup of the controller was successful. 24 | if (!flutter_controller_->engine() || !flutter_controller_->view()) { 25 | return false; 26 | } 27 | RegisterPlugins(flutter_controller_->engine()); 28 | SetChildContent(flutter_controller_->view()->GetNativeWindow()); 29 | 30 | flutter_controller_->engine()->SetNextFrameCallback([&]() { 31 | this->Show(); 32 | }); 33 | 34 | // Flutter can complete the first frame before the "show window" callback is 35 | // registered. The following call ensures a frame is pending to ensure the 36 | // window is shown. It is a no-op if the first frame hasn't completed yet. 37 | flutter_controller_->ForceRedraw(); 38 | 39 | return true; 40 | } 41 | 42 | void FlutterWindow::OnDestroy() { 43 | if (flutter_controller_) { 44 | flutter_controller_ = nullptr; 45 | } 46 | 47 | Win32Window::OnDestroy(); 48 | } 49 | 50 | LRESULT 51 | FlutterWindow::MessageHandler(HWND hwnd, UINT const message, 52 | WPARAM const wparam, 53 | LPARAM const lparam) noexcept { 54 | // Give Flutter, including plugins, an opportunity to handle window messages. 55 | if (flutter_controller_) { 56 | std::optional result = 57 | flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, 58 | lparam); 59 | if (result) { 60 | return *result; 61 | } 62 | } 63 | 64 | switch (message) { 65 | case WM_FONTCHANGE: 66 | flutter_controller_->engine()->ReloadSystemFonts(); 67 | break; 68 | } 69 | 70 | return Win32Window::MessageHandler(hwnd, message, wparam, lparam); 71 | } 72 | -------------------------------------------------------------------------------- /example/windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /example/windows/runner/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "flutter_window.h" 6 | #include "utils.h" 7 | 8 | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, 9 | _In_ wchar_t *command_line, _In_ int show_command) { 10 | // Attach to console when present (e.g., 'flutter run') or create a 11 | // new console when running with a debugger. 12 | if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { 13 | CreateAndAttachConsole(); 14 | } 15 | 16 | // Initialize COM, so that it is available for use in the library and/or 17 | // plugins. 18 | ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); 19 | 20 | flutter::DartProject project(L"data"); 21 | 22 | std::vector command_line_arguments = 23 | GetCommandLineArguments(); 24 | 25 | project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); 26 | 27 | FlutterWindow window(project); 28 | Win32Window::Point origin(10, 10); 29 | Win32Window::Size size(1280, 720); 30 | if (!window.Create(L"flutter_recorder_example", origin, size)) { 31 | return EXIT_FAILURE; 32 | } 33 | window.SetQuitOnClose(true); 34 | 35 | ::MSG msg; 36 | while (::GetMessage(&msg, nullptr, 0, 0)) { 37 | ::TranslateMessage(&msg); 38 | ::DispatchMessage(&msg); 39 | } 40 | 41 | ::CoUninitialize(); 42 | return EXIT_SUCCESS; 43 | } 44 | -------------------------------------------------------------------------------- /example/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /example/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/example/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /example/windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /example/windows/runner/utils.cpp: -------------------------------------------------------------------------------- 1 | #include "utils.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | void CreateAndAttachConsole() { 11 | if (::AllocConsole()) { 12 | FILE *unused; 13 | if (freopen_s(&unused, "CONOUT$", "w", stdout)) { 14 | _dup2(_fileno(stdout), 1); 15 | } 16 | if (freopen_s(&unused, "CONOUT$", "w", stderr)) { 17 | _dup2(_fileno(stdout), 2); 18 | } 19 | std::ios::sync_with_stdio(); 20 | FlutterDesktopResyncOutputStreams(); 21 | } 22 | } 23 | 24 | std::vector GetCommandLineArguments() { 25 | // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. 26 | int argc; 27 | wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); 28 | if (argv == nullptr) { 29 | return std::vector(); 30 | } 31 | 32 | std::vector command_line_arguments; 33 | 34 | // Skip the first argument as it's the binary name. 35 | for (int i = 1; i < argc; i++) { 36 | command_line_arguments.push_back(Utf8FromUtf16(argv[i])); 37 | } 38 | 39 | ::LocalFree(argv); 40 | 41 | return command_line_arguments; 42 | } 43 | 44 | std::string Utf8FromUtf16(const wchar_t* utf16_string) { 45 | if (utf16_string == nullptr) { 46 | return std::string(); 47 | } 48 | unsigned int target_length = ::WideCharToMultiByte( 49 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, 50 | -1, nullptr, 0, nullptr, nullptr) 51 | -1; // remove the trailing null character 52 | int input_length = (int)wcslen(utf16_string); 53 | std::string utf8_string; 54 | if (target_length == 0 || target_length > utf8_string.max_size()) { 55 | return utf8_string; 56 | } 57 | utf8_string.resize(target_length); 58 | int converted_length = ::WideCharToMultiByte( 59 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, 60 | input_length, utf8_string.data(), target_length, nullptr, nullptr); 61 | if (converted_length == 0) { 62 | return std::string(); 63 | } 64 | return utf8_string; 65 | } 66 | -------------------------------------------------------------------------------- /example/windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | -------------------------------------------------------------------------------- /ffigen.yaml: -------------------------------------------------------------------------------- 1 | # Run with `dart run ffigen --config ffigen.yaml`. 2 | name: FlutterRecorderBindings 3 | description: | 4 | Bindings for `src/flutter_recorder.h`. 5 | 6 | Regenerate bindings with 7 | `dart run ffigen --config ffigen.yaml` 8 | or 9 | `export CPATH="$(clang -v 2>&1 | grep "Selected GCC installation" | rev | cut -d' ' -f1 | rev)/include"; dart run ffigen --config ffigen.yaml` 10 | output: 'lib/src/bindings/flutter_recorder_bindings_generated.dart' 11 | headers: 12 | entry-points: 13 | - 'src/flutter_recorder.h' 14 | include-directives: 15 | - 'src/flutter_recorder.h' 16 | preamble: | 17 | // ignore_for_file: always_specify_types 18 | // ignore_for_file: camel_case_types 19 | // ignore_for_file: non_constant_identifier_names 20 | silence-enum-warning: true 21 | comments: 22 | style: any 23 | length: full 24 | -------------------------------------------------------------------------------- /images/audio_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/images/audio_data.png -------------------------------------------------------------------------------- /images/recorder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/images/recorder.png -------------------------------------------------------------------------------- /init_recorder_module.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | cd web 5 | sh ./compile_init_recorder_module.sh 6 | -------------------------------------------------------------------------------- /ios/Classes/flutter_recorder.c: -------------------------------------------------------------------------------- 1 | // Relative import to be able to reuse the C sources. 2 | // See the comment in ../flutter_recorder.podspec for more information. 3 | #include "../../src/flutter_recorder.c" 4 | -------------------------------------------------------------------------------- /ios/Classes/flutter_recorder.mm: -------------------------------------------------------------------------------- 1 | // Relative import to be able to reuse the C sources. 2 | // See the comment in ../flutter_recorder.podspec for more information. 3 | #include "../../src/flutter_recorder.cpp" 4 | 5 | #include "../../src/analyzer.cpp" 6 | #include "../../src/capture.cpp" 7 | #include "../../src/fft/soloud_fft.cpp" 8 | #include "../../src/filters/filters.cpp" 9 | #include "../../src/filters/autogain.cpp" 10 | #include "../../src/filters/echo_cancellation.cpp" 11 | -------------------------------------------------------------------------------- /ios/flutter_recorder.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. 3 | # Run `pod lib lint flutter_recorder.podspec` to validate before publishing. 4 | # 5 | Pod::Spec.new do |s| 6 | s.name = 'flutter_recorder' 7 | s.version = '0.0.1' 8 | s.summary = 'A new Flutter FFI plugin project.' 9 | s.description = <<-DESC 10 | A new Flutter FFI plugin project. 11 | DESC 12 | s.homepage = 'http://example.com' 13 | s.license = { :file => '../LICENSE' } 14 | s.author = { 'Your Company' => 'email@example.com' } 15 | 16 | # This will ensure the source files in Classes/ are included in the native 17 | # builds of apps using this FFI plugin. Podspec does not support relative 18 | # paths, so Classes contains a forwarder C file that relatively imports 19 | # `../src/*` so that the C sources can be shared among all target platforms. 20 | s.source = { :path => '.' } 21 | s.source_files = 'Classes/**/*' 22 | s.dependency 'Flutter' 23 | s.platform = :ios, '12.0' 24 | 25 | s.pod_target_xcconfig = { 26 | 'DEFINES_MODULE' => 'YES', 27 | 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386', 28 | "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", 29 | 'OTHER_CFLAGS' => '-O3 -ffast-math -ffast-math -flto -funroll-loops -pthread', 30 | 'OTHER_CPLUSPLUSFLAGS' => '-O3 -ffast-math -ffast-math -flto -funroll-loops -pthread', 31 | 'GCC_OPTIMIZATION_LEVEL' => '3', 32 | # Add audio and threading optimization flags 33 | 'GCC_PREPROCESSOR_DEFINITIONS' => 'MA_NO_RUNTIME_LINKING=1 NDEBUG=1 _REENTRANT=1', 34 | 'HEADER_SEARCH_PATHS' => '$(inherited) $(PODS_TARGET_SRCROOT)/src' 35 | } 36 | s.swift_version = '5.0' 37 | s.ios.framework = ['CoreAudio', 'AudioToolbox', 'AVFoundation'] 38 | end 39 | -------------------------------------------------------------------------------- /lib/flutter_recorder.dart: -------------------------------------------------------------------------------- 1 | /// Flutter low level audio recorder plugin using miniaudio library and FFI 2 | library flutter_recorder; 3 | 4 | export 'src/audio_data_container.dart'; 5 | export 'src/enums.dart' show PCMFormat, RecorderChannels; 6 | export 'src/filters/autogain.dart'; 7 | export 'src/filters/echo_cancellation.dart'; 8 | export 'src/filters/filters.dart' show RecorderFilterType; 9 | export 'src/flutter_recorder.dart'; 10 | -------------------------------------------------------------------------------- /lib/src/enums.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: sort_constructors_first, public_member_api_docs 2 | 3 | /// CaptureDevice exposed to Dart 4 | final class CaptureDevice { 5 | /// Constructs a new [CaptureDevice]. 6 | // ignore: avoid_positional_boolean_parameters 7 | const CaptureDevice(this.name, this.isDefault, this.id); 8 | 9 | /// The name of the device. 10 | final String name; 11 | 12 | /// Whether this is the default capture device. 13 | final bool isDefault; 14 | 15 | /// The ID of the device. 16 | final int id; 17 | } 18 | 19 | /// Possible capture errors 20 | enum CaptureErrors { 21 | /// No error 22 | captureNoError(0), 23 | 24 | /// The capture device has failed to initialize. 25 | captureInitFailed(1), 26 | 27 | /// The capture device has not yet been initialized. 28 | captureNotInited(2), 29 | 30 | /// Failed to start the device. 31 | failedToStartDevice(3), 32 | 33 | /// Failed to initialize wav recording. 34 | failedToInitializeRecording(4), 35 | 36 | /// Invalid arguments while initializing wav recording. 37 | invalidArgs(5), 38 | 39 | /// Failed to write wav file. 40 | failedToWriteWav(6), 41 | 42 | /// Filter not found 43 | filterNotFound(7), 44 | 45 | /// The filter has already been added. 46 | filterAlreadyAdded(8), 47 | 48 | /// Error getting filter parameter. 49 | filterParameterGetError(9); 50 | 51 | /// Internal value 52 | final int value; 53 | 54 | /// Create a [CaptureErrors] from an internal value 55 | const CaptureErrors(this.value); 56 | 57 | static CaptureErrors fromValue(int value) => switch (value) { 58 | 0 => captureNoError, 59 | 1 => captureInitFailed, 60 | 2 => captureNotInited, 61 | 3 => failedToStartDevice, 62 | 4 => failedToInitializeRecording, 63 | 5 => invalidArgs, 64 | 6 => failedToWriteWav, 65 | 7 => filterNotFound, 66 | 8 => filterAlreadyAdded, 67 | 9 => filterParameterGetError, 68 | _ => throw ArgumentError('Unknown value for CaptureErrors: $value'), 69 | }; 70 | } 71 | 72 | /// The channels to be used while initializing the player. 73 | enum RecorderChannels { 74 | /// One channel. 75 | mono(1), 76 | 77 | /// Two channels. 78 | stereo(2); 79 | 80 | const RecorderChannels(this.count); 81 | 82 | /// The channels count. 83 | final int count; 84 | } 85 | 86 | /// The PCM format 87 | enum PCMFormat { 88 | /// 8-bit unsigned. 89 | u8(0), 90 | 91 | /// 16-bit signed, little-endian. 92 | s16le(1), 93 | 94 | /// 24-bit signed, little-endian. 95 | s24le(2), 96 | 97 | /// 32-bit signed, little-endian. 98 | s32le(3), 99 | 100 | /// 32-bit float, little-endian. 101 | f32le(4); 102 | 103 | final int value; 104 | 105 | const PCMFormat(this.value); 106 | 107 | static PCMFormat fromValue(int value) => switch (value) { 108 | 0 => u8, 109 | 1 => s16le, 110 | 2 => s24le, 111 | 3 => s32le, 112 | 4 => f32le, 113 | _ => throw ArgumentError('Unknown value for PCMFormat: $value'), 114 | }; 115 | } 116 | -------------------------------------------------------------------------------- /lib/src/filters/autogain.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | import 'package:flutter_recorder/src/filters/filters.dart'; 3 | 4 | enum AutoGainEnum { 5 | targetRms, 6 | attackTime, 7 | releaseTime, 8 | gainSmoothing, 9 | maxGain, 10 | minGain; 11 | 12 | final List _defs = const [0.1, 0.1, 0.2, 0.05, 6, 0.2]; 13 | final List _mins = const [0.01, 0.01, 0.01, 0.001, 1, 0.1]; 14 | final List _maxs = const [1, 0.5, 0.5, 1, 6, 1]; 15 | 16 | double get min => _mins[index]; 17 | double get max => _maxs[index]; 18 | double get def => _defs[index]; 19 | 20 | @override 21 | String toString() => switch (this) { 22 | AutoGainEnum.targetRms => 'Target RMS', 23 | AutoGainEnum.attackTime => 'Attack Time', 24 | AutoGainEnum.releaseTime => 'Release Time', 25 | AutoGainEnum.gainSmoothing => 'Gain Smoothing', 26 | AutoGainEnum.maxGain => 'Max Gain', 27 | AutoGainEnum.minGain => 'Min Gain', 28 | }; 29 | } 30 | 31 | abstract class _AutoGainInternal extends FilterBase { 32 | const _AutoGainInternal() : super(RecorderFilterType.autogain); 33 | 34 | AutoGainEnum get queryTargetRms => AutoGainEnum.targetRms; 35 | AutoGainEnum get queryAttackTime => AutoGainEnum.attackTime; 36 | AutoGainEnum get queryReleaseTime => AutoGainEnum.releaseTime; 37 | AutoGainEnum get queryGainSmoothing => AutoGainEnum.gainSmoothing; 38 | AutoGainEnum get queryMaxGain => AutoGainEnum.maxGain; 39 | AutoGainEnum get queryMinGain => AutoGainEnum.minGain; 40 | } 41 | 42 | class AutoGain extends _AutoGainInternal { 43 | const AutoGain() : super(); 44 | 45 | FilterParam get targetRms => FilterParam( 46 | filterType, 47 | AutoGainEnum.targetRms.index, 48 | AutoGainEnum.targetRms.min, 49 | AutoGainEnum.targetRms.max, 50 | ); 51 | 52 | FilterParam get attackTime => FilterParam( 53 | filterType, 54 | AutoGainEnum.attackTime.index, 55 | AutoGainEnum.attackTime.min, 56 | AutoGainEnum.attackTime.max, 57 | ); 58 | 59 | FilterParam get releaseTime => FilterParam( 60 | filterType, 61 | AutoGainEnum.releaseTime.index, 62 | AutoGainEnum.releaseTime.min, 63 | AutoGainEnum.releaseTime.max, 64 | ); 65 | 66 | FilterParam get gainSmoothing => FilterParam( 67 | filterType, 68 | AutoGainEnum.gainSmoothing.index, 69 | AutoGainEnum.gainSmoothing.min, 70 | AutoGainEnum.gainSmoothing.max, 71 | ); 72 | 73 | FilterParam get maxGain => FilterParam( 74 | filterType, 75 | AutoGainEnum.maxGain.index, 76 | AutoGainEnum.maxGain.min, 77 | AutoGainEnum.maxGain.max, 78 | ); 79 | 80 | FilterParam get minGain => FilterParam( 81 | filterType, 82 | AutoGainEnum.minGain.index, 83 | AutoGainEnum.minGain.min, 84 | AutoGainEnum.minGain.max, 85 | ); 86 | } 87 | -------------------------------------------------------------------------------- /lib/src/filters/echo_cancellation.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | import 'package:flutter_recorder/src/filters/filters.dart'; 3 | 4 | enum EchoCancellationEnum { 5 | echoDelayMs, 6 | echoAttenuation; 7 | 8 | final List _defs = const [50, 0.7]; 9 | final List _mins = const [0, 0]; 10 | final List _maxs = const [1000, 1]; 11 | 12 | double get min => _mins[index]; 13 | double get max => _maxs[index]; 14 | double get def => _defs[index]; 15 | 16 | @override 17 | String toString() => switch (this) { 18 | EchoCancellationEnum.echoDelayMs => 'Echo Delay (ms)', 19 | EchoCancellationEnum.echoAttenuation => 'Echo Attenuation', 20 | }; 21 | } 22 | 23 | abstract class _EchoCancellationInternal extends FilterBase { 24 | const _EchoCancellationInternal() 25 | : super(RecorderFilterType.echoCancellation); 26 | 27 | EchoCancellationEnum get queryEchoDelayMs => EchoCancellationEnum.echoDelayMs; 28 | EchoCancellationEnum get queryEchoAttenuation => 29 | EchoCancellationEnum.echoAttenuation; 30 | } 31 | 32 | class EchoCancellation extends _EchoCancellationInternal { 33 | const EchoCancellation() : super(); 34 | 35 | FilterParam get echoDelayMs => FilterParam( 36 | filterType, 37 | EchoCancellationEnum.echoDelayMs.index, 38 | EchoCancellationEnum.echoDelayMs.min, 39 | EchoCancellationEnum.echoDelayMs.max, 40 | ); 41 | 42 | FilterParam get echoAttenuation => FilterParam( 43 | filterType, 44 | EchoCancellationEnum.echoAttenuation.index, 45 | EchoCancellationEnum.echoAttenuation.min, 46 | EchoCancellationEnum.echoAttenuation.max, 47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /lib/src/worker/worker.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | import 'dart:async'; 4 | import 'dart:convert' show jsonEncode; 5 | import 'dart:js_interop'; 6 | 7 | import 'package:meta/meta.dart'; 8 | import 'package:web/web.dart' as web; 9 | 10 | @internal 11 | class WorkerController { 12 | web.Worker? _worker; 13 | StreamController? _outputController; 14 | 15 | /// Spawn a new web Worker with the given JS source (not used now). 16 | static Future spawn(String path) async { 17 | final JSAny newPath = (path.endsWith('.dart') ? '$path.js' : path).toJS; 18 | final controller = WorkerController() 19 | .._outputController = StreamController() 20 | .._worker = web.Worker(newPath); 21 | 22 | controller._worker?.onmessage = ((web.MessageEvent event) { 23 | controller._outputController?.add(event.data.dartify()); 24 | }).toJS; 25 | 26 | return controller; 27 | } 28 | 29 | /// Set the worker created in WASM. 30 | /// This is used to get events sent from the native audio thread. 31 | void setWasmWorker(web.Worker wasmWorker) { 32 | _outputController = StreamController(); 33 | _worker = wasmWorker; 34 | _worker!.onmessage = ((web.MessageEvent event) { 35 | _outputController?.add(event.data.dartify()); 36 | }).toJS; 37 | } 38 | 39 | /// Not used with `RecorderModule.wasmWorker`. 40 | void sendMessage(dynamic message) { 41 | switch (message) { 42 | case Map(): 43 | final mapEncoded = jsonEncode(message); 44 | _worker?.postMessage(mapEncoded.jsify()); 45 | case num(): 46 | _worker?.postMessage(message.toJS); 47 | case String(): 48 | _worker?.postMessage(message.toJS); 49 | default: 50 | try { 51 | final messageJsifyed = (message as Object).jsify(); 52 | _worker?.postMessage(messageJsifyed); 53 | } catch (e) { 54 | throw UnsupportedError( 55 | 'sendMessage(): Type ${message.runtimeType} unsupported', 56 | ); 57 | } 58 | } 59 | } 60 | 61 | /// The receiver Stream. 62 | Stream onReceive() { 63 | return _outputController!.stream; 64 | } 65 | 66 | /// Kill the Worker. 67 | void kill() { 68 | _worker?.terminate(); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /linux/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # The Flutter tooling requires that developers have CMake 3.10 or later 2 | # installed. You should not increase this version, as doing so will cause 3 | # the plugin to fail to compile for some customers of the plugin. 4 | cmake_minimum_required(VERSION 3.10) 5 | 6 | # Project-level configuration. 7 | set(PROJECT_NAME "flutter_recorder") 8 | project(${PROJECT_NAME} LANGUAGES CXX) 9 | set(CMAKE_CXX_STANDARD 17) 10 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 11 | 12 | 13 | if (UNIX AND NOT WIN32 AND NOT APPLE) 14 | if (CMAKE_SIZEOF_VOID_P MATCHES "8") 15 | set (LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement") 16 | mark_as_advanced (LIB_POSTFIX) 17 | endif () 18 | endif () 19 | if (MSVC) 20 | add_definitions (-D_CRT_SECURE_NO_WARNINGS) 21 | endif() 22 | if (NOT DEFINED LIB_POSTFIX) 23 | set (LIB_POSTFIX "") 24 | endif () 25 | 26 | # list( APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-error -fPIC") 27 | # message("*************************************************1 ${CMAKE_CXX_FLAGS} *************************************************") 28 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-error -fPIC -msse2 -msse -mavx -mavx2 -mfma") 29 | # message("*************************************************2 ${CMAKE_CXX_FLAGS} *************************************************") 30 | 31 | # Invoke the build for native code shared with the other target platforms. 32 | # This can be changed to accommodate different builds. 33 | add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../src" "${CMAKE_CURRENT_BINARY_DIR}/shared") 34 | 35 | # List of absolute paths to libraries that should be bundled with the plugin. 36 | # This list could contain prebuilt libraries, or libraries created by an 37 | # external build triggered from this build file. 38 | set(flutter_recorder_bundled_libraries 39 | # Defined in ../src/CMakeLists.txt. 40 | # This can be changed to accommodate different builds. 41 | $ 42 | PARENT_SCOPE 43 | ) 44 | -------------------------------------------------------------------------------- /macos/Classes/flutter_recorder.c: -------------------------------------------------------------------------------- 1 | // Relative import to be able to reuse the C sources. 2 | // See the comment in ../flutter_recorder.podspec for more information. 3 | #include "../../src/flutter_recorder.c" 4 | -------------------------------------------------------------------------------- /macos/Classes/flutter_recorder.mm: -------------------------------------------------------------------------------- 1 | // Relative import to be able to reuse the C sources. 2 | // See the comment in ../flutter_recorder.podspec for more information. 3 | #include "../../src/flutter_recorder.cpp" 4 | 5 | #include "../../src/analyzer.cpp" 6 | #include "../../src/capture.cpp" 7 | #include "../../src/fft/soloud_fft.cpp" 8 | #include "../../src/filters/filters.cpp" 9 | #include "../../src/filters/autogain.cpp" 10 | #include "../../src/filters/echo_cancellation.cpp" 11 | -------------------------------------------------------------------------------- /macos/flutter_recorder.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. 3 | # Run `pod lib lint flutter_recorder.podspec` to validate before publishing. 4 | # 5 | Pod::Spec.new do |s| 6 | s.name = 'flutter_recorder' 7 | s.version = '0.0.1' 8 | s.summary = 'A new Flutter FFI plugin project.' 9 | s.description = <<-DESC 10 | A new Flutter FFI plugin project. 11 | DESC 12 | s.homepage = 'http://example.com' 13 | s.license = { :file => '../LICENSE' } 14 | s.author = { 'Your Company' => 'email@example.com' } 15 | 16 | # This will ensure the source files in Classes/ are included in the native 17 | # builds of apps using this FFI plugin. Podspec does not support relative 18 | # paths, so Classes contains a forwarder C file that relatively imports 19 | # `../src/*` so that the C sources can be shared among all target platforms. 20 | s.source = { :path => '.' } 21 | s.source_files = 'Classes/**/*' 22 | s.dependency 'FlutterMacOS' 23 | 24 | s.platform = :osx, '10.11' 25 | s.pod_target_xcconfig = { 26 | 'DEFINES_MODULE' => 'YES', 27 | "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", 28 | # Enhanced optimization flags 29 | 'OTHER_CFLAGS' => '-O3 -ffast-math -march=native -mtune=native -ffast-math -flto -funroll-loops -pthread -Wno-strict-prototypes', 30 | 'OTHER_CPLUSPLUSFLAGS' => '-O3 -ffast-math -march=native -mtune=native -ffast-math -flto -funroll-loops -pthread -Wno-strict-prototypes', 31 | 'GCC_OPTIMIZATION_LEVEL' => '3', 32 | # Add audio and threading optimization flags 33 | 'GCC_PREPROCESSOR_DEFINITIONS' => 'MA_NO_RUNTIME_LINKING=1 NDEBUG=1 _REENTRANT=1', 34 | 'HEADER_SEARCH_PATHS' => '$(inherited) $(PODS_TARGET_SRCROOT)/src' 35 | } 36 | s.swift_version = '5.0' 37 | s.framework = ['CoreAudio', 'AudioToolbox', 'AVFoundation'] 38 | end 39 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_recorder 2 | description: >- 3 | A low-level audio recorder plugin which uses miniaudio as 4 | backend. Detect silence and save to WAV audio file. Audio 5 | wave, FFT and volume level can be get in real-time. 6 | version: 1.1.1 7 | issue_tracker: https://github.com/alnitak/flutter_recorder/issues 8 | homepage: https://github.com/alnitak/flutter_recorder 9 | maintainer: Marco Bavagnoli (@lildeimos) 10 | platforms: 11 | android: 12 | ios: 13 | linux: 14 | macos: 15 | windows: 16 | web: 17 | topics: 18 | - audio 19 | - recorder 20 | - visualizer 21 | 22 | screenshots: 23 | - description: "flutter_recording logo" 24 | path: images/recorder.png 25 | 26 | environment: 27 | sdk: ^3.5.1 28 | flutter: '>=3.3.0' 29 | 30 | dependencies: 31 | ffi: ^2.1.3 32 | flutter: 33 | sdk: flutter 34 | logging: ^1.3.0 35 | meta: ^1.12.0 36 | plugin_platform_interface: ^2.0.2 37 | web: ^1.1.0 38 | 39 | dev_dependencies: 40 | ffigen: ^13.0.0 41 | flutter_lints: ^4.0.0 42 | flutter_test: 43 | sdk: flutter 44 | very_good_analysis: ^6.0.0 45 | 46 | flutter: 47 | plugin: 48 | platforms: 49 | android: 50 | ffiPlugin: true 51 | ios: 52 | ffiPlugin: true 53 | linux: 54 | ffiPlugin: true 55 | macos: 56 | ffiPlugin: true 57 | windows: 58 | ffiPlugin: true 59 | web: 60 | default_package: true 61 | 62 | assets: 63 | # These assets are only needed for the web platform. 64 | # Waiting for https://github.com/flutter/flutter/issues/65065 and 65 | # https://github.com/flutter/flutter/issues/8230 to be addressed. 66 | # to make a conditional build. 67 | - web/worker.dart.js 68 | - web/init_recorder_module.dart.js 69 | - web/libflutter_recorder_plugin.js 70 | - web/libflutter_recorder_plugin.wasm 71 | 72 | funding: 73 | - https://github.com/sponsors/alnitak 74 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # The Flutter tooling requires that developers have CMake 3.10 or later 2 | # installed. You should not increase this version, as doing so will cause 3 | # the plugin to fail to compile for some customers of the plugin. 4 | cmake_minimum_required(VERSION 3.10) 5 | 6 | project(flutter_recorder_library VERSION 0.0.1 LANGUAGES CXX) 7 | set(CMAKE_CXX_STANDARD 17) 8 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 9 | 10 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 11 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/fft) 12 | 13 | add_library(flutter_recorder SHARED 14 | "flutter_recorder.cpp" 15 | "analyzer.cpp" 16 | "capture.cpp" 17 | "fft/soloud_fft.cpp" 18 | "filters/filters.cpp" 19 | "filters/autogain.cpp" 20 | "filters/echo_cancellation.cpp" 21 | ) 22 | 23 | set_target_properties(flutter_recorder PROPERTIES 24 | PUBLIC_HEADER flutter_recorder.h 25 | OUTPUT_NAME "flutter_recorder" 26 | ) 27 | 28 | target_compile_definitions(flutter_recorder PUBLIC DART_SHARED_LIB) 29 | 30 | if (ANDROID) 31 | # Support Android 15 16k page size. 32 | target_link_options(flutter_recorder PRIVATE "-Wl,-z,max-page-size=16384") 33 | target_link_libraries(flutter_recorder log) 34 | endif() 35 | -------------------------------------------------------------------------------- /src/analyzer.h: -------------------------------------------------------------------------------- 1 | #ifndef ANALYZER_H 2 | #define ANALYZER_H 3 | 4 | #include "common.h" 5 | 6 | class Analyzer { 7 | public: 8 | // Modified constructor to include sample rate 9 | Analyzer(int windowSize, float sampleRate = 44100.0f); 10 | ~Analyzer(); 11 | 12 | // float *calcFFT(float *waveData); 13 | float *calcFFT(float *waveData, float minFrequency = 20.0f, float maxFrequency = 16000.0f); 14 | void setWindowsSize(int fftWindowSize); 15 | void setSmoothing(float smooth); 16 | 17 | private: 18 | /// @brief elaborate FFT data with the Blackman windowing algorithm 19 | void blackmanWindow(float *samples, const float *waveData) const; 20 | 21 | /// @brief elaborate FFT data with the hanning windowing algorithm 22 | void hanningWindow(float* samples, const float *waveData) const; 23 | 24 | /// @brief elaborate FFT data with the hamm windowing algorithm 25 | void hammingWindow(float* samples, const float *waveData) const; 26 | 27 | void gaussWindow(float *samples, const float *waveData) const; 28 | 29 | /// array used by filling it with audio samples and calculate FFT 30 | float temp[1024]; // Needs to be 1024 for fft1024 31 | 32 | /// contains latest calulated FFT 33 | float FFTData[256]; 34 | 35 | /// window size used by windowing algorithms. 36 | /// The size is optained when the player has been initialized 37 | /// and is given by the backend buffer size 38 | /// over its number of channels (maybe@#`#@`#!!) 39 | int mWindowSize; 40 | 41 | /// parameters for the Blackman windowing algorithm 42 | float alpha; 43 | float a0; 44 | float a1; 45 | float a2; 46 | float fftSmoothing; 47 | 48 | float sampleRate; 49 | float getBinFrequency(int binIndex) const; 50 | 51 | float minFreq; // Minimum frequency to analyze 52 | float maxFreq; // Maximum frequency to analyze 53 | int minBin; // Minimum FFT bin corresponding to minFreq 54 | int maxBin; // Maximum FFT bin corresponding to maxFreq 55 | 56 | int freqToBin(float frequency) const; 57 | int mapFrequencyToFFTDataIndex(float freq) const; 58 | float mapFFTDataIndexToFrequency(int index) const; 59 | }; 60 | 61 | #endif // ANALYZER_H 62 | -------------------------------------------------------------------------------- /src/circular_buffer.h: -------------------------------------------------------------------------------- 1 | #ifndef CIRCULAR_BUFFER_H 2 | #define CIRCULAR_BUFFER_H 3 | 4 | #include "common.h" 5 | #include 6 | #include 7 | #ifndef _IS_WIN_ 8 | #include 9 | #endif 10 | 11 | template 12 | class CircularBuffer 13 | { 14 | private: 15 | std::vector buffer; 16 | unsigned int maxSize; 17 | unsigned int currentSize; 18 | unsigned int head; 19 | unsigned int tail; 20 | 21 | public: 22 | CircularBuffer(unsigned int size) : buffer(size), 23 | maxSize(size), 24 | currentSize(0), 25 | head(0), 26 | tail(0) {} 27 | 28 | int size() { return currentSize; } 29 | 30 | void push(const std::vector &values) 31 | { 32 | unsigned int numValues = (unsigned int)values.size(); 33 | 34 | // Check if the buffer is full 35 | if (currentSize + numValues > maxSize) 36 | { 37 | unsigned int numToRemove = currentSize + numValues - maxSize; 38 | head = (head + numToRemove) % maxSize; 39 | currentSize -= numToRemove; 40 | } 41 | 42 | unsigned int numTail = std::min(numValues, maxSize - tail); 43 | 44 | // Copy values to the tail of the buffer 45 | std::copy(values.begin(), values.begin() + numTail, buffer.begin() + tail); 46 | 47 | // If there are remaining values, copy them to the head of the buffer 48 | if (numValues > numTail) 49 | { 50 | std::copy(values.begin() + numTail, values.end(), buffer.begin()); 51 | } 52 | 53 | tail = (tail + numValues) % maxSize; 54 | currentSize = std::min(currentSize + numValues, maxSize); 55 | } 56 | 57 | std::vector pop(unsigned int numValues) 58 | { 59 | numValues = std::min(numValues, currentSize); 60 | std::vector poppedValues(numValues); 61 | 62 | unsigned int numTail = std::min(numValues, maxSize - head); 63 | 64 | // Copy values from the head of the buffer 65 | std::copy(buffer.begin() + head, buffer.begin() + head + numTail, poppedValues.begin()); 66 | 67 | // If there are remaining values, copy them from the tail of the buffer 68 | if (numValues > numTail) 69 | { 70 | std::copy(buffer.begin(), buffer.begin() + numValues - numTail, poppedValues.begin() + numTail); 71 | } 72 | 73 | head = (head + numValues) % maxSize; 74 | currentSize -= numValues; 75 | 76 | return poppedValues; 77 | } 78 | 79 | void print() const 80 | { 81 | std::cout << "N: " << currentSize << " - "; 82 | for (unsigned int i = 0; i < currentSize; ++i) 83 | { 84 | unsigned int index = (head + i) % maxSize; 85 | std::cout << buffer[index] << " "; 86 | } 87 | std::cout << std::endl; 88 | } 89 | }; 90 | 91 | #endif // CIRCULAR_BUFFER_H 92 | -------------------------------------------------------------------------------- /src/common.h: -------------------------------------------------------------------------------- 1 | #ifndef COMMON_H 2 | #define COMMON_H 3 | 4 | 5 | #ifdef __ANDROID__ 6 | #define _IS_ANDROID_ 7 | #elif __linux__ 8 | #define _IS_LINUX_ 9 | #elif _WIN32 | WIN32 | __WIN32 | _WIN64 10 | #define _IS_WIN_ 11 | #elif __APPLE__ 12 | #include 13 | #define _IS_MACOS_ 14 | /// these targets doesn't work! 15 | #ifdef TARGET_OS_IPHONE 16 | // iOS 17 | #elif TARGET_IPHONE_SIMULATOR 18 | // iOS Simulator 19 | #elif TARGET_OS_MAC 20 | #define _IS_MACOS_ 21 | #else 22 | // Unsupported platform 23 | #endif 24 | #else 25 | #define _WASM_ 26 | #endif 27 | 28 | #ifdef _IS_WIN_ 29 | #define NOMINMAX 30 | #include 31 | #define FFI_PLUGIN_EXPORT __declspec(dllexport) 32 | #endif 33 | 34 | #ifdef _IS_ANDROID_ 35 | #include 36 | #endif 37 | 38 | #if defined _IS_LINUX_ || defined _IS_MACOS_ || defined _IS_ANDROID_ || defined _WASM_ 39 | #include 40 | #include 41 | #include 42 | #define FFI_PLUGIN_EXPORT __attribute__((visibility("default"))) __attribute__((used)) 43 | #endif 44 | 45 | typedef void (*dartSilenceChangedCallback_t)(bool *, float *); 46 | 47 | typedef void (*dartStreamDataCallback_t)(const unsigned char * data, const int dataLength); 48 | 49 | // To be used by `NativeCallable` since it will be called inside the audio thread, 50 | // these functions must return void. 51 | extern void (*dartSilenceChangedCallback)(bool *, float *); 52 | 53 | // Native functions can be called from any thread. It will eventually call `dartSilenceChangedCallback`. 54 | extern void (*nativeSilenceChangedCallback)(bool *, float *); 55 | 56 | extern void (*dartStreamDataCallback)(const unsigned char * data, const int dataLength); 57 | 58 | extern void (*nativeStreamDataCallback)(const unsigned char * data, const int dataLength); 59 | 60 | #endif // COMMON_H 61 | -------------------------------------------------------------------------------- /src/enums.h: -------------------------------------------------------------------------------- 1 | #ifndef ENUMS_H 2 | #define ENUMS_H 3 | 4 | /// Possible capture errors 5 | typedef enum CaptureErrors 6 | { 7 | /// No error 8 | captureNoError = 0, 9 | /// The capture device has failed to initialize. 10 | captureInitFailed = 1, 11 | /// The capture device has not yet been initialized. 12 | captureNotInited = 2, 13 | /// Failed to start the device. 14 | failedToStartDevice = 3, 15 | /// Failed to initialize wav recording. 16 | failedToInitializeRecording = 4, 17 | /// Invalid arguments while initializing wav recording. 18 | invalidArgs = 5, 19 | /// Failed to write wav file. 20 | failedToWriteWav = 6, 21 | /// Filter not found 22 | filterNotFound = 7, 23 | /// The filter has already been added. 24 | filterAlreadyAdded = 8, 25 | /// Error getting filter parameter. 26 | filterParameterGetError = 9 27 | } CaptureErrorsInternal_t; 28 | 29 | typedef enum PCMFormat 30 | { 31 | pcm_u8, 32 | pcm_s16, 33 | pcm_s24, 34 | pcm_s32, 35 | pcm_f32 36 | } PCMFormatInternal_t; 37 | 38 | typedef enum RecorderFilterType 39 | { 40 | autogain, 41 | echoCancellation 42 | } FilterType_t; 43 | 44 | #endif // ENUMS_H -------------------------------------------------------------------------------- /src/fft/soloud_fft.h: -------------------------------------------------------------------------------- 1 | /* 2 | SoLoud audio engine 3 | Copyright (c) 2013-2015 Jari Komppa 4 | 5 | This software is provided 'as-is', without any express or implied 6 | warranty. In no event will the authors be held liable for any damages 7 | arising from the use of this software. 8 | 9 | Permission is granted to anyone to use this software for any purpose, 10 | including commercial applications, and to alter it and redistribute it 11 | freely, subject to the following restrictions: 12 | 13 | 1. The origin of this software must not be misrepresented; you must not 14 | claim that you wrote the original software. If you use this software 15 | in a product, an acknowledgment in the product documentation would be 16 | appreciated but is not required. 17 | 18 | 2. Altered source versions must be plainly marked as such, and must not be 19 | misrepresented as being the original software. 20 | 21 | 3. This notice may not be removed or altered from any source 22 | distribution. 23 | */ 24 | 25 | #ifndef SOLOUD_FFT_H 26 | #define SOLOUD_FFT_H 27 | 28 | namespace FFT 29 | { 30 | #ifdef __cplusplus 31 | extern "C" 32 | { 33 | #endif 34 | // Perform 1024 unit FFT. Buffer must have 1024 floats, and will be overwritten 35 | void fft1024(float *aBuffer); 36 | 37 | // Perform 256 unit FFT. Buffer must have 256 floats, and will be overwritten 38 | void fft256(float *aBuffer); 39 | 40 | // Perform 256 unit IFFT. Buffer must have 256 floats, and will be overwritten 41 | void ifft256(float *aBuffer); 42 | 43 | // Generic (slower) power of two FFT. Buffer is overwritten. 44 | void fft(float *aBuffer, unsigned int aBufferLength); 45 | 46 | // Generic (slower) power of two IFFT. Buffer is overwritten. 47 | void ifft(float *aBuffer, unsigned int aBufferLength); 48 | 49 | #ifdef __cplusplus 50 | } 51 | #endif 52 | }; 53 | 54 | #endif -------------------------------------------------------------------------------- /src/filters/echo_cancellation.h: -------------------------------------------------------------------------------- 1 | #ifndef ECHO_CANCELLATION_H 2 | #define ECHO_CANCELLATION_H 3 | 4 | #include "generic_filter.h" 5 | 6 | #include 7 | #include 8 | 9 | class EchoCancellation : public GenericFilter 10 | { 11 | public: 12 | // Enum for filter parameters 13 | enum Params 14 | { 15 | EchoDelayMs, 16 | EchoAttenuation, 17 | ParamCount // Always keep this last; indicates the number of parameters 18 | }; 19 | 20 | EchoCancellation() {}; 21 | EchoCancellation(unsigned int sampleRate); 22 | 23 | int getParamCount() const override; 24 | float getParamMax(int param) const override; 25 | float getParamMin(int param) const override; 26 | float getParamDef(int param) const override; 27 | std::string getParamName(int param) const override; 28 | void setParamValue(int param, float value) override; 29 | float getParamValue(int param) const override; 30 | 31 | void process(void *pInput, ma_uint32 frameCount, unsigned int channels, ma_format format) override; 32 | 33 | private: 34 | // Struct to hold parameter information 35 | struct ParamInfo 36 | { 37 | float defaultVal; 38 | float minVal; 39 | float maxVal; 40 | }; 41 | 42 | unsigned int mDelaySamples; 43 | std::vector mBuffer; // Circular buffer for storing past samples 44 | unsigned int mWriteIndex; 45 | 46 | // Parameter metadata 47 | std::unordered_map mParams; 48 | 49 | // Parameter values 50 | std::vector mValues; 51 | 52 | template 53 | void processAudio(void *pInput, ma_uint32 frameCount, unsigned int channels); 54 | 55 | void processAudioS24(void *pInput, ma_uint32 frameCount, unsigned int channels); 56 | 57 | float normalizeSample(unsigned char sample); 58 | 59 | float normalizeSample(int16_t sample); 60 | 61 | float normalizeSample(int32_t sample); 62 | 63 | float normalizeSample(float sample); 64 | 65 | template 66 | T denormalizeSample(float sample); 67 | 68 | // Validate parameter index 69 | void validateParam(int param) const; 70 | }; 71 | 72 | #endif // ECHO_CANCELLATION_H -------------------------------------------------------------------------------- /src/filters/filters.h: -------------------------------------------------------------------------------- 1 | #ifndef FILTERS_H 2 | #define FILTERS_H 3 | 4 | #include "../enums.h" 5 | #include "generic_filter.h" 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | struct FilterObject 12 | { 13 | RecorderFilterType type; 14 | std::unique_ptr filter; 15 | 16 | FilterObject(RecorderFilterType t, std::unique_ptr f) 17 | : type(t), filter(std::move(f)) {} 18 | 19 | bool operator==(RecorderFilterType const &i) 20 | { 21 | return (i == type); 22 | } 23 | }; 24 | 25 | /// Class to manage global filters. 26 | class Filters 27 | { 28 | /// Setting the global filter to NULL will clear the global filter. 29 | /// The default maximum number of global filters active is 4, but this 30 | /// can be changed in a global constant in soloud.h (and rebuilding SoLoud). 31 | public: 32 | Filters(unsigned int samplerate); 33 | ~Filters(); 34 | 35 | /// Return -1 if the filter is not active or its index 36 | int isFilterActive(RecorderFilterType filter); 37 | 38 | CaptureErrors addFilter(RecorderFilterType filterType); 39 | 40 | CaptureErrors removeFilter(RecorderFilterType filterType); 41 | 42 | std::vector getFilterParamNames(RecorderFilterType filterType); 43 | 44 | /// If [handle]==0 the operation is done to global filters. 45 | void setFilterParams(RecorderFilterType filterType, int attributeId, float value); 46 | 47 | /// If [handle]==0 the operation is done to global filters. 48 | float getFilterParams(RecorderFilterType filterType, int attributeId); 49 | 50 | unsigned int mSamplerate; 51 | 52 | std::vector> filters; 53 | }; 54 | 55 | #endif // PLAYER_H 56 | -------------------------------------------------------------------------------- /src/filters/generic_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef GENERIC_FILTERS_H 2 | #define GENERIC_FILTERS_H 3 | 4 | #include "../miniaudio.h" 5 | 6 | #include 7 | 8 | // Abstract Base Class for Generic Filters 9 | class GenericFilter { 10 | public: 11 | virtual ~GenericFilter() = default; 12 | 13 | // Methods for managing parameters 14 | virtual int getParamCount() const = 0; 15 | virtual float getParamMax(int param) const = 0; 16 | virtual float getParamMin(int param) const = 0; 17 | virtual float getParamDef(int param) const = 0; 18 | virtual std::string getParamName(int param) const = 0; 19 | virtual void setParamValue(int param, float value) = 0; 20 | virtual float getParamValue(int param) const = 0; 21 | 22 | // Pure virtual method to apply the filter (to be implemented by derived classes) 23 | virtual void process(void* pInput, ma_uint32 frameCount, unsigned int channels, ma_format format) = 0; 24 | }; 25 | 26 | #endif // GENERIC_FILTERS_H -------------------------------------------------------------------------------- /src/flutter_recorder.c: -------------------------------------------------------------------------------- 1 | #include "flutter_recorder.h" 2 | 3 | // A very short-lived native function. 4 | // 5 | // For very short-lived functions, it is fine to call them on the main isolate. 6 | // They will block the Dart execution while running the native function, so 7 | // only do this for native functions which are guaranteed to be short-lived. 8 | FFI_PLUGIN_EXPORT int sum(int a, int b) { return a + b; } 9 | 10 | // A longer-lived native function, which occupies the thread calling it. 11 | // 12 | // Do not call these kind of native functions in the main isolate. They will 13 | // block Dart execution. This will cause dropped frames in Flutter applications. 14 | // Instead, call these native functions on a separate isolate. 15 | FFI_PLUGIN_EXPORT int sum_long_running(int a, int b) { 16 | // Simulate work. 17 | #if _WIN32 18 | Sleep(5000); 19 | #else 20 | usleep(5000 * 1000); 21 | #endif 22 | return a + b; 23 | } 24 | -------------------------------------------------------------------------------- /wasm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | cd web 5 | sh ./compile_wasm.sh 6 | -------------------------------------------------------------------------------- /web.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | cd web 5 | sh ./compile_worker.sh 6 | -------------------------------------------------------------------------------- /web/compile_init_recorder_module.sh: -------------------------------------------------------------------------------- 1 | dart compile js -O3 -o init_recorder_module.dart.js ./init_recorder_module.dart 2 | -------------------------------------------------------------------------------- /web/compile_wasm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | rm -f libflutter_recorder_plugin.* 5 | rm -rf build 6 | mkdir build 7 | cd build 8 | 9 | #https://emscripten.org/docs/tools_reference/emcc.html 10 | #-g3 #keep debug info, including JS whitespace, function names 11 | 12 | em++ -O3 \ 13 | -I ../../src/fft \ 14 | -I ../../src \ 15 | ../../src/flutter_recorder.cpp \ 16 | ../../src/capture.cpp \ 17 | ../../src/analyzer.cpp \ 18 | ../../src/fft/soloud_fft.cpp \ 19 | ../../src/filters/filters.cpp \ 20 | ../../src/filters/autogain.cpp \ 21 | ../../src/filters/echo_cancellation.cpp \ 22 | -s MODULARIZE=1 -s EXPORT_NAME="'RecorderModule'" \ 23 | -msimd128 -msse3 \ 24 | -s "EXPORTED_RUNTIME_METHODS=['ccall','cwrap']" \ 25 | -s "EXPORTED_FUNCTIONS=['_free', '_malloc']" \ 26 | -s EXPORT_ALL=1 \ 27 | -s NO_EXIT_RUNTIME=1 \ 28 | -s SAFE_HEAP=1 \ 29 | -s STACK_SIZE=4194304 \ 30 | -s ALLOW_TABLE_GROWTH=1 \ 31 | -s ALLOW_MEMORY_GROWTH=1 \ 32 | -o ../../web/libflutter_recorder_plugin.js 33 | -------------------------------------------------------------------------------- /web/compile_worker.sh: -------------------------------------------------------------------------------- 1 | dart compile js -O3 -o worker.dart.js ./worker.dart 2 | 3 | -------------------------------------------------------------------------------- /web/init_recorder_module.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_print 2 | 3 | import 'dart:js_interop'; 4 | 5 | /// Module to initialized the WASM RecorderModule before the app starts. 6 | /// It must be compiled with 7 | /// `dart compile js -O3 -o init_recorder_module.dart.js ./init_recorder_module.dart` 8 | /// and the resulting `init_recorder_module.dart.js` must be added as a script 9 | /// in the `index.html` with also `libflutter_recorder_plugin.js`: 10 | /// ```hmtl 11 | /// 12 | /// 13 | /// ``` 14 | 15 | @JS('RecorderModule') 16 | external JSObject getRecorderModule(); 17 | 18 | @JS('RecorderModule') 19 | external JSObject recorderModuleConstructor(); // Represents the IIFE 20 | 21 | @JS('self.RecorderModule') // Attach RecorderModule to the global scope 22 | external set globalRecorderModule(JSObject module); 23 | 24 | Future initializeRecorderModule() async { 25 | try { 26 | // Convert JavaScript Promise to Dart Future 27 | final modulePromise = recorderModuleConstructor() as JSPromise; 28 | final module = await JSPromiseToFuture(modulePromise).toDart; 29 | if (module == null) { 30 | throw Exception('Module initialization failed: Module is null'); 31 | } 32 | globalRecorderModule = module as JSObject; // Make it globally accessible 33 | print('RecorderModule initialized and set globally.'); 34 | return module; // Return the initialized module 35 | } catch (e) { 36 | print('Failed to initialize RecorderModule: $e'); 37 | rethrow; 38 | } 39 | } 40 | 41 | /// The main Web Worker 42 | void main() async { 43 | await initializeRecorderModule(); 44 | } 45 | -------------------------------------------------------------------------------- /web/libflutter_recorder_plugin.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alnitak/flutter_recorder/44e0074ab2cf35487180b5be4338defe82688484/web/libflutter_recorder_plugin.wasm -------------------------------------------------------------------------------- /web/worker.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:js_interop'; 3 | import 'dart:js_interop_unsafe'; 4 | 5 | import 'package:web/web.dart' as web; 6 | 7 | // Masked type: ServiceWorkerGlobalScope 8 | @JS('self') 9 | external JSObject get globalScopeSelf; 10 | 11 | @JS('self.importScript') 12 | // ignore: unused_element 13 | external JSAny _importScript(String path); 14 | 15 | void jsSendMessage(dynamic m) { 16 | globalContext.callMethod('postMessage'.toJS, (m as Object).jsify()); 17 | } 18 | 19 | Stream callbackToStream( 20 | JSObject object, 21 | String name, 22 | T Function(J jsValue) unwrapValue, 23 | ) { 24 | final controller = StreamController.broadcast(sync: true); 25 | 26 | void eventFunction(JSAny event) { 27 | controller.add(unwrapValue(event as J)); 28 | } 29 | 30 | object.setProperty( 31 | name.toJS, 32 | eventFunction.toJS, 33 | ); 34 | return controller.stream; 35 | } 36 | 37 | class Worker { 38 | Worker() { 39 | _outputController = StreamController(); 40 | callbackToStream(globalScopeSelf, 'onmessage', (web.MessageEvent e) { 41 | final data = (e as JSObject).getProperty('data'.toJS); 42 | _outputController.add(data); 43 | }); 44 | } 45 | late StreamController _outputController; 46 | 47 | Stream onReceive() => _outputController.stream; 48 | 49 | void sendMessage(dynamic message) { 50 | jsSendMessage(message); 51 | } 52 | } 53 | 54 | /// The main Web Worker 55 | void main() async { 56 | // print('Worker created.\n'); 57 | final worker = Worker(); 58 | worker.onReceive().listen((data) { 59 | try { 60 | // ignore: avoid_print 61 | // print('Worker.js: Received $data PARSED TO $parseMap\n'); 62 | worker.sendMessage(data); 63 | } catch (e) { 64 | // ignore: avoid_print 65 | print("Received data from WASM worker but it's not a String!\n"); 66 | } 67 | }); 68 | } 69 | -------------------------------------------------------------------------------- /windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /windows/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # The Flutter tooling requires that developers have a version of Visual Studio 2 | # installed that includes CMake 3.14 or later. You should not increase this 3 | # version, as doing so will cause the plugin to fail to compile for some 4 | # customers of the plugin. 5 | cmake_minimum_required(VERSION 3.14) 6 | 7 | # Project-level configuration. 8 | set(PROJECT_NAME "flutter_recorder") 9 | project(${PROJECT_NAME} LANGUAGES CXX) 10 | set(CMAKE_CXX_STANDARD 17) 11 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 12 | 13 | 14 | if (UNIX AND NOT WIN32 AND NOT APPLE) 15 | if (CMAKE_SIZEOF_VOID_P MATCHES "8") 16 | set (LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement") 17 | mark_as_advanced (LIB_POSTFIX) 18 | endif () 19 | endif () 20 | if (MSVC) 21 | add_definitions (-D_CRT_SECURE_NO_WARNINGS) 22 | endif() 23 | if (NOT DEFINED LIB_POSTFIX) 24 | set (LIB_POSTFIX "") 25 | endif () 26 | 27 | # list( APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-error -fPIC") 28 | message("*************************************************1 ${CMAKE_CXX_FLAGS} *************************************************") 29 | #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-error -fPIC -msse2 -msse -mavx -mavx2 -mfma") 30 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX-") 31 | message("*************************************************2 ${CMAKE_CXX_FLAGS} *************************************************") 32 | 33 | 34 | # Invoke the build for native code shared with the other target platforms. 35 | # This can be changed to accommodate different builds. 36 | add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../src" "${CMAKE_CURRENT_BINARY_DIR}/shared") 37 | 38 | # List of absolute paths to libraries that should be bundled with the plugin. 39 | # This list could contain prebuilt libraries, or libraries created by an 40 | # external build triggered from this build file. 41 | set(flutter_recorder_bundled_libraries 42 | # Defined in ../src/CMakeLists.txt. 43 | # This can be changed to accommodate different builds. 44 | $ 45 | PARENT_SCOPE 46 | ) 47 | --------------------------------------------------------------------------------