diff --git a/assets/sounds_online.wav b/assets/sounds_online.wav new file mode 100644 index 00000000..9b95dfc2 Binary files /dev/null and b/assets/sounds_online.wav differ diff --git a/lib/models/appstate.dart b/lib/models/appstate.dart index 9d8f54b9..cc8b2d2a 100644 --- a/lib/models/appstate.dart +++ b/lib/models/appstate.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:cwtch/config.dart'; +import 'package:cwtch/third_party/miniaudio/lib/miniaudio.dart'; import 'package:flutter/widgets.dart'; enum ModalState { none, storageMigration, shutdown } @@ -28,6 +29,10 @@ class AppState extends ChangeNotifier { void SetCwtchInit() { cwtchInit = true; + var audio = MiniAudio(); + audio.initAudio().then((value) { + audio.playAudio("assets/sounds_online.wav"); + }); notifyListeners(); } diff --git a/lib/third_party/camera_linux/pubspec.yaml b/lib/third_party/camera_linux/pubspec.yaml index 4965274e..9b48d91a 100644 --- a/lib/third_party/camera_linux/pubspec.yaml +++ b/lib/third_party/camera_linux/pubspec.yaml @@ -14,8 +14,7 @@ dependencies: ffi: ^2.0.1 dev_dependencies: - ffigen: ^6.1.2 - image: ^3.0.1 + ffigen: 11.0.0 flutter_test: sdk: flutter flutter_lints: ^2.0.0 diff --git a/lib/third_party/camera_linux/src/opencv_wrapper.cpp b/lib/third_party/camera_linux/src/opencv_wrapper.cpp index a9edb346..4fec44dd 100644 --- a/lib/third_party/camera_linux/src/opencv_wrapper.cpp +++ b/lib/third_party/camera_linux/src/opencv_wrapper.cpp @@ -30,6 +30,7 @@ extern "C" { if (latestFrame.empty()) { break; } + } cap.release(); } diff --git a/lib/third_party/miniaudio/.gitignore b/lib/third_party/miniaudio/.gitignore deleted file mode 100644 index ac5aa989..00000000 --- a/lib/third_party/miniaudio/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -build/ diff --git a/lib/third_party/miniaudio/.metadata b/lib/third_party/miniaudio/.metadata deleted file mode 100644 index c1e890eb..00000000 --- a/lib/third_party/miniaudio/.metadata +++ /dev/null @@ -1,42 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "41456452f29d64e8deb623a3c927524bcf9f111b" - channel: "stable" - -project_type: plugin - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: android - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: ios - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: linux - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: macos - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: windows - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/lib/third_party/miniaudio/CHANGELOG.md b/lib/third_party/miniaudio/CHANGELOG.md deleted file mode 100644 index 41cc7d81..00000000 --- a/lib/third_party/miniaudio/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* TODO: Describe initial release. diff --git a/lib/third_party/miniaudio/LICENSE b/lib/third_party/miniaudio/LICENSE deleted file mode 100644 index ba75c69f..00000000 --- a/lib/third_party/miniaudio/LICENSE +++ /dev/null @@ -1 +0,0 @@ -TODO: Add your license here. diff --git a/lib/third_party/miniaudio/README.md b/lib/third_party/miniaudio/README.md deleted file mode 100644 index d63ab694..00000000 --- a/lib/third_party/miniaudio/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# miniaudio - -A new Flutter plugin project. - -## Getting Started - -This project is a starting point for a Flutter -[plug-in package](https://flutter.dev/developing-packages/), -a specialized package that includes platform-specific implementation code for -Android and/or iOS. - -For help getting started with Flutter development, view the -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. - diff --git a/lib/third_party/miniaudio/android/.gitignore b/lib/third_party/miniaudio/android/.gitignore deleted file mode 100644 index 161bdcda..00000000 --- a/lib/third_party/miniaudio/android/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.cxx diff --git a/lib/third_party/miniaudio/android/build.gradle b/lib/third_party/miniaudio/android/build.gradle deleted file mode 100644 index a615a449..00000000 --- a/lib/third_party/miniaudio/android/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -group 'com.example.miniaudio' -version '1.0-SNAPSHOT' - -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' - -android { - if (project.android.hasProperty("namespace")) { - namespace 'com.example.miniaudio' - } - - compileSdkVersion 33 - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - test.java.srcDirs += 'src/test/kotlin' - } - - defaultConfig { - minSdkVersion 19 - } - - dependencies { - testImplementation 'org.jetbrains.kotlin:kotlin-test' - testImplementation 'org.mockito:mockito-core:5.0.0' - } - - testOptions { - unitTests.all { - useJUnitPlatform() - - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true - } - } - } -} diff --git a/lib/third_party/miniaudio/android/settings.gradle b/lib/third_party/miniaudio/android/settings.gradle deleted file mode 100644 index 818ccf8d..00000000 --- a/lib/third_party/miniaudio/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'miniaudio' diff --git a/lib/third_party/miniaudio/android/src/main/AndroidManifest.xml b/lib/third_party/miniaudio/android/src/main/AndroidManifest.xml deleted file mode 100644 index 545c5e88..00000000 --- a/lib/third_party/miniaudio/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/lib/third_party/miniaudio/android/src/main/kotlin/com/example/miniaudio/MiniaudioPlugin.kt b/lib/third_party/miniaudio/android/src/main/kotlin/com/example/miniaudio/MiniaudioPlugin.kt deleted file mode 100644 index 372bb297..00000000 --- a/lib/third_party/miniaudio/android/src/main/kotlin/com/example/miniaudio/MiniaudioPlugin.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.miniaudio - -import androidx.annotation.NonNull - -import io.flutter.embedding.engine.plugins.FlutterPlugin -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import io.flutter.plugin.common.MethodChannel.MethodCallHandler -import io.flutter.plugin.common.MethodChannel.Result - -/** MiniaudioPlugin */ -class MiniaudioPlugin: FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private lateinit var channel : MethodChannel - - override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - channel = MethodChannel(flutterPluginBinding.binaryMessenger, "miniaudio") - channel.setMethodCallHandler(this) - } - - override fun onMethodCall(call: MethodCall, result: Result) { - if (call.method == "getPlatformVersion") { - result.success("Android ${android.os.Build.VERSION.RELEASE}") - } else { - result.notImplemented() - } - } - - override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) - } -} diff --git a/lib/third_party/miniaudio/android/src/test/kotlin/com/example/miniaudio/MiniaudioPluginTest.kt b/lib/third_party/miniaudio/android/src/test/kotlin/com/example/miniaudio/MiniaudioPluginTest.kt deleted file mode 100644 index 9e41dd6a..00000000 --- a/lib/third_party/miniaudio/android/src/test/kotlin/com/example/miniaudio/MiniaudioPluginTest.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.miniaudio - -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import kotlin.test.Test -import org.mockito.Mockito - -/* - * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. - * - * Once you have built the plugin's example app, you can run these tests from the command - * line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or - * you can run them directly from IDEs that support JUnit such as Android Studio. - */ - -internal class MiniaudioPluginTest { - @Test - fun onMethodCall_getPlatformVersion_returnsExpectedValue() { - val plugin = MiniaudioPlugin() - - val call = MethodCall("getPlatformVersion", null) - val mockResult: MethodChannel.Result = Mockito.mock(MethodChannel.Result::class.java) - plugin.onMethodCall(call, mockResult) - - Mockito.verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE) - } -} diff --git a/lib/third_party/miniaudio/ffigen.yaml b/lib/third_party/miniaudio/ffigen.yaml new file mode 100644 index 00000000..ae536e8b --- /dev/null +++ b/lib/third_party/miniaudio/ffigen.yaml @@ -0,0 +1,19 @@ +# Run with `flutter pub run ffigen --config ffigen.yaml`. +name: MiniAudioBindings +description: | + Bindings for `src/audio.h`. + + Regenerate bindings with `flutter pub run ffigen --config ffigen.yaml`. +output: 'lib/miniaudio_bindings_generated.dart' +headers: + entry-points: + - 'src/audio.h' + include-directives: + - 'src/audio.h' +preamble: | + // ignore_for_file: always_specify_types + // ignore_for_file: camel_case_types + // ignore_for_file: non_constant_identifier_names +comments: + style: any + length: full diff --git a/lib/third_party/miniaudio/lib/miniaudio.dart b/lib/third_party/miniaudio/lib/miniaudio.dart index ffb33be1..72e006a6 100644 --- a/lib/third_party/miniaudio/lib/miniaudio.dart +++ b/lib/third_party/miniaudio/lib/miniaudio.dart @@ -1,8 +1,27 @@ +import 'dart:async'; +import 'dart:ffi'; +import 'dart:typed_data'; +import 'package:miniaudio/miniaudio_bindings_generated.dart'; -import 'miniaudio_platform_interface.dart'; +import 'package:ffi/ffi.dart'; -class Miniaudio { - Future getPlatformVersion() { - return MiniaudioPlatform.instance.getPlatformVersion(); +class MiniAudio { + late MiniAudioBindings _bindings; + + MiniAudio() { + final dylib = DynamicLibrary.open('libminiaudio.so'); + _bindings = MiniAudioBindings(dylib); } + + Future initAudio() async { + _bindings.initAudio(); + } + + // Open Default Camera + Future playAudio(String file) async { + var filePtr = file.toNativeUtf8(); + _bindings.playAudio(filePtr.cast()); + malloc.free(filePtr); + } + } diff --git a/lib/third_party/miniaudio/lib/miniaudio_bindings_generated.dart b/lib/third_party/miniaudio/lib/miniaudio_bindings_generated.dart new file mode 100644 index 00000000..55597421 --- /dev/null +++ b/lib/third_party/miniaudio/lib/miniaudio_bindings_generated.dart @@ -0,0 +1,50 @@ +// ignore_for_file: always_specify_types +// ignore_for_file: camel_case_types +// ignore_for_file: non_constant_identifier_names + +// AUTO GENERATED FILE, DO NOT EDIT. +// +// Generated by `package:ffigen`. +import 'dart:ffi' as ffi; + +/// Bindings for `src/audio.h`. +/// +/// Regenerate bindings with `flutter pub run ffigen --config ffigen.yaml`. +/// +class MiniAudioBindings { + /// Holds the symbol lookup function. + final ffi.Pointer Function(String symbolName) + _lookup; + + /// The symbols are looked up in [dynamicLibrary]. + MiniAudioBindings(ffi.DynamicLibrary dynamicLibrary) + : _lookup = dynamicLibrary.lookup; + + /// The symbols are looked up with [lookup]. + MiniAudioBindings.fromLookup( + ffi.Pointer Function(String symbolName) + lookup) + : _lookup = lookup; + + void initAudio() { + return _initAudio(); + } + + late final _initAudioPtr = + _lookup>('initAudio'); + late final _initAudio = _initAudioPtr.asFunction(); + + void playAudio( + ffi.Pointer file, + ) { + return _playAudio( + file, + ); + } + + late final _playAudioPtr = + _lookup)>>( + 'playAudio'); + late final _playAudio = + _playAudioPtr.asFunction)>(); +} diff --git a/lib/third_party/miniaudio/lib/miniaudio_method_channel.dart b/lib/third_party/miniaudio/lib/miniaudio_method_channel.dart deleted file mode 100644 index 3011fa0f..00000000 --- a/lib/third_party/miniaudio/lib/miniaudio_method_channel.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; - -import 'miniaudio_platform_interface.dart'; - -/// An implementation of [MiniaudioPlatform] that uses method channels. -class MethodChannelMiniaudio extends MiniaudioPlatform { - /// The method channel used to interact with the native platform. - @visibleForTesting - final methodChannel = const MethodChannel('miniaudio'); - - @override - Future getPlatformVersion() async { - final version = await methodChannel.invokeMethod('getPlatformVersion'); - return version; - } -} diff --git a/lib/third_party/miniaudio/lib/miniaudio_platform_interface.dart b/lib/third_party/miniaudio/lib/miniaudio_platform_interface.dart deleted file mode 100644 index 249f7ba4..00000000 --- a/lib/third_party/miniaudio/lib/miniaudio_platform_interface.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -import 'miniaudio_method_channel.dart'; - -abstract class MiniaudioPlatform extends PlatformInterface { - /// Constructs a MiniaudioPlatform. - MiniaudioPlatform() : super(token: _token); - - static final Object _token = Object(); - - static MiniaudioPlatform _instance = MethodChannelMiniaudio(); - - /// The default instance of [MiniaudioPlatform] to use. - /// - /// Defaults to [MethodChannelMiniaudio]. - static MiniaudioPlatform get instance => _instance; - - /// Platform-specific implementations should set this with their own - /// platform-specific class that extends [MiniaudioPlatform] when - /// they register themselves. - static set instance(MiniaudioPlatform instance) { - PlatformInterface.verifyToken(instance, _token); - _instance = instance; - } - - Future getPlatformVersion() { - throw UnimplementedError('platformVersion() has not been implemented.'); - } -} diff --git a/lib/third_party/miniaudio/linux/CMakeLists.txt b/lib/third_party/miniaudio/linux/CMakeLists.txt index 4f958a7b..f52e6ba6 100644 --- a/lib/third_party/miniaudio/linux/CMakeLists.txt +++ b/lib/third_party/miniaudio/linux/CMakeLists.txt @@ -7,88 +7,16 @@ cmake_minimum_required(VERSION 3.10) set(PROJECT_NAME "miniaudio") project(${PROJECT_NAME} LANGUAGES CXX) -# This value is used when generating builds using this plugin, so it must -# not be changed. -set(PLUGIN_NAME "miniaudio_plugin") - -# Any new source files that you add to the plugin should be added here. -list(APPEND PLUGIN_SOURCES - "miniaudio_plugin.cc" -) - -# Define the plugin library target. Its name must not be changed (see comment -# on PLUGIN_NAME above). -add_library(${PLUGIN_NAME} SHARED - ${PLUGIN_SOURCES} -) - -# Apply a standard set of build settings that are configured in the -# application-level CMakeLists.txt. This can be removed for plugins that want -# full control over build settings. -apply_standard_settings(${PLUGIN_NAME}) - -# Symbols are hidden by default to reduce the chance of accidental conflicts -# between plugins. This should not be removed; any symbols that should be -# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. -set_target_properties(${PLUGIN_NAME} PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) - -# Source include directories and library dependencies. Add any plugin-specific -# dependencies here. -target_include_directories(${PLUGIN_NAME} INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/include") -target_link_libraries(${PLUGIN_NAME} PRIVATE flutter) -target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK) +# Invoke the build for native code shared with the other target platforms. +# This can be changed to accommodate different builds. +add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../src" "${CMAKE_CURRENT_BINARY_DIR}/shared") # List of absolute paths to libraries that should be bundled with the plugin. # This list could contain prebuilt libraries, or libraries created by an # external build triggered from this build file. set(miniaudio_bundled_libraries - "" + # Defined in ../src/CMakeLists.txt. + # This can be changed to accommodate different builds. + $ PARENT_SCOPE ) - -# === Tests === -# These unit tests can be run from a terminal after building the example. - -# Only enable test builds when building the example (which sets this variable) -# so that plugin clients aren't building the tests. -if (${include_${PROJECT_NAME}_tests}) -if(${CMAKE_VERSION} VERSION_LESS "3.11.0") -message("Unit tests require CMake 3.11.0 or later") -else() -set(TEST_RUNNER "${PROJECT_NAME}_test") -enable_testing() - -# Add the Google Test dependency. -include(FetchContent) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/release-1.11.0.zip -) -# Prevent overriding the parent project's compiler/linker settings -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -# Disable install commands for gtest so it doesn't end up in the bundle. -set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of googletest" FORCE) - -FetchContent_MakeAvailable(googletest) - -# The plugin's exported API is not very useful for unit testing, so build the -# sources directly into the test binary rather than using the shared library. -add_executable(${TEST_RUNNER} - test/miniaudio_plugin_test.cc - ${PLUGIN_SOURCES} -) -apply_standard_settings(${TEST_RUNNER}) -target_include_directories(${TEST_RUNNER} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") -target_link_libraries(${TEST_RUNNER} PRIVATE flutter) -target_link_libraries(${TEST_RUNNER} PRIVATE PkgConfig::GTK) -target_link_libraries(${TEST_RUNNER} PRIVATE gtest_main gmock) - -# Enable automatic test discovery. -include(GoogleTest) -gtest_discover_tests(${TEST_RUNNER}) - -endif() # CMake version check -endif() # include_${PROJECT_NAME}_tests \ No newline at end of file diff --git a/lib/third_party/miniaudio/linux/include/miniaudio/miniaudio_plugin.h b/lib/third_party/miniaudio/linux/include/miniaudio/miniaudio_plugin.h deleted file mode 100644 index 5321ddd9..00000000 --- a/lib/third_party/miniaudio/linux/include/miniaudio/miniaudio_plugin.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ -#define FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ - -#include - -G_BEGIN_DECLS - -#ifdef FLUTTER_PLUGIN_IMPL -#define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default"))) -#else -#define FLUTTER_PLUGIN_EXPORT -#endif - -typedef struct _MiniaudioPlugin MiniaudioPlugin; -typedef struct { - GObjectClass parent_class; -} MiniaudioPluginClass; - -FLUTTER_PLUGIN_EXPORT GType miniaudio_plugin_get_type(); - -FLUTTER_PLUGIN_EXPORT void miniaudio_plugin_register_with_registrar( - FlPluginRegistrar* registrar); - -G_END_DECLS - -#endif // FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ diff --git a/lib/third_party/miniaudio/linux/miniaudio_plugin.cc b/lib/third_party/miniaudio/linux/miniaudio_plugin.cc deleted file mode 100644 index 9782d8c4..00000000 --- a/lib/third_party/miniaudio/linux/miniaudio_plugin.cc +++ /dev/null @@ -1,87 +0,0 @@ -#include "include/miniaudio/miniaudio_plugin.h" - -#include -#include -#include - -#include - -#include "miniaudio_plugin_private.h" -#include "miniaudio.h" - -#define MINIAUDIO_PLUGIN(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), miniaudio_plugin_get_type(), \ - MiniaudioPlugin)) - -struct _MiniaudioPlugin { - GObject parent_instance; -}; - -G_DEFINE_TYPE(MiniaudioPlugin, miniaudio_plugin, g_object_get_type()) - -// Called when a method call is received from Flutter. -static void miniaudio_plugin_handle_method_call( - MiniaudioPlugin* self, - FlMethodCall* method_call) { - g_autoptr(FlMethodResponse) response = nullptr; - - const gchar* method = fl_method_call_get_name(method_call); - //const FlValue* args = fl_method_call_get_args(method_call); - - if (strcmp(method, "getPlatformVersion") == 0) { - response = get_platform_version(); - }else if (strcmp(method, "playAudio") == 0) { - // ma_decoder decoder; - // ma_result result; - // result = ma_decoder_init_file(fl_value_get_string(0), NULL, &decoder); - // if (result != MA_SUCCESS) { - /// printf("Could not load file: %s\n", fl_value_get_string(0)); - // } - - //response = nullptr; - } else { - response = FL_METHOD_RESPONSE(fl_method_not_implemented_response_new()); - } - - fl_method_call_respond(method_call, response, nullptr); -} - -FlMethodResponse* get_platform_version() { - struct utsname uname_data = {}; - uname(&uname_data); - g_autofree gchar *version = g_strdup_printf("Linux %s", uname_data.version); - g_autoptr(FlValue) result = fl_value_new_string(version); - return FL_METHOD_RESPONSE(fl_method_success_response_new(result)); -} - -static void miniaudio_plugin_dispose(GObject* object) { - G_OBJECT_CLASS(miniaudio_plugin_parent_class)->dispose(object); -} - -static void miniaudio_plugin_class_init(MiniaudioPluginClass* klass) { - G_OBJECT_CLASS(klass)->dispose = miniaudio_plugin_dispose; -} - -static void miniaudio_plugin_init(MiniaudioPlugin* self) {} - -static void method_call_cb(FlMethodChannel* channel, FlMethodCall* method_call, - gpointer user_data) { - MiniaudioPlugin* plugin = MINIAUDIO_PLUGIN(user_data); - miniaudio_plugin_handle_method_call(plugin, method_call); -} - -void miniaudio_plugin_register_with_registrar(FlPluginRegistrar* registrar) { - MiniaudioPlugin* plugin = MINIAUDIO_PLUGIN( - g_object_new(miniaudio_plugin_get_type(), nullptr)); - - g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new(); - g_autoptr(FlMethodChannel) channel = - fl_method_channel_new(fl_plugin_registrar_get_messenger(registrar), - "miniaudio", - FL_METHOD_CODEC(codec)); - fl_method_channel_set_method_call_handler(channel, method_call_cb, - g_object_ref(plugin), - g_object_unref); - - g_object_unref(plugin); -} diff --git a/lib/third_party/miniaudio/linux/miniaudio_plugin_private.h b/lib/third_party/miniaudio/linux/miniaudio_plugin_private.h deleted file mode 100644 index 96fa15f8..00000000 --- a/lib/third_party/miniaudio/linux/miniaudio_plugin_private.h +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#include "include/miniaudio/miniaudio_plugin.h" - -// This file exposes some plugin internals for unit testing. See -// https://github.com/flutter/flutter/issues/88724 for current limitations -// in the unit-testable API. - -// Handles the getPlatformVersion method call. -FlMethodResponse *get_platform_version(); diff --git a/lib/third_party/miniaudio/linux/test/miniaudio_plugin_test.cc b/lib/third_party/miniaudio/linux/test/miniaudio_plugin_test.cc deleted file mode 100644 index f3717364..00000000 --- a/lib/third_party/miniaudio/linux/test/miniaudio_plugin_test.cc +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -#include "include/miniaudio/miniaudio_plugin.h" -#include "miniaudio_plugin_private.h" - -// This demonstrates a simple unit test of the C portion of this plugin's -// implementation. -// -// Once you have built the plugin's example app, you can run these tests -// from the command line. For instance, for a plugin called my_plugin -// built for x64 debug, run: -// $ build/linux/x64/debug/plugins/my_plugin/my_plugin_test - -namespace miniaudio { -namespace test { - -TEST(MiniaudioPlugin, GetPlatformVersion) { - g_autoptr(FlMethodResponse) response = get_platform_version(); - ASSERT_NE(response, nullptr); - ASSERT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response)); - FlValue* result = fl_method_success_response_get_result( - FL_METHOD_SUCCESS_RESPONSE(response)); - ASSERT_EQ(fl_value_get_type(result), FL_VALUE_TYPE_STRING); - // The full string varies, so just validate that it has the right format. - EXPECT_THAT(fl_value_get_string(result), testing::StartsWith("Linux ")); -} - -} // namespace test -} // namespace miniaudio diff --git a/lib/third_party/miniaudio/macos/Classes/MiniaudioPlugin.swift b/lib/third_party/miniaudio/macos/Classes/MiniaudioPlugin.swift deleted file mode 100644 index 47da2d08..00000000 --- a/lib/third_party/miniaudio/macos/Classes/MiniaudioPlugin.swift +++ /dev/null @@ -1,19 +0,0 @@ -import Cocoa -import FlutterMacOS - -public class MiniaudioPlugin: NSObject, FlutterPlugin { - public static func register(with registrar: FlutterPluginRegistrar) { - let channel = FlutterMethodChannel(name: "miniaudio", binaryMessenger: registrar.messenger) - let instance = MiniaudioPlugin() - registrar.addMethodCallDelegate(instance, channel: channel) - } - - public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { - switch call.method { - case "getPlatformVersion": - result("macOS " + ProcessInfo.processInfo.operatingSystemVersionString) - default: - result(FlutterMethodNotImplemented) - } - } -} diff --git a/lib/third_party/miniaudio/macos/miniaudio.podspec b/lib/third_party/miniaudio/macos/miniaudio.podspec deleted file mode 100644 index f6218c22..00000000 --- a/lib/third_party/miniaudio/macos/miniaudio.podspec +++ /dev/null @@ -1,23 +0,0 @@ -# -# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. -# Run `pod lib lint miniaudio.podspec` to validate before publishing. -# -Pod::Spec.new do |s| - s.name = 'miniaudio' - s.version = '0.0.1' - s.summary = 'A new Flutter plugin project.' - s.description = <<-DESC -A new Flutter plugin project. - DESC - s.homepage = 'http://example.com' - s.license = { :file => '../LICENSE' } - s.author = { 'Your Company' => 'email@example.com' } - - s.source = { :path => '.' } - s.source_files = 'Classes/**/*' - s.dependency 'FlutterMacOS' - - s.platform = :osx, '10.11' - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } - s.swift_version = '5.0' -end diff --git a/lib/third_party/miniaudio/pubspec.lock b/lib/third_party/miniaudio/pubspec.lock new file mode 100644 index 00000000..18408557 --- /dev/null +++ b/lib/third_party/miniaudio/pubspec.lock @@ -0,0 +1,333 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" + url: "https://pub.dev" + source: hosted + version: "3.4.10" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: "direct main" + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + ffigen: + dependency: "direct dev" + description: + name: ffigen + sha256: ec6a2439159d27c871d92862fb9f3012ef19d9ec4b0fa383c69c8553b2dd2ac5 + url: "https://pub.dev" + source: hosted + version: "6.1.2" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + image: + dependency: "direct dev" + description: + name: image + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + js: + dependency: transitive + description: + name: js + sha256: "4186c61b32f99e60f011f7160e32c89a758ae9b1d0c6d28e2c02ef0382300e2b" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + plugin_platform_interface: + dependency: "direct main" + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + url: "https://pub.dev" + source: hosted + version: "3.7.4" + quiver: + dependency: transitive + description: + name: quiver + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.3.0" diff --git a/lib/third_party/miniaudio/pubspec.yaml b/lib/third_party/miniaudio/pubspec.yaml index efdec4ab..9786cdb3 100644 --- a/lib/third_party/miniaudio/pubspec.yaml +++ b/lib/third_party/miniaudio/pubspec.yaml @@ -1,18 +1,20 @@ name: miniaudio -description: "A new Flutter plugin project." +description: Play audio version: 0.0.1 -homepage: environment: - sdk: '>=3.2.6 <4.0.0' + sdk: '>=3.1.0 <4.0.0' flutter: '>=3.3.0' dependencies: flutter: sdk: flutter plugin_platform_interface: ^2.0.2 + ffi: ^2.0.1 dev_dependencies: + ffigen: ^6.1.2 + image: ^3.0.1 flutter_test: sdk: flutter flutter_lints: ^2.0.0 @@ -32,19 +34,12 @@ flutter: # This is required for using `dart:ffi`. # All these are used by the tooling to maintain consistency when # adding or updating assets for this project. + # + # Please refer to README.md for a detailed explanation. plugin: platforms: - android: - package: com.example.miniaudio - pluginClass: MiniaudioPlugin - ios: - pluginClass: MiniaudioPlugin linux: - pluginClass: MiniaudioPlugin - macos: - pluginClass: MiniaudioPlugin - windows: - pluginClass: MiniaudioPluginCApi + ffiPlugin: true # To add assets to your plugin package, add an assets section, like this: # assets: diff --git a/lib/third_party/miniaudio/src/CMakeLists.txt b/lib/third_party/miniaudio/src/CMakeLists.txt new file mode 100644 index 00000000..66a8c848 --- /dev/null +++ b/lib/third_party/miniaudio/src/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.10) +project(audio_library VERSION 0.0.1 LANGUAGES C CXX) + +add_library(miniaudio SHARED "audio.c") +target_link_libraries(miniaudio) + +set_target_properties(miniaudio PROPERTIES + PUBLIC_HEADER audio.h + PUBLIC_HEADER miniaudio.h + OUTPUT_NAME "miniaudio" +) + +target_compile_definitions(miniaudio PUBLIC DART_SHARED_LIB) diff --git a/lib/third_party/miniaudio/src/audio.c b/lib/third_party/miniaudio/src/audio.c new file mode 100644 index 00000000..be5eda67 --- /dev/null +++ b/lib/third_party/miniaudio/src/audio.c @@ -0,0 +1,67 @@ +#define MINIAUDIO_IMPLEMENTATION +#include "miniaudio.h" +#include + + ma_device recording_device; + ma_engine engine; +void initAudio() { + ma_result result; + result = ma_engine_init(NULL, &engine); + if (result != MA_SUCCESS) { + printf("Could not init engine\n"); + + } +} + +void playAudio(char * file) { + ma_engine_play_sound(&engine, file, NULL); +} + +void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount) +{ + ma_encoder* pEncoder = (ma_encoder*)pDevice->pUserData; + MA_ASSERT(pEncoder != NULL); + + ma_encoder_write_pcm_frames(pEncoder, pInput, frameCount, NULL); + + (void)pOutput; +} + +void startRecording() { + ma_result result; + ma_encoder_config encoderConfig; + ma_encoder encoder; + ma_device_config deviceConfig; + + encoderConfig = ma_encoder_config_init(ma_encoding_format_wav, ma_format_f32, 2, 44100); + deviceConfig = ma_device_config_init(ma_device_type_capture); + deviceConfig.capture.format = encoder.config.format; + deviceConfig.capture.channels = encoder.config.channels; + deviceConfig.sampleRate = encoder.config.sampleRate; + deviceConfig.dataCallback = data_callback; + deviceConfig.pUserData = &encoder; + + if (ma_encoder_init_file("test.wav", &encoderConfig, &encoder) != MA_SUCCESS) { + printf("Failed to initialize output file.\n"); + return ; + } + + result = ma_device_init(NULL, &deviceConfig, &recording_device); + if (result != MA_SUCCESS) { + printf("Failed to initialize capture device.\n"); + return ; + } + + result = ma_device_start(&recording_device); + if (result != MA_SUCCESS) { + printf("Failed to start device.\n"); + return; + } +} + +void stopRecording() { + ma_result result; + result = ma_device_stop(&recording_device); +} + + \ No newline at end of file diff --git a/lib/third_party/miniaudio/src/audio.h b/lib/third_party/miniaudio/src/audio.h new file mode 100644 index 00000000..7a32e174 --- /dev/null +++ b/lib/third_party/miniaudio/src/audio.h @@ -0,0 +1,14 @@ +#include +#include "miniaudio.h" +#ifdef __cplusplus +extern "C" { +#endif + +void initAudio(); +void playAudio(char * file); + +#ifdef __cplusplus +} +#endif + + diff --git a/lib/third_party/miniaudio/linux/miniaudio.h b/lib/third_party/miniaudio/src/miniaudio.h similarity index 100% rename from lib/third_party/miniaudio/linux/miniaudio.h rename to lib/third_party/miniaudio/src/miniaudio.h diff --git a/lib/third_party/miniaudio/test/miniaudio_method_channel_test.dart b/lib/third_party/miniaudio/test/miniaudio_method_channel_test.dart deleted file mode 100644 index 3f82703e..00000000 --- a/lib/third_party/miniaudio/test/miniaudio_method_channel_test.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:miniaudio/miniaudio_method_channel.dart'; - -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - MethodChannelMiniaudio platform = MethodChannelMiniaudio(); - const MethodChannel channel = MethodChannel('miniaudio'); - - setUp(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( - channel, - (MethodCall methodCall) async { - return '42'; - }, - ); - }); - - tearDown(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(channel, null); - }); - - test('getPlatformVersion', () async { - expect(await platform.getPlatformVersion(), '42'); - }); -} diff --git a/lib/third_party/miniaudio/test/miniaudio_test.dart b/lib/third_party/miniaudio/test/miniaudio_test.dart deleted file mode 100644 index 6156d8cb..00000000 --- a/lib/third_party/miniaudio/test/miniaudio_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:miniaudio/miniaudio.dart'; -import 'package:miniaudio/miniaudio_platform_interface.dart'; -import 'package:miniaudio/miniaudio_method_channel.dart'; -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -class MockMiniaudioPlatform - with MockPlatformInterfaceMixin - implements MiniaudioPlatform { - - @override - Future getPlatformVersion() => Future.value('42'); -} - -void main() { - final MiniaudioPlatform initialPlatform = MiniaudioPlatform.instance; - - test('$MethodChannelMiniaudio is the default instance', () { - expect(initialPlatform, isInstanceOf()); - }); - - test('getPlatformVersion', () async { - Miniaudio miniaudioPlugin = Miniaudio(); - MockMiniaudioPlatform fakePlatform = MockMiniaudioPlatform(); - MiniaudioPlatform.instance = fakePlatform; - - expect(await miniaudioPlugin.getPlatformVersion(), '42'); - }); -} diff --git a/lib/third_party/miniaudio/windows/.gitignore b/lib/third_party/miniaudio/windows/.gitignore deleted file mode 100644 index b3eb2be1..00000000 --- a/lib/third_party/miniaudio/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/lib/third_party/miniaudio/windows/CMakeLists.txt b/lib/third_party/miniaudio/windows/CMakeLists.txt deleted file mode 100644 index d7ee6148..00000000 --- a/lib/third_party/miniaudio/windows/CMakeLists.txt +++ /dev/null @@ -1,100 +0,0 @@ -# The Flutter tooling requires that developers have a version of Visual Studio -# installed that includes CMake 3.14 or later. You should not increase this -# version, as doing so will cause the plugin to fail to compile for some -# customers of the plugin. -cmake_minimum_required(VERSION 3.14) - -# Project-level configuration. -set(PROJECT_NAME "miniaudio") -project(${PROJECT_NAME} LANGUAGES CXX) - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(VERSION 3.14...3.25) - -# This value is used when generating builds using this plugin, so it must -# not be changed -set(PLUGIN_NAME "miniaudio_plugin") - -# Any new source files that you add to the plugin should be added here. -list(APPEND PLUGIN_SOURCES - "miniaudio_plugin.cpp" - "miniaudio_plugin.h" -) - -# Define the plugin library target. Its name must not be changed (see comment -# on PLUGIN_NAME above). -add_library(${PLUGIN_NAME} SHARED - "include/miniaudio/miniaudio_plugin_c_api.h" - "miniaudio_plugin_c_api.cpp" - ${PLUGIN_SOURCES} -) - -# Apply a standard set of build settings that are configured in the -# application-level CMakeLists.txt. This can be removed for plugins that want -# full control over build settings. -apply_standard_settings(${PLUGIN_NAME}) - -# Symbols are hidden by default to reduce the chance of accidental conflicts -# between plugins. This should not be removed; any symbols that should be -# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. -set_target_properties(${PLUGIN_NAME} PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) - -# Source include directories and library dependencies. Add any plugin-specific -# dependencies here. -target_include_directories(${PLUGIN_NAME} INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/include") -target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) - -# List of absolute paths to libraries that should be bundled with the plugin. -# This list could contain prebuilt libraries, or libraries created by an -# external build triggered from this build file. -set(miniaudio_bundled_libraries - "" - PARENT_SCOPE -) - -# === Tests === -# These unit tests can be run from a terminal after building the example, or -# from Visual Studio after opening the generated solution file. - -# Only enable test builds when building the example (which sets this variable) -# so that plugin clients aren't building the tests. -if (${include_${PROJECT_NAME}_tests}) -set(TEST_RUNNER "${PROJECT_NAME}_test") -enable_testing() - -# Add the Google Test dependency. -include(FetchContent) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/release-1.11.0.zip -) -# Prevent overriding the parent project's compiler/linker settings -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -# Disable install commands for gtest so it doesn't end up in the bundle. -set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of googletest" FORCE) -FetchContent_MakeAvailable(googletest) - -# The plugin's C API is not very useful for unit testing, so build the sources -# directly into the test binary rather than using the DLL. -add_executable(${TEST_RUNNER} - test/miniaudio_plugin_test.cpp - ${PLUGIN_SOURCES} -) -apply_standard_settings(${TEST_RUNNER}) -target_include_directories(${TEST_RUNNER} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") -target_link_libraries(${TEST_RUNNER} PRIVATE flutter_wrapper_plugin) -target_link_libraries(${TEST_RUNNER} PRIVATE gtest_main gmock) -# flutter_wrapper_plugin has link dependencies on the Flutter DLL. -add_custom_command(TARGET ${TEST_RUNNER} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${FLUTTER_LIBRARY}" $ -) - -# Enable automatic test discovery. -include(GoogleTest) -gtest_discover_tests(${TEST_RUNNER}) -endif() diff --git a/lib/third_party/miniaudio/windows/include/miniaudio/miniaudio_plugin_c_api.h b/lib/third_party/miniaudio/windows/include/miniaudio/miniaudio_plugin_c_api.h deleted file mode 100644 index 8d05b35e..00000000 --- a/lib/third_party/miniaudio/windows/include/miniaudio/miniaudio_plugin_c_api.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_C_API_H_ -#define FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_C_API_H_ - -#include - -#ifdef FLUTTER_PLUGIN_IMPL -#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) -#else -#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -FLUTTER_PLUGIN_EXPORT void MiniaudioPluginCApiRegisterWithRegistrar( - FlutterDesktopPluginRegistrarRef registrar); - -#if defined(__cplusplus) -} // extern "C" -#endif - -#endif // FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_C_API_H_ diff --git a/lib/third_party/miniaudio/windows/miniaudio_plugin.cpp b/lib/third_party/miniaudio/windows/miniaudio_plugin.cpp deleted file mode 100644 index 505491b8..00000000 --- a/lib/third_party/miniaudio/windows/miniaudio_plugin.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "miniaudio_plugin.h" - -// This must be included before many other Windows headers. -#include - -// For getPlatformVersion; remove unless needed for your plugin implementation. -#include - -#include -#include -#include - -#include -#include - -namespace miniaudio { - -// static -void MiniaudioPlugin::RegisterWithRegistrar( - flutter::PluginRegistrarWindows *registrar) { - auto channel = - std::make_unique>( - registrar->messenger(), "miniaudio", - &flutter::StandardMethodCodec::GetInstance()); - - auto plugin = std::make_unique(); - - channel->SetMethodCallHandler( - [plugin_pointer = plugin.get()](const auto &call, auto result) { - plugin_pointer->HandleMethodCall(call, std::move(result)); - }); - - registrar->AddPlugin(std::move(plugin)); -} - -MiniaudioPlugin::MiniaudioPlugin() {} - -MiniaudioPlugin::~MiniaudioPlugin() {} - -void MiniaudioPlugin::HandleMethodCall( - const flutter::MethodCall &method_call, - std::unique_ptr> result) { - if (method_call.method_name().compare("getPlatformVersion") == 0) { - std::ostringstream version_stream; - version_stream << "Windows "; - if (IsWindows10OrGreater()) { - version_stream << "10+"; - } else if (IsWindows8OrGreater()) { - version_stream << "8"; - } else if (IsWindows7OrGreater()) { - version_stream << "7"; - } - result->Success(flutter::EncodableValue(version_stream.str())); - } else { - result->NotImplemented(); - } -} - -} // namespace miniaudio diff --git a/lib/third_party/miniaudio/windows/miniaudio_plugin.h b/lib/third_party/miniaudio/windows/miniaudio_plugin.h deleted file mode 100644 index 9b70f8c3..00000000 --- a/lib/third_party/miniaudio/windows/miniaudio_plugin.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ -#define FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ - -#include -#include - -#include - -namespace miniaudio { - -class MiniaudioPlugin : public flutter::Plugin { - public: - static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar); - - MiniaudioPlugin(); - - virtual ~MiniaudioPlugin(); - - // Disallow copy and assign. - MiniaudioPlugin(const MiniaudioPlugin&) = delete; - MiniaudioPlugin& operator=(const MiniaudioPlugin&) = delete; - - // Called when a method is called on this plugin's channel from Dart. - void HandleMethodCall( - const flutter::MethodCall &method_call, - std::unique_ptr> result); -}; - -} // namespace miniaudio - -#endif // FLUTTER_PLUGIN_MINIAUDIO_PLUGIN_H_ diff --git a/lib/third_party/miniaudio/windows/miniaudio_plugin_c_api.cpp b/lib/third_party/miniaudio/windows/miniaudio_plugin_c_api.cpp deleted file mode 100644 index e9e92a5e..00000000 --- a/lib/third_party/miniaudio/windows/miniaudio_plugin_c_api.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "include/miniaudio/miniaudio_plugin_c_api.h" - -#include - -#include "miniaudio_plugin.h" - -void MiniaudioPluginCApiRegisterWithRegistrar( - FlutterDesktopPluginRegistrarRef registrar) { - miniaudio::MiniaudioPlugin::RegisterWithRegistrar( - flutter::PluginRegistrarManager::GetInstance() - ->GetRegistrar(registrar)); -} diff --git a/lib/third_party/miniaudio/windows/test/miniaudio_plugin_test.cpp b/lib/third_party/miniaudio/windows/test/miniaudio_plugin_test.cpp deleted file mode 100644 index c37c0e34..00000000 --- a/lib/third_party/miniaudio/windows/test/miniaudio_plugin_test.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "miniaudio_plugin.h" - -namespace miniaudio { -namespace test { - -namespace { - -using flutter::EncodableMap; -using flutter::EncodableValue; -using flutter::MethodCall; -using flutter::MethodResultFunctions; - -} // namespace - -TEST(MiniaudioPlugin, GetPlatformVersion) { - MiniaudioPlugin plugin; - // Save the reply value from the success callback. - std::string result_string; - plugin.HandleMethodCall( - MethodCall("getPlatformVersion", std::make_unique()), - std::make_unique>( - [&result_string](const EncodableValue* result) { - result_string = std::get(*result); - }, - nullptr, nullptr)); - - // Since the exact string varies by host, just ensure that it's a string - // with the expected format. - EXPECT_TRUE(result_string.rfind("Windows ", 0) == 0); -} - -} // namespace test -} // namespace miniaudio diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index f7e7ca6a..0cacc750 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,15 +6,11 @@ #include "generated_plugin_registrant.h" -#include #include #include #include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) miniaudio_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "MiniaudioPlugin"); - miniaudio_plugin_register_with_registrar(miniaudio_registrar); g_autoptr(FlPluginRegistrar) screen_retriever_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2131e77d..775650f7 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - miniaudio screen_retriever url_launcher_linux window_manager @@ -11,6 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST camera_linux + miniaudio ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e3ec8045..656d31e1 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,7 +7,6 @@ import Foundation import connectivity_plus import flutter_local_notifications -import miniaudio import package_info_plus import path_provider_foundation import screen_retriever @@ -17,7 +16,6 @@ import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) - MiniaudioPlugin.register(with: registry.registrar(forPlugin: "MiniaudioPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 7c4ffec0..58d9f097 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -983,5 +983,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.6 <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.7.0" diff --git a/pubspec.yaml b/pubspec.yaml index 29452ff9..b17fc1d2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,7 +57,7 @@ dependencies: camera_linux: path: lib/third_party/camera_linux miniaudio: - path: lib/third_party/miniaudio + path: lib/third_party/miniaudio # misc plugins qr_flutter: ^4.0.0 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 61b92b00..b4b9a696 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,7 +7,6 @@ #include "generated_plugin_registrant.h" #include -#include #include #include #include @@ -16,8 +15,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { ConnectivityPlusWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); - MiniaudioPluginCApiRegisterWithRegistrar( - registry->GetRegistrarForPlugin("MiniaudioPluginCApi")); ScreenRetrieverPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index e92634c0..427d1281 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST connectivity_plus - miniaudio screen_retriever url_launcher_windows win_toast